战略分析逻辑哲理模板

示例:【牧之野:一切都不一样了 – 今日头条】https://m.toutiao.com/is/iSdbM6C4/

能讲道理的前提是,双方实力均衡或历史有章可循。历史到了关键节点,不会以谁的意志为转移,一切都在加速。 我们如何定性上一周中国的变化,仅仅是一种救市的理解,或是一次巨大的跨越,现在去做评价还太早,或许某一天它会写在历史书里,以我们不太熟悉的表达方式。 但,有的时候,我们需要做决策。 林彪要塔山不要伤亡数字,是因为他知道塔山如果在那个时候拿不下来,可能导致整个战局的崩溃。 当年平津战役中新保安一战,我们一支部队因贪图攻打某城没有及时执行中央围剿傅作义最精锐的郭景云35师,差一点就让和平解放北京天津的战略功亏一篑。 这些,打塔山的部队、犯错的部队是领悟不到的,因为他们看不到全局。 在条件并不完全对等的情况下,战略上有些出其不意的招数,既有可能成为奇袭的决定性战役,也有可能犯下巨大失误。 同样,这些,我们也只能从事后去马后炮,形成理论上闭环,但当时,你怎么办? 因为在这些时刻,原来的所有的道理,可能都会瞬间失效,没有先例可遵循。 我已经充分发挥了自己研究和想象力,去尝试理解局势的变化。 其实远期的局势并不难研判,越是近的,反而越不容易。

40/70原则是指在决策过程中,当掌握了40%的信息时不要做出决策,而应该在掌握70%的信息时做出决定。‌ 这个原则是由美国人类心理学研究者皮特-霍林斯提出的,美国国务卿科林-鲍威尔曾经提到过这一原则‌。40/70原则的核心在于平衡决策的时机和信息的掌握程度。当你已经掌握了70%的信息时,应该做出决定,因为继续等待可能会错过更好的机会或者导致决策延误。这一原则强调了在决策过程中信息的重要性,并提醒人们在决策时要避免过度思考或者拖延‌。

压迫感是逐步给的,现在时机并不成熟。我们要给菲律宾一点压力,防范它的铤而走险,要尽量分化菲律宾和越南。所以,我们从工具箱子里拿出来的是绳子,而不是刀剑。

这一年多证明,的确他们要干的事情就是剧本本身。

从长中短期去看当下,决策结果都不同

我们每个人只能赚自己认知之内的钱

钱老曾说过一个观点:脱离系统的元素是毫无意义的。

输赢并不是就简单判定说一定要大涨就是赢,大跌就是输,而是,我们有没有在朝着一个正确的方向前进,去剜烂肉,去祛除长期存在于中国资本市场的顽疾,去规范上市公司,去吸引国外资本回流。

可怕的不是耍手段,而是即便打明牌,你也没办法。

西方文明解决问题,有点类似西医的风格,哪里坏了就切哪里,头疼医头脚疼医脚。以色列便是个例子,到处杀哈马斯杀真主党的头,可是,它一直搞不清楚,为什么这次就行不通了,为什么仗打了一年加沙一直还没弄干净。它们不懂,如何系统地、全局地解决问题,完全不理解。

对于这个世界的操控与反操控,对于国际斗争,说实话,我们还是小学生。我们是很正经的人,正经到即便再底线思维,或许也无法理解没有底线人做的事情。

对于结局,没有人知道,但有个道理是肯定的:谁能坚持到最后,谁就是胜利者。

getattr详解

一、基础用法
getattr() 是 Python 内置的一个函数,可以用来获取一个对象的属性值或方法。其基本语法为:

getattr(object, name[, default])
1
其中,object 是要获取属性值或方法的对象;name 是要获取的属性名或方法名;default 是可选参数,当指定的属性或方法不存在时,会返回 default 的值。

getattr() 可以通过对象实例或类名来获取属性值或方法,也可以获取内置函数、内置类型和标准库中的属性和方法。

下面是一些常见的使用 getattr() 的案例:

获取对象的属性值
class MyClass:
def init(self):
self.x = 1
self.y = 2

obj = MyClass()

print(getattr(obj, ‘x’)) # 输出 1
print(getattr(obj, ‘y’)) # 输出 2

运行运行
获取对象的方法
class MyClass:
def my_method(self):
print(‘Hello, world!’)

obj = MyClass()

method = getattr(obj, ‘my_method’)
method() # 输出 “Hello, world!”

运行运行
获取内置函数和类型
func = getattr(builtins, ‘abs’)
print(func(-1)) # 输出 1

type_name = ‘str’
type_obj = getattr(builtins, type_name)
print(type_obj(‘Hello, world!’)) # 输出 “Hello, world!”

运行运行
获取标准库中的属性和方法
import datetime

now = datetime.datetime.now()

attr_name = ‘year’
attr_value = getattr(now, attr_name)
print(attr_value) # 输出当前年份

method_name = ‘strftime’
method_args = [‘%Y-%m-%d %H:%M:%S’]
method = getattr(now, method_name)
formatted = method(*method_args)
print(formatted) # 输出格式化后的时间字符串,如 “2023-05-06 10:30:00”

运行运行
在实际开发中,getattr() 还可以用于实现动态调用函数或方法的功能,以及在需要处理大量类似属性或方法的代码时,简化代码的编写。

二、复杂案例
getattr() 还可以结合 import_module() 函数,实现动态执行某个文件中某个类的方法的功能。

下面是一个稍微复杂一些的例子。

假设我们有一个 data.py 文件,其中定义了一个 Data 类和一些数据操作方法,代码如下:

data.py

class Data:
def init(self, data):
self.data = data

def get(self):
    return self.data

def add(self, value):
    self.data.append(value)

def remove(self, value):
    self.data.remove(value)

def load_data():
return [1, 2, 3]


运行运行
现在我们需要在另一个模块中,动态加载 data.py 文件,并使用 Data 类的实例对象进行数据操作,同时也需要使用 load_data() 函数进行数据的读操作。

示例代码如下:

import importlib

module_name = ‘data’
class_name = ‘Data’
method_name = ‘get’

module = importlib.import_module(module_name)
class_obj = getattr(module, class_name)(module.load_data())
method = getattr(class_obj, method_name)
print(method()) # 输出 [1, 2, 3]

value = 4
method_name = ‘add’
method = getattr(class_obj, method_name)
method(value)

method_name = ‘get’
method = getattr(class_obj, method_name)
print(method()) # 输出 [1, 2, 3, 4]

value = 2
method_name = ‘remove’
method = getattr(class_obj, method_name)
method(value)

method_name = ‘get’
method = getattr(class_obj, method_name)
print(method()) # 输出 [1, 3, 4]




在上述示例中,我们首先使用 import_module() 函数导入了 data.py 文件,然后使用 getattr() 函数获取了 Data 类的对象。接着,我们使用 () 运算符执行了 get()、add() 和 remove() 方法,从而动态进行了数据操作。

importlib是Python的一个标准库,用于处理模块的导入过程。它提供了对Python导入机制的低级访问,允许你在运行时动态地导入和重载模块。

这个例子中,我们动态地加载了一个 Python 模块,并使用 getattr() 函数获取了模块中的类和函数对象。然后,我们使用这些对象来动态地进行数据操作。这种动态加载和执行的方式,可以使代码更加灵活和可扩展。

三、import_module介绍
import_module() 函数得到的是一个模块对象,即一个表示 Python 模块的对象。模块对象是一个包含模块中所有定义的类、函数、变量等的命名空间,我们可以使用模块对象来访问这些定义。

例如,我们可以使用 module 对象来访问 data.py 文件中定义的 Data 类和 load_data() 函数,代码如下:

import importlib

module_name = ‘data’

module = importlib.import_module(module_name)
data = module.Data([1, 2, 3])
loaded_data = module.load_data()
print(loaded_data)

1
2
3
4
5
6
7
8
9
在上述代码中,我们首先使用 import_module() 函数导入了 data.py 文件,然后通过 module 对象访问了 Data 类和 load_data() 函数。我们还使用 () 运算符创建了 Data 类的实例对象 data,并调用了 load_data() 函数,获取了数据列表 loaded_data。

关于加了括号后相当于调用了相应的方法,这是因为在 Python 中,函数和方法都是可调用对象。我们可以通过使用 () 运算符来调用函数和方法。

例如,在上述代码中,我们使用 () 运算符调用了 Data 类的构造函数和 load_data() 函数,从而创建了 data 对象和获取了 loaded_data 数据。这与直接调用类或函数的方式是相同的,例如:

data = Data([1, 2, 3])
loaded_data = load_data()
print(loaded_data)
1
2
3
在这种情况下,我们直接调用了类和函数,并通过它们来创建了对象和获取了数据,而不需要使用模块对象来访问它们。

原文链接:https://blog.csdn.net/mall_lucy/article/details/130531793

任务队列 ModelQueue

提供一个示例的 model_queue 类的实现,并解释其工作原理。请注意,由于您没有提供 model_queue 的具体实现,我将基于常见的异步任务队列模式进行说明。

示例 model_queue 类

以下是一个可能的 model_queue 类的实现示例

import asyncio

class ModelQueue:
    def __init__(self):
        self.queue = asyncio.Queue()  # 使用 asyncio.Queue 来管理任务

    async def add_task(self, model, task):
        """
        将任务添加到队列并执行。

        Args:
            model: 要使用的模型。
            task: 要执行的异步任务。

        Returns:
            任务的结果。
        """
        # 将任务放入队列
        await self.queue.put((model, task))
        return await self.process_queue()  # 处理队列中的任务

    async def process_queue(self):
        """
        处理队列中的任务。

        Returns:
            任务的结果。
        """
        while not self.queue.empty():
            model, task = await self.queue.get()  # 从队列中获取任务
            try:
                result = await task()  # 执行任务
                return result  # 返回任务的结果
            except Exception as e:
                print(f"Error processing task for model {model}: {e}")
            finally:
                self.queue.task_done()  # 标记任务完成

解释

队列初始化:self.queue = asyncio.Queue():使用 asyncio.Queue 来管理异步任务。这个队列可以存储多个任务,并在需要时逐个处理。

添加任务:async def add_task(self, model, task):这个方法将任务添加到队列中,并调用 process_queue 方法来处理队列中的任务。

await self.queue.put((model, task)):将模型和任务元组放入队列。

处理队列:async def process_queue(self):这个方法处理队列中的任务。

while not self.queue.empty():循环直到队列为空。

model, task = await self.queue.get():从队列中获取任务。

result = await task():执行任务并等待其完成。

self.queue.task_done():标记任务完成。

IP自动切换

未有测试,要用再测试,https://www.xiequ.cn/index.html每天有免费代理

https://englishcode.lanzoul.com/i5B6422srfxi

图片

🎈主要功能和源码

可以识别JSON的API接口,可以获取到IP和端口与地址信息,如果地址信息获取不到也没事,IP和端口一般都能获取到,我用了大概两家的JSON 都是不同的格式的,都可以正常代理 谐趣代理每天免费1000个代理,还可以

可以设置自动切换IP时间间隔 自定义API接口地址

import requests
import json
import os
import subprocess
import time
import sys
import logging
import tkinter as tk
from tkinter import scrolledtext
from threading import Thread, Event

# 设置输出编码为 UTF-8


# 自定义日志处理器
class ScrolledTextHandler(logging.Handler):
    def __init__(self, text_widget):
        super().__init__()
        self.text_widget = text_widget

    def emit(self, record):
        msg = self.format(record)

        def append():
            self.text_widget.insert(tk.END, msg + '\n')
            self.text_widget.see(tk.END)

        self.text_widget.after(0, append)


# 通用函数递归提取代理信息
def extract_proxy_info(data):
    logging.debug(f"解析返回的数据: {data}")

    possible_keys = {
        "ip": ["IP", "ip", "IpAddress", "ip_address"],
        "port": ["Port", "port"],
        "address": ["Address", "address", "Location", "location", "IpAddress", "ip_address"]
    }

    def recursive_extract(data, keys):
        if isinstance(data, dict):
            for key, value in data.items():
                if key in keys:
                    return value
                elif isinstance(value, (dict, list)):
                    result = recursive_extract(value, keys)
                    if result is not None:
                        return result
        elif isinstance(data, list):
            for item in data:
                result = recursive_extract(item, keys)
                if result is not None:
                    return result
        return None

    ip = recursive_extract(data, possible_keys["ip"])
    port = recursive_extract(data, possible_keys["port"])
    address = recursive_extract(data, possible_keys["address"])

    if not ip or not port:
        raise Exception("无法从返回的数据中提取IP和端口")

    return ip, port, address


# 从API获取代理IP和端口
def get_proxy(api_url):
    response = requests.get(api_url)
    response.encoding = 'utf-8'  # 确保正确解析中文

    # 添加详细的日志记录
    logging.debug(f"API返回的原始数据: {response.text}")

    try:
        data = response.json()
        logging.debug(f"API返回的数据: {data}")

        ip, port, address = extract_proxy_info(data)
        logging.info(f"获取到的代理IP: {ip}, 端口: {port}, 地址: {address if address else '未知地址'}")
        return ip, port, address
    except Exception as e:
        logging.error(f"解析数据时发生错误: {e}")
        logging.error(f"无法解析的原始数据: {response.text}")
        raise


# 配置HTTP代理
def set_http_proxy(ip, port):
    os.environ['HTTP_PROXY'] = f"http://{ip}:{port}"
    os.environ['HTTPS_PROXY'] = f"http://{ip}:{port}"


# 关闭HTTP代理
def disable_http_proxy():
    if 'HTTP_PROXY' in os.environ:
        del os.environ['HTTP_PROXY']
    if 'HTTPS_PROXY' in os.environ:
        del os.environ['HTTPS_PROXY']
    logging.info("已关闭Python HTTP代理")


# 设置Windows全局代理
def set_windows_proxy(ip, port):
    proxy = f"{ip}:{port}"
    command_enable = [
        'reg', 'add', 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings', '/v', 'ProxyServer',
        '/t', 'REG_SZ', '/d', proxy, '/f'
    ]
    command_enable_proxy = [
        'reg', 'add', 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings', '/v', 'ProxyEnable',
        '/t', 'REG_DWORD', '/d', '1', '/f'
    ]
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    subprocess.run(command_enable, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo)
    subprocess.run(command_enable_proxy, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo)
    logging.info("已设置Windows全局代理")


# 关闭Windows全局代理
def disable_windows_proxy():
    command_disable_proxy = [
        'reg', 'add', 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings', '/v', 'ProxyEnable',
        '/t', 'REG_DWORD', '/d', '0', '/f'
    ]
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    subprocess.run(command_disable_proxy, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo)
    logging.info("已关闭Windows全局代理")


# 访问百度并检查HTTP状态码
def check_baidu():
    url = "http://www.baidu.com"
    try:
        response = requests.get(url)
        logging.info(f"HTTP状态码: {response.status_code}")
        logging.info(f"响应头: {response.headers}")
        if response.status_code == 200:
            logging.info("访问成功")
            return True
        else:
            logging.warning("访问失败: HTTP状态码不为200")
            return False
    except Exception as e:
        logging.error(f"访问失败: {e}")
        return False


def run_proxy(api_url, stop_event, switch_interval):
    try:
        while not stop_event.is_set():
            try:
                disable_windows_proxy()
                disable_http_proxy()
                ip, port, address = get_proxy(api_url)
                set_http_proxy(ip, port)
                if check_baidu():
                    set_windows_proxy(ip, port)
                for _ in range(switch_interval):
                    if stop_event.is_set():
                        break
                    time.sleep(1)
            except Exception as e:
                logging.error(f"发生错误: {e}")
                for _ in range(switch_interval):
                    if stop_event.is_set():
                        break
                    time.sleep(1)
    finally:
        disable_windows_proxy()
        disable_http_proxy()
        logging.info("代理已停止,所有代理设置已清除")


class App:
    def __init__(self, root):
        self.root = root
        self.root.title("IP代理")

        self.api_label = tk.Label(root, text="API地址:")
        self.api_label.grid(row=0, column=0, padx=10, pady=10)

        self.api_entry = tk.Entry(root, width=50)
        self.api_entry.grid(row=0, column=1, padx=10, pady=10)

        self.interval_label = tk.Label(root, text="切换间隔(秒):")
        self.interval_label.grid(row=0, column=2, padx=10, pady=10)

        self.interval_entry = tk.Entry(root, width=10)
        self.interval_entry.insert(0, "10")  # 默认值为10秒
        self.interval_entry.grid(row=0, column=3, padx=10, pady=10)

        self.start_button = tk.Button(root, text="启动代理", command=self.toggle_proxy)
        self.start_button.grid(row=0, column=4, padx=10, pady=10)

        self.console = scrolledtext.ScrolledText(root, width=100, height=30)
        self.console.grid(row=1, column=0, columnspan=5, padx=10, pady=10)

        # 添加自定义日志处理器
        handler = ScrolledTextHandler(self.console)
        handler.setLevel(logging.INFO)
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        logging.getLogger().addHandler(handler)

        # 设置日志记录器的级别
        logging.getLogger().setLevel(logging.DEBUG)

        self.proxy_thread = None
        self.stop_event = Event()

    def toggle_proxy(self):
        if self.proxy_thread is None or not self.proxy_thread.is_alive():
            api_url = self.api_entry.get()
            try:
                switch_interval = int(self.interval_entry.get())
                if api_url and switch_interval > 0:
                    self.stop_event.clear()
                    self.proxy_thread = Thread(target=self.run_proxy_thread, args=(api_url, switch_interval),
                                               daemon=True)
                    self.proxy_thread.start()
                    self.start_button.config(text="停止代理")
                    logging.info("代理已启动")
                else:
                    logging.error("请提供有效的API地址和切换间隔")
            except ValueError:
                logging.error("请提供有效的切换间隔")
        else:
            self.stop_event.set()
            self.root.after(100, self.check_thread_status)

    def check_thread_status(self):
        if self.proxy_thread.is_alive():
            self.root.after(100, self.check_thread_status)
        else:
            self.start_button.config(text="启动代理")
            logging.info("代理已停止")

    def run_proxy_thread(self, api_url, switch_interval):
        run_proxy(api_url, self.stop_event, switch_interval)


if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    root.mainloop()

AI绘画细节「替换词」大全

编写结构化提示词

  1. 选择一个「主题」,或将多个主题组合出创意;
  2. 加入各种结构、效果提示词;
  3. 微调结果;
  4. 举个例子,下面[]里表示需要替换的内容:
high-speed photography  of a [vehicle] [description] in [scene], [location], [lighting], [angle],motion blur, cinematic,  symmetrical composition , highly-detailed

[车辆] [描述] 在 [场景]、[位置]、[照明]、[角度]、运动模糊、电影感、对称构图、高度详细的情况下高速摄影

🌿 10大「主题」20+小类型

从自然风光到植物园艺,从历史时期到科幻概念,覆盖你能想到的所有创作主题。

  1. 自然风光:山川、湖泊、日落、星空、极光、海滩、森林、草原…
  2. 建筑风格:哥特式、巴洛克、现代主义、未来派、中式园林、日式庭院…
  3. 艺术流派:印象派、超现实主义、立体主义、表现主义、抽象表现…
  4. 文化元素:中国风、日韩风、波西米亚、复古、朋克、赛博朋克…
  5. 节日主题:圣诞、万圣节、复活节、春节、感恩节、情人节…
  6. 科幻概念:星际旅行、外星生物、时间旅行、黑洞、量子力学…
  7. 历史时期:古埃及、罗马帝国、中世纪、文艺复兴、工业革命…
  8. 人物形象:骑士、精灵、海盗、侦探、武士、女巫、天使、恶魔…
  9. 动物世界:狮子、狼、鹰、马、熊猫、龙、凤凰、独角兽…
  10. 植物园艺:玫瑰、薰衣草、竹、仙人掌、枫叶、樱花、向日葵…

🎨 「提升画质」

以下这些用来按需替换「提升画质」的部分:

  • highresolution 高分辨率
  • FHD,1080P,8k,16k,32k 全高清
  • highdetail 高细节
  • detailed 详细细节
  • intricatedetails 复杂细节
  • hyperquality 高品质
  • hyperrealistic 超真实
  • 35mm,50mm55mm 镜头参数
  • realistic 现实主义
  • Surrealism 超现实主义
  • UltraHDpicturequality 超高清画质
  • HDR 高动态光照渲染图像
  • unrealengine 虚幻引擎
  • 3Drendering 3D渲染
  • MaxonCinema4D 渲染
  • CoronaRender 渲染
  • architecturalvisualisation 建筑视觉化
  • photography 摄影感
  • cinematic 电影感
  • leicalens 徕卡镜头
  • scenedesign 场景设计
  • photoquality 照片质量
  • verydetailedphoto 超细节照片
  • photorealistic 照相写实主义
  • Anti-Aliasing 抗锯齿
  • PostProcessing 后期处理

图片
🖌「材质」

  • Wood 木头
  • Glass 玻璃
  • Cotton 棉花
  • Plastictexture 塑料感
  • Carvedtexture 雕刻质感
  • Lace 蕾丝
  • Stonetexture 石质
  • Celadon 青瓷
  • Enamel 琅(可能缺少了某些字母,如 “enamel”)
  • Metallicpainttexture 金属漆质感
  • Texture 纹理质感
  • Pearllustertexture 珠光质感
  • Glasstexture 玻璃质感
  • Mattetexture 亚光质感
  • Pearltexture 珍珠质感
  • Silk texture 绸缎质感
  • Fluffy texture 毛绒质感
  • metallic surfaces 金属表面
  • fluorescent neon colours 荧光色的霓虹灯
  • Water wave texture 水波纹质感
  • Graphite texture 石墨质感
  • Antique bronze texture 古铜质感
  • Brick texture 砖石质感
  • Paint texture 油漆质感
  • Gauze texture 纱绸质感
  • Clay texture 粘土质感
  • Bamboo texture 竹子质感
  • Leather texture 皮革感
  • Cotton texture 棉质
  • Crystal texture 水晶质感
  • smooth fibre textures 光滑的纤维质感
  • reflective coatings in frosted black 磨砂黑的反光涂层
  • micro and nano materials 微纳米材料
  • artificial leather 人造皮革
  • Sandy texture 沙质
  • Ceramic texture 陶瓷质感

图片
🎨 「灯光」

  • Top light 顶光
  • Raking light 侧光
  • Rim light 轮廓光
  • Edge light 边缘光
  • Volumetric light 立体光
  • Back light 逆光
  • Hard light 硬光
  • Soft light 柔光
  • Cold light 冷光
  • Warm light 暖光
  • Reflection effect 反射
  • Stark shadows 明暗分明
  • Split Lighting 分体照明
  • Mapping light 映射光
  • Volumetric lighting 层次光
  • Bright highlights 明亮高光
  • Backlighting 背光照明
  • Global illuminations 全局照明
  • Frontlighting 正面照明
  • Point light 点光源
  • Spotlight 聚光灯
  • Area light 区域灯光
  • Ambient light 环境光
  • Shadow light 阴影光
  • Ring light 环形灯
  • Texture light 纹理灯
  • Emissive material 自发光材质
  • Laser beam effect 激光束效果
  • Rainbow halo 彩虹光环
  • Glow in the dark 夜光效果
  • rays of shimmering light 微光
  • Iwinkling stars 耀星空
  • Morning light 晨光
  • Sunlight 太阳光
  • Color light 色光
  • Soft moon light 柔和月米
  • Natural light 自然光
  • Indoor lighting 室内照明
  • Outdoor lighting 室外照明
  • studio lighting 影棚光
  • cinematic dappled lighting 电影斑驳的灯光
  • Dramatic light 戏剧性的光
  • Neon light 霓虹灯光
  • Cyberpunk light 赛博朋克灯光
  • Dim light effect 暗光效果

图片
🖌「视图」

  • front 正视
  • bird 俯视
  • side 侧视
  • Bottom view 仰视
  • Full body 全身
  • Busts 半身像
  • Profile 侧面
  • headshot 特写
  • ultrawide shot 超广角
  • macro shot 微距
  • Wide view 宽景
  • Bird view 鸟瞰
  • Horizontal composition 横向构图
  • Center composition 中心构图
  • Focal point composition 焦点构图
  • S-shaped composition S形构图
  • Isolation composition 孤立构图
  • Radial composition 径向构图
  • Tunnel composition 隧道构图
  • Radial composition 放射构图
  • Repetition composition 重复构图
  • Contrast composition 对比构图
  • Overlapping composition 重叠构图
  • Juxtaposition composition 并列构图
  • Negative space composition 负空间构图
  • Collage composition 拼贴构图
  • Golden Ratio composition 黄金分割构图
  • Three-quarter view 四分之三侧视
  • Rule of thirds composition 三分法构图
  • Gisometric diorama 轴测图透视法
  • Symmetrical composition 对称构图
  • Asymmetrical composition 非对称构图
  • Diagonal composition 对角线构图
  • Converging lines composition 汇聚线条构图
  • Vanishing point composition 消失点构图

图片
艺术风格

  1. Art Deco 装饰派艺术
  2. Art Nouveau 新艺术风格
  3. Dadaism 达达主义
  4. Dutch Golden Age 荷兰黄金时代
  5. Expressionism 表现派
  6. Fauvism 野兽派
  7. Futurism 未来主义
  8. Baroque 巴洛克风格
  9. Contemporary 当代
  10. Cubism 立体派
  11. Impressionism 印象派
  12. Installation 现代雕塑
  13. Land Art 大地艺术
  14. Minimalism 极简主义
  15. Pointillism 点彩画法
  16. Pop Art 波普艺术
  17. Portraiture 肖像画
  18. Post-Impressionism 后期印象派
  19. Surrealism 超现实主义
  20. Ukiyo-e 浮世绘
  21. Watercolors 水彩画
  22. Charcoal 木炭画
  23. Pastels 蜡笔画
  24. Chalk 粉笔画
  25. Realism 现实主义
  26. Rococo 洛可可风格
  27. Romanticism 浪漫主义
  28. Still Life 静物画
  29. Graphite Pencils 铅笔画
  30. Colored Pencils 彩色铅笔画
  31. Collages 拼贴画
  32. Assemblage 集成艺术
  33. Chiaroscuro 明暗对比
  34. Foreshortening 前缩透视
  35. Gouache 水粉画
  36. Grisaille 纯灰色画
  37. Miniature Painting 微型画
  38. Mural 壁画
  39. Perspective 透视画
  40. Sand Painting 沙画
  41. Scroll Painting 卷轴画
  42. Sfumato 晕涂法
  43. Acrylic Painting 压克力胶彩绘画
  44. Aerial Perspective 透视构图
  45. Anamorphosis 失真图像
  46. Camaieu 单色配色
  47. Oil Painting 油画
  48. Panel Painting 镶板绘画
  49. Panorama 全景画
  50. Sgraffito 彩釉
  51. Found Objects 粘贴画
  52. Tromp L’Oeil 错视画

图片「艺术家」

  1. Studio Ghibli 吉卜力工作室
  2. Pablo Picasso 巴勃罗·毕加索
  3. Virgil Abloh 维吉尔·阿布洛
  4. Hayao Miyazaki 宫崎骏
  5. Hidetaka Miyazaki 宫崎英高
  6. Katsuhiro Otomo 大友克洋
  7. Katsuya Terada 寺田克也
  8. Dave Rapoza 戴夫·拉波扎
  9. Marko Djurdjevic 马尔科·久尔杰维奇
  10. Craig Mullins 克雷格·穆林斯
  11. Simon Bisley 西蒙·比斯利
  12. James Gurney 詹姆斯·格尼
  13. Peter Tarka 彼得·塔卡
  14. Victo Ngai 倪传婧
  15. Skycloud 天空之城
  16. Cool 清凉
  17. Gemi 戈末
  18. Xiaoqi 小柒
  19. Husky 哈士奇
  20. Billion Girls Dream 十亿少女的梦
  21. Nightsky 夜空
  22. Xiaotang 小棠
  23. Alphonse Mucha 阿尔方斯·穆夏
  24. Hiroshi Yoshida 吉田宏
  25. Max Ernst 马克斯·恩斯特
  26. Paul Signac 保罗·西尼亚克
  27. Salvador Dali 萨尔瓦多·达利
  28. Fli Fli 艾莉艾莉
  29. Little Trick 小妙招
  30. Anni Babe 安妮宝贝
  31. Windy Moon 风中月影
  32. Golden Bell 金铃铛
  33. M.C. Escher 埃舍尔
  34. Thomas Kinkade 托马斯·金凯德
  35. Ivan Aivazovsky 伊万·艾瓦佐夫斯基
  36. Italo Calvino 伊塔洛·卡尔维诺
  37. Donato Giancola 多纳托·詹科拉
  38. Michael Whelan 迈克尔·惠兰
  39. Frank Frazetta 弗兰克·弗雷泽塔
  40. Boris Vallejo 鲍里斯·瓦列霍
  41. Julie Bell 朱莉·贝尔
  42. Luis Royo 路易斯·罗约
  43. Ian McCaig 伊恩·麦凯格
  44. Joe Madureira 乔·马杜雷拉
  45. Norman Rockwell 诺曼·洛克威尔
  46. Albert Bierstadt 阿尔伯特·比尔施塔特
  47. Giorgio de Chirico 乔治·德·基里科
  48. Rene Magritte 雷内·马格利特
  49. Ross Tran 罗斯·特兰
  50. Marc Simonetti 马克·西蒙内蒂
  51. John Harris 约翰·哈里斯
  52. Hilma af Klint 希尔玛·克林特
  53. George Inness 乔治·因内斯
  54. William Blake 威廉·布莱克
  55. Rose Fairy 蔷薇仙子
  56. Aphrodite 阿芙罗狄蒂
  57. Red Medicine 红药
  58. RedPupil 赤瞳

画一画

猪八戒

一头黑猪,带着人体特征,尖牙,穿着中国古代衣服,愤怒眼神中有红色火焰,CG泼墨画风。

图片

哪吒:

青年哪吒,冷峻眼神,双髻发型,插画,红色和金色,火轮、天丝、龙元素,手臂着火,终极渲染,CG泼墨画风。

图片

git

安装及配置
下载地址: https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.3/Git-2.41.0.3-64-bit.exe

安装注意事项:

傻瓜式安装,一直下一步就好.

安装目录不要有中文.

尽量也不要有空格.

配置环境变量:

找到安装目录,将bin目录配置到path目录即可;

win + r, 输入cmd. 打开黑窗口. git \–-version,如果不报错,表示安装成功;

1.2 配置基本信息
配置你的用户名称和邮箱:

git config –global user.name “Your Name” #用户名

git config –global user.email “email@example.com” #邮箱

git config -l # 检查一下配置是否成功了.

1.3 初始化本地仓库
新建一个文件夹「目录」, 通过打开黑窗口

git init 初始化一个空的git仓库,操作后这个文件夹下会多一个隐藏的.git

1.4 向git仓库添加文件或者目录
git add 文件名称, 一般情况添加所有:

git add . // 为注意这个.g表示目录下的所有文件/目录

1.5 提交到本地仓库
git commit -m ‘提交日志‘

提交日志,之后咱们再说,这个提交日志非常的重要,它并不是随便写的.一般情况.公司都有要求.如果写这个提交日志.如果公司没有要求,各位自己参照一些好的写法.规范起来.

C:\Users\ldcig\Desktop\git study>git commit -m ‘第一次提交哦’ # 提交
hint: core.useBuiltinFSMonitor=true is deprecated;please set core.fsmonitor=true instead
hint: Disable this message with “git config advice.useCoreFSMonitorConfig false”
[master (root-commit) 74346b7] ‘第一次提交哦’ # 7434b… 表示生成了一个版本号.
4 files changed, 0 insertions(+), 0 deletions(-) # 提交文件的详细信息.
create mode 100644 hehe/222.txt
create mode 100644 hello.txt
create mode 100644 tom.txt
create mode 100644 “\344\270\215\350\246\201\347\235\241\350\247\211\345\225\246.txt”
git status

表示暂存区没有东西可以被提交了.

一般情况下,我们可以这样做:

初始化git仓库: git init

提交文件到暂存区: git add .

提交暂存区的文件到本地仓库: git commit – m ‘提交日志‘

查看当前仓库的状态: git status

查看日志: git log, 查看日志

远程仓库
github.com

gitlab

gitee.com , // 以它为例子,说说如何使用;

2.1 gitee使用
注册一个.

gitee.com

新建一个仓库, 用于关联我的本地仓库.

2.2 查看本地仓库是否已经关联了远程仓库
git remote -v # 查看本地仓库是否关联了远程仓库.
2.3 本地仓库关联远程库
git remote -v # 查看一下.
git remote add origin 远程仓库地址; # 将本地库和指定的远程关联起来
2.4 推送到已经关联的远程仓库上
把本地仓库的所有内容,推送到远程仓库上去;

git push origin master
注意事项:

你们第一次操作,肯定会让你填写用户名称和密码.「Gitee的用户名称和密码.」

如果出现了各种问题,百度一下.

一个本地仓库可以关联上多个远程仓库.

2.5 查看帮助手册
-h, 跟在咱们的命令后边,表示查看命令的帮助手册.

git remote -h # 查看remote命令如何使用.
2.6 分支操作
查看分支, 当前在哪个分支上操作呢:

git branch

创建分支

git branch 分支名称

切换分支

git checkout 分支名称

合并分支

git merge 分支名称

删除本地支

git branch -d 分支名称 # 删除已经合并的分支

git branch -D 分支名称 # 不管你合没合并,都能删除.

切换分支,如果发现切换的分支没有存在,则新建一个分支

git checkout -b 分支名称

删除远程分支

git push origin –delete 你要删除的分支名称

2.7 版本回退
git reset –hard HEAD~1, 表示回退一个版本号.

git reset –hard HEAD~3, 表示回退三个版本号.

图提示词

https://promlib.com文生图提示参数

Double Exposure用于将不同场景或主题融合在一起,增强视觉叙事的层次感和深度,原文示例:Double exposure, the silhouette of a woman, the silhouette of a man,Background is burning flame

治愈系风景短视频 卡通插画,线条插画,鲜艳配色,夕阳,落日,温暖,多层房屋,一楼有院子有泳池,小孩子在泳池玩耍,有大帐篷。景深,全景,有宽敞而温馨的起居区,角落里还有一棵小植物,装饰着郁郁葱葱的绿色植物和盆栽花卉,道路边扎兰花园,落日斜阳照在房子上,温馨舒适。 原文

x大神Amira的手绘设计海报风格,Prompt通用模版如下,大家可以微调:
A minimalist and creative advertisement set on a clean white background.A real [Real Object] is integrated into a hand-drawn black ink doodle, using loose, playful lines. The [Doodle Concept] interacts with the object in a clever, imaginative way. Include bold black [Ad Copy] text at the top or center. Place the [Brand Logo] clearly at the bottom. The visual should be clean, fun, high-contrast, and conceptually smart.
一个极简主义和创意的广告,背景是干净的白色。一个真实的[真实物体]被整合到一个手绘的黑色涂鸦中,使用松散、俏皮的线条。涂鸦概念以一种聪明、富有想象力的方式与物体互动。在顶部或中心包含粗体黑色[Ad Copy]文本。将[品牌标志]清楚地放在底部。视觉效果应该干净、有趣、对比度高,并且在概念上很聪明。

python 依赖注入_Dependency Injection-依赖注入详解

使用Dependency Injector可以将应用程序结构保存在一个地方。这个地方叫做集装箱。您可以使用容器来管理应用程序的所有组件。所有组件依赖关系都是显式定义的。这提供了对应用程序结构的控制。它很容易理解和改变。

容器就像应用程序的映射。你总是知道什么取决于什么


什么是依赖注入,有什么好处?
依赖注入是一种强大的设计模式,可以帮助使软件更加模块化、更灵活、更容易测试。这种设计思想可以实现低耦合,高内聚。

我的现在的理解就是你先写好一个函数结构,但参数什么的不写死在里面,而是通过依赖注入后面再传入进来(记时的理解,不一定对)

设计案例:
我们之前的写法:

import os
 
 
class ApiClient:
 
    def __init__(self) -> None:
        self.api_key = os.getenv("API_KEY")  # <-- dependency
        self.timeout = int(os.getenv("TIMEOUT"))  # <-- dependency
 
 
class Service:
 
    def __init__(self) -> None:
        self.api_client = ApiClient()  # <-- dependency
 
 
def main() -> None:
    service = Service()  # <-- dependency
    ...
 
 
if __name__ == "__main__":
    main()

依赖注入的写法:(通过函数传参方式)


import os
 
 
class ApiClient:
 
    def __init__(self, api_key: str, timeout: int) -> None:
        self.api_key = api_key  # <-- dependency is injected
        self.timeout = timeout  # <-- dependency is injected
 
 
class Service:
 
    def __init__(self, api_client: ApiClient) -> None:
        self.api_client = api_client  # <-- dependency is injected
 
 
def main(service: Service) -> None:  # <-- dependency is injected
    ...
 
 
if __name__ == "__main__":
    main(
        service=Service(
            api_client=ApiClient(
                api_key=os.getenv("API_KEY"),
                timeout=int(os.getenv("TIMEOUT")),
            ),
        ),
    )

但是这种方式实现的话,函数调用时需要创建很多对象,不便于管理和维护。

这个时候就需要依赖注入器(dependency_injector 框架)来帮助组建对象和函数。大概形式如下所示:

from dependency_injector import containers, providers
from dependency_injector.wiring import Provide, inject
 
class Container(containers.DeclarativeContainer):
 
    config = providers.Configuration()
 
    api_client = providers.Singleton(
        ApiClient,
        api_key=config.api_key,
        timeout=config.timeout,
    )
 
    service = providers.Factory(
        Service,
        api_client=api_client,
    )
 
 
@inject
def main(service: Service = Provide[Container.service]) -> None:
    print('main',service.api_client.api_key)
 
 
if __name__ == "__main__":
    container = Container()
    container.config.api_key.from_env("API_KEY", default='api_key', required=True)
    container.config.timeout.from_env("TIMEOUT", as_=int, default=5)
    container.wire(modules=[__name__])
 
    main()  # <-- dependency is injected automatically
 
    with container.api_client.override(mock.Mock()):
        main()  # <-- overridden dependency is injected automatically

这样实现有几个好处:

  1. 依赖自动组装和注入
  2. 可以通过container.api_client.override(mock.Mock()) 使用测试函数
  3. 可以方便配置多套不同的开发环境的依赖注入。
  4. 函数的结构更加显示,容易看出入参的结构。

dependency_injector框架主要构成
工具集 提供的方法/类 备注
Providers

Factory, Singleton, Callable, Coroutine, Object, List, Dict, Configuration, Resource, Dependency等方法

  1. 帮助组装对象;
  2. 方便Overriding覆盖

Overriding
container.api_client_factory.override
container.api_client_factory.reset_override
覆盖对象改变注入
Configuration 提供了从多种源读取配置:yaml、ini、json、env等
Resource 提供一种类似Singleton的资源加载方式,提供初始化,和卸载资源方法。
container 容器,里面定义了多个实例
Wiring 提供@inject装饰器,指示需要被装饰的函数



解密Tenacity:Python中最强大的重试库

在编写应用程序时,经常需要处理与外部服务通信或其他不稳定操作相关的问题。这些问题可能包括网络错误、服务不可用、超时等。在这些情况下,重试操作是一种常见的解决方案。Tenacity是Python中一个强大且灵活的重试库,它可以帮助你有效地处理这些问题。

这篇文章将介绍Tenacity重试库的使用,包括如何安装和配置Tenacity,以及如何在不同场景下使用它来处理重试操作。还有Tenacity的各种功能和选项,并提供丰富的示例代码来帮助你更好地理解如何应用它。

安装Tenacity

首先,安装Tenacity库。使用pip来安装Tenacity:

pip install tenacity

基本用法

Tenacity的基本思想是定义一个装饰器,该装饰器可以应用于函数或方法,以实现自动重试。

下面是一个简单的示例:

from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(3))
def do_something():
    print("Doing something...")
    raise Exception("Something went wrong!")

try:
    do_something()
except Exception as e:
    print(f"Exception: {e}")

在上面的示例中,使用@retry装饰器来修饰do_something函数。配置了重试策略,即在前三次尝试后停止重试(stop_after_attempt(3))。在do_something函数中,模拟了一个失败的操作,触发了异常。由于配置了重试,Tenacity将在异常发生时自动重试该函数,最多重试3次。

配置选项

Tenacity提供了许多配置选项,可以满足不同场景的需求。以下是一些常用的配置选项:

  • wait:定义重试之间的等待时间,可以是固定的时间间隔或根据指数递增的时间间隔。
  • stop:定义何时停止重试,可以根据尝试次数、总时间或其他条件停止。
  • retry:定义在哪些异常情况下执行重试,可以根据异常类型、自定义条件或自定义回调函数执行。
  • before_sleep:在每次重试之前执行的操作,可以用于执行清理或日志记录等任务。
  • reraise:是否重新引发异常,如果设置为True,则在达到最大重试次数后会引发原始异常。

示例代码

以下是更多示例代码,演示了Tenacity的不同用法:

自定义重试条件

from tenacity import retry, stop_after_attempt, retry_if_exception_type

@retry(
    stop=stop_after_attempt(5),
    retry=retry_if_exception_type(IOError)
)
def open_file(file_path):
    print(f"Opening file: {file_path}")
    raise IOError("File not found")

try:
    open_file("example.txt")
except IOError as e:
    print(f"Exception: {e}")

在上面的示例中,定义了自定义的重试条件,仅当捕获到IOError异常时才重试,最多重试5次。

配置等待时间

from tenacity import retry, wait_fixed

@retry(wait=wait_fixed(2))
def slow_function():
    print("Slow function running...")
    raise Exception("Something went wrong!")

try:
    slow_function()
except Exception as e:
    print(f"Exception: {e}")

这个示例中,配置了一个固定的等待时间为2秒,表示在每次重试之间等待2秒。

使用before_sleep回调

from tenacity import retry, wait_fixed, before_sleep_log

@retry(wait=wait_fixed(2), before_sleep=before_sleep_log(logger))
def some_operation():
    print("Doing some operation...")
    raise Exception("Failed!")

try:
    some_operation()
except Exception as e:
    print(f"Exception: {e}")

在这个示例中,使用了before_sleep回调函数,它会在每次重试之前执行,并通过日志记录等待时间。这有助于更好地理解Tenacity的工作方式。

高级用法

Tenacity提供了许多高级功能,增强了其灵活性和适用性。

下面简要介绍一些高级用法:

  1. Jitter配置:

Tenacity支持配置Jitter,这是一种随机性的等待时间,有助于避免所有重试操作同时进行。通过配置Jitter,可以使重试操作在一定的时间范围内随机分散执行,减轻了服务的负载。

from tenacity import retry, wait_random

@retry(wait=wait_random(min=1, max=5))
def operation_with_jitter():
    print("Operation with Jitter...")
    raise Exception("Failed!")

try:
    operation_with_jitter()
except Exception as e:
    print(f"Exception: {e}")
  1. 等待可重试条件:

可以定义自定义的可重试条件,以满足特定的应用场景。例如,可以在某个状态满足时才触发重试。

from tenacity import retry, retry_if_result, stop_after_attempt

def should_retry(result):
    return result is not None

@retry(retry=retry_if_result(should_retry), stop=stop_after_attempt(3))
def operation_with_custom_retry_condition():
    result = do_operation()
    return result

def do_operation():
    print("Doing operation...")
    return None

try:
    operation_with_custom_retry_condition()
except Exception as e:
    print(f"Exception: {e}")
  1. 自定义停止策略: Tenacity允许

自定义停止策略,以便在特定条件下停止重试。这可以是基于异常类型、尝试次数、总时间或其他条件。

from tenacity import retry, stop_after_delay, retry_if_exception

def custom_stop_predicate(retry_state):
    return retry_state.outcome.exception is not None

@retry(stop=stop_after_delay(10) | stop_after_attempt(5), retry=retry_if_exception())
def operation_with_custom_stop():
    print("Operation with Custom Stop...")
    raise Exception("Failed!")

try:
    operation_with_custom_stop()
except Exception as e:
    print(f"Exception: {e}")

总结

在开发Python应用程序时,处理不稳定的操作和错误是一个常见的挑战。Tenacity是一个强大的重试库,可以帮助你优雅地应对各种失败和异常情况。通过合理配置Tenacity的参数,可以实现灵活的重试策略,适应不同的应用场景。

这篇文章介绍了Tenacity的基本用法,包括如何装饰函数以启用重试、如何配置重试的等待策略、如何处理特定的异常类型等。还分享了Tenacity的高级功能,如Jitter配置、自定义可重试条件和停止策略,能够更好地适应复杂的应用需求。

无论是处理网络请求、文件操作还是其他可能出现错误的情况,Tenacity都可以帮助你提高应用程序的可靠性。它是一个非常有价值的工具,特别适用于需要处理不稳定操作的应用程序,如分布式系统、微服务和API调用。

通过掌握Tenacity,可以更好地保护你应用程序免受意外错误的影响,提供更好的用户体验。