<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>雯拢科技</title><link>https://ctpds.com/</link><description></description><item><title>Sketch94功能解析：组件支持自定义文字属性了，文字组件库无需设置</title><link>https://ctpds.com/post/8667.html</link><description>&lt;h1&gt;Sketch94功能解析：组件支持自定义文字属性了，文字组件库无需设置&lt;/h1&gt;

&lt;p&gt;新的sketch94对于擅长使用组件标准化设计的设计师和团队意义重大。让我来说一下这次究竟更新了什么，为什么你需要更新到最新的sketch94。&lt;/p&gt;

&lt;p&gt;Sketch相比figma一直有一个比较坑的点，就是你如果做整个产品的文字规范，你需要做文字每个状态，比如各个加粗状态、颜色、对齐方式。&lt;/p&gt;

&lt;p&gt;现在你只需要设置组件库文字规范中的文字大小即可。&lt;/p&gt;

&lt;h2&gt;旧版组件库&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126639916.webp&quot; alt=&quot;文本规范&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;令人窒息的字符文本规范：&lt;/p&gt;

&lt;p&gt;终于sketch愿意去解决这个问题了。&lt;/p&gt;

&lt;h2&gt;新版组件&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126640288.webp&quot; alt=&quot;新版组件&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;你现在可以使用command键直接选中组件里面的元了。选中文本元素可以覆盖掉组件原本的加粗方式、对齐方式、颜色信息。&lt;/p&gt;

&lt;p&gt;以后做组件库就不需要每个文字的不同样式都做一遍，只需要完成字体尺寸的设置即可。大大减少了组件的构建人力成本和使用组件耗费的成本。&lt;/p&gt;

&lt;p&gt;可以说这个早该完成的功能拖到现在终于可以支持了。&lt;/p&gt;

&lt;h2&gt;新的组件颜色覆盖层&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126640628.webp&quot; alt=&quot;覆盖层&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;你在sketch94后选择组件的实例时可以自定义颜色了。比如你选择了一个实例，可以在右侧的检查器中找到覆盖层。可以轻易修改颜色，覆盖掉组件的原本颜色。&lt;/p&gt;

&lt;h2&gt;线条终于支持旋转了&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126641131.webp&quot; alt=&quot;隐藏嵌套组件&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;天呐，sketch终于发现了这个问题，现在你在使用line画线条的时候，两个端点终于不再只能调节线段长度，可以调节旋转了。&lt;/p&gt;

&lt;p&gt;测试了一下只支持中心旋转，但也比没有强。&lt;/p&gt;

&lt;h2&gt;更快的组件文本编辑&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126641980.webp&quot; alt=&quot;想要复制这个圆，我需要解绑组件才可以&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;之前我们都是通过双击组件，不断的双击点进文本中去修改；或者是按command键选中文本再双击。&lt;/p&gt;

&lt;p&gt;现在你可以按T键后左键单击组件中的文本进行编辑了。&lt;/p&gt;

&lt;p&gt;效率大幅提升。&lt;/p&gt;

&lt;h2&gt;快速隐藏组件嵌套&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126642377.webp&quot; alt=&quot;输入完毕之后可以直接关闭窗口，不需要回车，更改会被上传&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;在旧版本我们隐藏嵌套的组件通常使用检查器来隐藏组件，就像这样：&lt;/p&gt;

&lt;p&gt;现在我们可以直接command选中嵌套组件后直接退格键隐藏了！&lt;/p&gt;

&lt;p&gt;这对做的标准化很好的组件库来说意义重大。&lt;/p&gt;

&lt;h2&gt;快速复制组件内的元&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126642705.webp&quot; alt=&quot;command选中圆形图层效果&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;在旧版本我们想要复制组件内的元素通常需要进入到组件库中复制。但是我们有新的属性覆盖掉组件后，想要复制其中的元素只能解绑所有组件，然后复制他们。&lt;/p&gt;

&lt;p&gt;现在你可以直接command选中元素，command+c复制，然后粘贴在任意位置。&lt;/p&gt;

&lt;p&gt;复制的元素是覆盖组件后的元素。这意味着我想复制中间那个圆，只需要选中它复制即可。&lt;/p&gt;

&lt;h2&gt;无需回车确定你的颜色输入&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126643307.webp&quot; alt=&quot;command+control选中圆形图层效果&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;史诗级提升。经常我复制一个色值粘贴进去之后，点击鼠标在其他地方结果颜色就还原了。&lt;/p&gt;

&lt;p&gt;所以每次粘贴完都需要按一下回车才可以让颜色确定更改。&lt;/p&gt;

&lt;p&gt;现在你只要粘贴进去，它就已经完成了更改，你可以安心关闭弹窗，不需要按回车了。&lt;/p&gt;

&lt;h2&gt;control+command 选中图层&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ctpds.com/images/111086d2_1777126644593.webp&quot; alt=&quot;覆盖层定制&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot;&gt;&lt;/p&gt;

&lt;p&gt;我们习惯使用command来选中图层，但是想要选中最底层还需要不断的command+鼠标左键。现在control+command支持一键选到最底层。&lt;/p&gt;

&lt;h2&gt;组件可以设置是否支持覆盖&lt;/h2&gt;

&lt;p&gt;组件的创建者可以设置哪些可以改，哪些不能动。这对标准统一非常重要。&lt;/p&gt;

&lt;h2&gt;图层列表中的组件显示全部图层&lt;/h2&gt;

&lt;p&gt;之前只是显示被覆盖的层和部分图层，现在组件所有图层都显示出来了。比较类似一个组。&lt;/p&gt;

&lt;h2&gt;编辑组件并不是双击了&lt;/h2&gt;

&lt;p&gt;编辑组件现在不能通过双击组件进入原本的组件库，而是需要选中后按command+回车&lt;/p&gt;

&lt;h2&gt;总结&lt;/h2&gt;

&lt;p&gt;Sketch终于改掉它做的非常烂的组件工作流程了。改完之后sketch距离figma的组件仅仅只差十万八千里了。新的组件结构可以大量节省设计师时间，并且新的覆盖文字彻底解放了组件构建人员和组件使用人员的繁琐。（真的我每次选个文字样式都要骂sketch一遍）&lt;/p&gt;

&lt;p&gt;如果你是一个组件化设计的UI设计师，那么请务必升级此版本。&lt;/p&gt;

&lt;p&gt;注意：因为文档内核更新，新版本打开的文档不能在旧版本打开，会丢失数据。&lt;/p&gt;</description><pubDate>Mon, 04 May 2026 21:33:29 +0800</pubDate></item><item><title>Python装饰器完全指南：从基础语法到高级实战用法</title><link>https://ctpds.com/post/8656.html</link><description>&lt;h1&gt;Python装饰器完全指南：从基础语法到高级实战用法&lt;/h1&gt;

&lt;p&gt;装饰器（Decorator）是Python中最优雅、最强大的特性之一。它允许我们在不修改原函数代码的前提下，为函数添加额外的功能。从Web框架的路由注册，到权限校验、日志记录、性能监控，装饰器无处不在。本文将从零开始，带你系统掌握装饰器的每一个细节，并配有大量可运行的代码示例。&lt;/p&gt;

&lt;h2&gt;一、理解装饰器的本质&lt;/h2&gt;

&lt;p&gt;在Python中，函数是一等对象（First-class Object），这意味着函数可以赋值给变量、作为参数传递、作为返回值返回。装饰器正是利用了这一特性：它接收一个函数，返回一个增强了的新函数。&lt;/p&gt;

&lt;p&gt;理解装饰器的关键在于，&lt;code&gt;@decorator&lt;/code&gt;语法糖本质上只是一个函数调用的简写形式。下面两种写法完全等价：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# 写法一：使用 @ 语法糖
@my_decorator
def my_function():
    pass

# 写法二：手动调用装饰器
def my_function():
    pass
my_function = my_decorator(my_function)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;第二种写法清楚地展示了装饰器的工作原理：它把原始函数传给装饰器，然后用返回的新函数替换掉原来的函数名绑定。理解了这一点，后面所有复杂的装饰器变体都不会让你困惑。&lt;/p&gt;

&lt;h2&gt;二、最简单的装饰器&lt;/h2&gt;

&lt;p&gt;让我们从最基础的装饰器开始，逐步深入。一个简单的装饰器通常包含两层：外层函数接收被装饰的函数，内层wrapper函数执行增强逻辑。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def log_call(func):
    &quot;&quot;&quot;记录函数调用的简单装饰器&quot;&quot;&quot;
    def wrapper(*args, **kwargs):
        print(f&quot;[LOG] 正在调用函数: {func.__name__}&quot;)
        result = func(*args, **kwargs)
        print(f&quot;[LOG] 函数 {func.__name__} 执行完毕&quot;)
        return result
    return wrapper

@log_call
def calculate_sum(a, b):
    &quot;&quot;&quot;计算两个数的和&quot;&quot;&quot;
    return a + b

result = calculate_sum(10, 20)
print(f&quot;结果: {result}&quot;)

# 输出:
# [LOG] 正在调用函数: calculate_sum
# [LOG] 函数 calculate_sum 执行完毕
# 结果: 30
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;这里的&lt;code&gt;*args, **kwargs&lt;/code&gt;确保装饰器能接受任意参数，这是一个好习惯，让装饰器可以通用化。&lt;/p&gt;

&lt;h2&gt;三、带参数的装饰器&lt;/h2&gt;

&lt;p&gt;当你需要让装饰器本身也接受参数时（比如控制日志级别、重试次数等），就需要再增加一层嵌套，形成三层函数结构。这是装饰器最让人困惑的地方，但实际上逻辑非常清晰：最外层接收装饰器的参数，中间层接收被装饰的函数，最内层是实际的wrapper。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import time

def retry(max_attempts=3, delay=1.0, exceptions=(Exception,)):
    &quot;&quot;&quot;
    重试装饰器 - 函数执行失败时自动重试
    
    参数:
        max_attempts: 最大重试次数（默认3次）
        delay: 每次重试之间的等待时间（秒）
        exceptions: 需要捕获的异常类型元组
    &quot;&quot;&quot;
    def decorator(func):
        def wrapper(*args, **kwargs):
            last_exception = None
            for attempt in range(1, max_attempts + 1):
                try:
                    return func(*args, **kwargs)
                except exceptions as e:
                    last_exception = e
                    if attempt &amp;lt; max_attempts:
                        print(f&quot;[重试] {func.__name__} 第{attempt}次失败&quot;)
                        time.sleep(delay)
                    else:
                        print(f&quot;[失败] {func.__name__} 已重试{max_attempts}次&quot;)
            raise last_exception
        return wrapper
    return decorator

# 使用示例：网络请求自动重试
@retry(max_attempts=5, delay=2.0, exceptions=(ConnectionError, TimeoutError))
def fetch_data(url):
    &quot;&quot;&quot;模拟网络请求&quot;&quot;&quot;
    import random
    if random.random() &amp;lt; 0.7:
        raise ConnectionError(f&quot;无法连接到 {url}&quot;)
    return f&quot;来自 {url} 的数据&quot;

data = fetch_data(&quot;https://api.example.com/data&quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;带参数的装饰器在Flask中广泛使用，比如&lt;code&gt;@app.route('/path', methods=['GET'])&lt;/code&gt;，其中的path和methods就是装饰器的参数。&lt;/p&gt;

&lt;h2&gt;四、functools.wraps：保留函数元信息&lt;/h2&gt;

&lt;p&gt;使用装饰器后，被装饰函数的&lt;code&gt;__name__&lt;/code&gt;、&lt;code&gt;__doc__&lt;/code&gt;、&lt;code&gt;__module__&lt;/code&gt;等元信息都会变成wrapper函数的信息。这在调试、生成文档时会造成困扰。&lt;code&gt;functools.wraps&lt;/code&gt;装饰器可以解决这个问题，它会将被装饰函数的元信息复制到wrapper上。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps

def log_call(func):
    @wraps(func)  # 关键：保留原函数的元信息
    def wrapper(*args, **kwargs):
        &quot;&quot;&quot;这是wrapper的文档字符串&quot;&quot;&quot;
        print(f&quot;[LOG] 调用: {func.__name__}&quot;)
        return func(*args, **kwargs)
    return wrapper

@log_call
def process_data(data):
    &quot;&quot;&quot;处理数据的函数，接收一个列表参数&quot;&quot;&quot;
    return [x * 2 for x in data]

# 没有 @wraps 时，以下值都是 wrapper 的
print(process_data.__name__)  # process_data（而非 wrapper）
print(process_data.__doc__)   # 处理数据的函数，接收一个列表参数
print(process_data.__module__)  # __main__
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;在实际项目中，&lt;strong&gt;永远&lt;/strong&gt;使用&lt;code&gt;@wraps(func)&lt;/code&gt;装饰wrapper函数。这不仅是一个好习惯，更是团队协作中的基本要求——否则你的同事在调试时会非常痛苦。&lt;/p&gt;

&lt;h2&gt;五、类装饰器&lt;/h2&gt;

&lt;p&gt;除了函数形式的装饰器，Python还支持使用类来实现装饰器。类装饰器通过实现&lt;code&gt;__call__&lt;/code&gt;方法让实例变为可调用对象。类装饰器的优势在于可以通过属性保存状态，适合需要维护内部状态的场景。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps

class CountCalls:
    &quot;&quot;&quot;统计函数被调用次数的类装饰器&quot;&quot;&quot;
    
    def __init__(self, func):
        self.func = func
        self.count = 0
        wraps(func)(self)  # 保留元信息
    
    def __call__(self, *args, **kwargs):
        self.count += 1
        print(f&quot;[统计] {self.func.__name__} 已被调用 {self.count} 次&quot;)
        return self.func(*args, **kwargs)
    
    def reset(self):
        &quot;&quot;&quot;重置计数器&quot;&quot;&quot;
        self.count = 0

@CountCalls
def say_hello(name):
    &quot;&quot;&quot;打招呼&quot;&quot;&quot;
    print(f&quot;Hello, {name}!&quot;)

say_hello(&quot;Alice&quot;)   # [统计] say_hello 已被调用 1 次
say_hello(&quot;Bob&quot;)     # [统计] say_hello 已被调用 2 次
say_hello(&quot;Charlie&quot;) # [统计] say_hello 已被调用 3 次

# 可以访问装饰器实例的属性
print(f&quot;总调用次数: {say_hello.count}&quot;)  # 3
say_hello.reset()  # 重置计数
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;六、多个装饰器的叠加顺序&lt;/h2&gt;

&lt;p&gt;在实际开发中，经常需要同时使用多个装饰器，比如同时需要日志记录和权限校验。理解装饰器的叠加顺序非常重要——装饰器的执行顺序是从下到上的（最靠近函数的先执行），但调用顺序是从上到下的。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps

def decorator_a(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print(&quot;A: 函数执行前&quot;)
        result = func(*args, **kwargs)
        print(&quot;A: 函数执行后&quot;)
        return result
    return wrapper

def decorator_b(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print(&quot;B: 函数执行前&quot;)
        result = func(*args, **kwargs)
        print(&quot;B: 函数执行后&quot;)
        return result
    return wrapper

# 等价于: my_func = decorator_a(decorator_b(my_func))
@decorator_a
@decorator_b
def my_func():
    print(&quot;执行 my_func&quot;)

my_func()

# 输出:
# A: 函数执行前
# B: 函数执行前
# 执行 my_func
# B: 函数执行后
# A: 函数执行后
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;可以把叠加的装饰器想象成洋葱：最外层的装饰器先包上去，调用时从外向内一层层剥开，返回时再从内向外一层层合上。记住一个原则：&lt;strong&gt;最靠近函数定义的装饰器最先被应用到函数上&lt;/strong&gt;。&lt;/p&gt;

&lt;h2&gt;七、装饰器实战：五大常用模式&lt;/h2&gt;

&lt;h3&gt;7.1 性能计时器&lt;/h3&gt;

&lt;p&gt;测量函数执行时间是性能优化的第一步。下面这个装饰器支持输出到日志或返回耗时数据。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import time
import logging
from functools import wraps

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def timer(log_result=False):
    &quot;&quot;&quot;计时装饰器
    
    参数:
        log_result: 如果为True，将耗时作为第二个返回值
    &quot;&quot;&quot;
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            start = time.perf_counter()
            result = func(*args, **kwargs)
            elapsed = time.perf_counter() - start
            
            logger.info(f&quot;{func.__name__} 耗时: {elapsed:.6f}秒&quot;)
            
            if log_result:
                return result, elapsed
            return result
        return wrapper
    return decorator

@timer(log_result=True)
def heavy_computation(n):
    &quot;&quot;&quot;计算1到n的平方和&quot;&quot;&quot;
    return sum(i * i for i in range(n))

result, elapsed = heavy_computation(1_000_000)
print(f&quot;平方和: {result}, 耗时: {elapsed:.4f}秒&quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;7.2 缓存装饰器（Memoization）&lt;/h3&gt;

&lt;p&gt;对于纯函数（相同输入始终产生相同输出），缓存可以大幅提升性能。Python标准库提供了&lt;code&gt;@functools.lru_cache&lt;/code&gt;，但了解其原理也很重要。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps

def memoize(func):
    &quot;&quot;&quot;手动实现的缓存装饰器&quot;&quot;&quot;
    cache = {}
    
    @wraps(func)
    def wrapper(*args):
        if args not in cache:
            cache[args] = func(*args)
            print(f&quot;[缓存未命中] {func.__name__}{args}，计算并缓存&quot;)
        else:
            print(f&quot;[缓存命中] {func.__name__}{args}，直接返回&quot;)
        return cache[args]
    
    wrapper.cache = cache  # 暴露缓存，方便调试
    wrapper.cache_clear = lambda: cache.clear()
    return wrapper

@memoize
def fibonacci(n):
    &quot;&quot;&quot;计算第n个斐波那契数&quot;&quot;&quot;
    if n &amp;lt; 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(10))  # 大部分调用都会命中缓存
print(f&quot;缓存大小: {len(fibonacci.cache)}&quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;7.3 权限校验装饰器&lt;/h3&gt;

&lt;p&gt;在Web开发中，权限校验是最常见的装饰器应用场景之一。下面模拟一个简单的用户权限系统。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps

class User:
    def __init__(self, name, role):
        self.name = name
        self.role = role

current_user = User(&quot;admin&quot;, &quot;admin&quot;)

def require_role(*roles):
    &quot;&quot;&quot;权限校验装饰器：只允许指定角色的用户访问&quot;&quot;&quot;
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            if current_user.role not in roles:
                raise PermissionError(
                    f&quot;用户 '{current_user.name}' 角色为 '{current_user.role}'，&quot;
                    f&quot;需要以下角色之一: {roles}&quot;
                )
            print(f&quot;[权限通过] {current_user.name} ({current_user.role})&quot;)
            return func(*args, **kwargs)
        return wrapper
    return decorator

@require_role(&quot;admin&quot;, &quot;superuser&quot;)
def delete_database():
    &quot;&quot;&quot;危险操作：删除数据库&quot;&quot;&quot;
    print(&quot;数据库已删除！&quot;)

@require_role(&quot;admin&quot;, &quot;editor&quot;, &quot;viewer&quot;)
def view_report():
    &quot;&quot;&quot;查看报告&quot;&quot;&quot;
    print(&quot;报告内容：一切正常&quot;)

delete_database()  # admin角色，通过
view_report()      # admin角色，通过

current_user = User(&quot;guest&quot;, &quot;viewer&quot;)
view_report()      # viewer角色，通过
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;7.4 单例模式装饰器&lt;/h3&gt;

&lt;p&gt;单例模式确保一个类只有一个实例。使用装饰器实现单例比修改类的&lt;code&gt;__new__&lt;/code&gt;方法更加优雅和通用。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps

def singleton(cls):
    &quot;&quot;&quot;单例装饰器：确保一个类只有一个实例&quot;&quot;&quot;
    instances = {}
    
    @wraps(cls)
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
            print(f&quot;[单例] 创建 {cls.__name__} 的新实例&quot;)
        else:
            print(f&quot;[单例] 返回 {cls.__name__} 的已有实例&quot;)
        return instances[cls]
    
    get_instance._instances = instances
    return get_instance

@singleton
class DatabaseConnection:
    &quot;&quot;&quot;数据库连接类&quot;&quot;&quot;
    def __init__(self, host=&quot;localhost&quot;, port=3306):
        self.host = host
        self.port = port
        print(f&quot;连接到数据库: {host}:{port}&quot;)
    
    def query(self, sql):
        return f&quot;执行查询: {sql}&quot;

db1 = DatabaseConnection(&quot;192.168.1.100&quot;, 3306)
db2 = DatabaseConnection(&quot;10.0.0.1&quot;, 5432)  # 不会创建新实例

print(db1 is db2)  # True
print(db1.host)    # 192.168.1.100（第一次的参数）
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;7.5 类型检查装饰器&lt;/h3&gt;

&lt;p&gt;Python是动态类型语言，但在关键接口处进行类型检查可以提高代码的健壮性。下面的装饰器在运行时验证函数参数和返回值的类型。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps

def typecheck(**expected_types):
    &quot;&quot;&quot;运行时类型检查装饰器
    
    用法: @typecheck(name=str, age=int)
    &quot;&quot;&quot;
    def decorator(func):
        @wraps(func)
        def wrapper(**kwargs):
            for param_name, expected_type in expected_types.items():
                if param_name in kwargs:
                    actual_value = kwargs[param_name]
                    if not isinstance(actual_value, expected_type):
                        raise TypeError(
                            f&quot;参数 '{param_name}' 期望类型 {expected_type.__name__}，&quot;
                            f&quot;实际类型 {type(actual_value).__name__}&quot;
                        )
            
            result = func(**kwargs)
            return result
        return wrapper
    return decorator

@typecheck(name=str, age=int)
def create_user(name, age):
    return {&quot;name&quot;: name, &quot;age&quot;: age}

user = create_user(name=&quot;Alice&quot;, age=30)  # 正常
print(user)
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;八、装饰器的常见陷阱与避坑指南&lt;/h2&gt;

&lt;h3&gt;陷阱1：忘记使用functools.wraps&lt;/h3&gt;

&lt;p&gt;前面已经讲过，这里再强调一次。不使用&lt;code&gt;@wraps(func)&lt;/code&gt;会导致函数的元信息丢失，影响调试、文档生成和序列化。&lt;/p&gt;

&lt;h3&gt;陷阱2：装饰器中的可变默认参数&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# 错误写法：所有调用共享同一个列表
def append_result(func, results=[]):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        results.append(result)  # 危险！所有调用共享同一个列表
        return result
    return wrapper

# 正确写法：使用闭包内的局部变量
def append_result_correct(func):
    results = []  # 每个被装饰的函数有独立的results列表
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        results.append(result)
        wrapper.all_results = results
        return result
    return wrapper
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;陷阱3：装饰器改变函数签名&lt;/h3&gt;

&lt;p&gt;即使使用了&lt;code&gt;@wraps&lt;/code&gt;，装饰器的wrapper函数的签名仍然是&lt;code&gt;(*args, **kwargs)&lt;/code&gt;，这会影响IDE的自动补全和类型检查工具。Python 3.3+提供了&lt;code&gt;functools.signature&lt;/code&gt;来手动修复，或者使用第三方库&lt;code&gt;wrapt&lt;/code&gt;来彻底解决。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import wraps
import inspect

def preserve_signature(func):
    &quot;&quot;&quot;保留原始函数签名的装饰器辅助&quot;&quot;&quot;
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    wrapper.__signature__ = inspect.signature(func)
    return wrapper
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;九、标准库中的装饰器&lt;/h2&gt;

&lt;p&gt;Python标准库中内置了多个实用的装饰器，了解它们可以避免重复造轮子：&lt;/p&gt;

&lt;p&gt;- &lt;code&gt;@functools.lru_cache(maxsize=128)&lt;/code&gt;：LRU缓存，线程安全，支持缓存统计&lt;/p&gt;
&lt;p&gt;- &lt;code&gt;@functools.total_ordering&lt;/code&gt;：只需定义&lt;code&gt;__eq__&lt;/code&gt;和一个比较方法，自动补全其他比较方法&lt;/p&gt;
&lt;p&gt;- &lt;code&gt;@property&lt;/code&gt;：将方法变为属性访问，支持getter/setter/deleter&lt;/p&gt;
&lt;p&gt;- &lt;code&gt;@classmethod&lt;/code&gt; / &lt;code&gt;@staticmethod&lt;/code&gt;：类方法和静态方法&lt;/p&gt;
&lt;p&gt;- &lt;code&gt;@dataclasses.dataclass&lt;/code&gt;：自动生成&lt;code&gt;__init__&lt;/code&gt;、&lt;code&gt;__repr__&lt;/code&gt;等方法&lt;/p&gt;
&lt;p&gt;- &lt;code&gt;@contextlib.contextmanager&lt;/code&gt;：用生成器简化上下文管理器的编写&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from functools import lru_cache

@lru_cache(maxsize=256)
def expensive_compute(n):
    &quot;&quot;&quot;带LRU缓存的计算函数&quot;&quot;&quot;
    print(f&quot;正在计算 {n}...&quot;)
    return n ** 3

print(expensive_compute(5))   # 计算并缓存
print(expensive_compute(5))   # 直接从缓存返回
print(expensive_compute.cache_info())  # 查看缓存统计
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;总结&lt;/h2&gt;

&lt;p&gt;装饰器是Python中强大而优雅的工具，掌握它需要理解三个核心概念：函数是一等对象、闭包的工作原理、以及&lt;code&gt;@&lt;/code&gt;语法糖的本质。从最简单的日志记录到复杂的权限控制、缓存和重试机制，装饰器的应用场景无处不在。&lt;/p&gt;

&lt;p&gt;在实际开发中，请始终遵循以下最佳实践：&lt;/p&gt;

&lt;p&gt;1. 永远使用&lt;code&gt;@wraps(func)&lt;/code&gt;保留函数元信息&lt;/p&gt;
&lt;p&gt;2. 装饰器应保持单一职责，不要在一个装饰器中做太多事情&lt;/p&gt;
&lt;p&gt;3. 优先使用标准库提供的装饰器（&lt;code&gt;lru_cache&lt;/code&gt;、&lt;code&gt;property&lt;/code&gt;等），避免重复造轮子&lt;/p&gt;
&lt;p&gt;4. 为装饰器编写清晰的文档字符串，说明参数和用法&lt;/p&gt;
&lt;p&gt;5. 注意装饰器的叠加顺序，最靠近函数定义的最先被应用&lt;/p&gt;

&lt;p&gt;建议从最基础的装饰器开始练习，逐步过渡到带参数的装饰器和类装饰器，最终将这些技巧应用到实际项目中。当你能自如地编写装饰器时，你对Python函数式编程的理解也会上一个新的台阶。&lt;/p&gt;</description><pubDate>Thu, 30 Apr 2026 13:24:20 +0800</pubDate></item><item><title>Python装饰器完全指南：从基础语法到高级用法</title><link>https://ctpds.com/post/8655.html</link><description>&lt;h1&gt;Python装饰器完全指南&lt;/h1&gt;&lt;p&gt;装饰器是Python中最优雅的特性之一。&lt;/p&gt;&lt;h2&gt;一、什么是装饰器？&lt;/h2&gt;&lt;p&gt;装饰器本质上是一个函数，它接受一个函数作为参数，返回一个新的函数。&lt;/p&gt;&lt;h2&gt;总结&lt;/h2&gt;&lt;p&gt;装饰器是Python中强大而优雅的工具。&lt;/p&gt;</description><pubDate>Thu, 30 Apr 2026 13:14:52 +0800</pubDate></item><item><title>如何提取英雄联盟资源文件：获取lol客户端图片、技能图标、皮肤原画|雯拢科技</title><link>https://ctpds.com/post/8654.html</link><description>&lt;h1&gt;如何提取英雄联盟资源文件：获取lol客户端图片、技能图标、皮肤原画&lt;/h1&gt;

&lt;p&gt;英雄联盟的召唤师技能图标更新了，想要获取一下新的技能图标，抱着好奇和学习目的研究一下如何去获取联盟的资源文件。有大佬已经做好了工具，有这方面好奇的同学可以看看。&lt;/p&gt;

&lt;h2&gt;安装Obsidian&lt;/h2&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126626825.webp&quot; alt=&quot;github主页&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;下载Obsidian&lt;/p&gt;

&lt;p&gt;如果下载有困难，博主这里5.1.8版本上传到蓝奏云：使用蓝奏云下载&lt;/p&gt;

&lt;p&gt;第一次使用需要远程同步哈希表&lt;/p&gt;

&lt;p&gt;同步时间可能较长，如果过长可以尝试特殊的上网方法。&lt;/p&gt;

&lt;h2&gt;选择英雄联盟文件夹&lt;/h2&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126627190.webp&quot; alt=&quot;下载&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;第一次使用需要关联英雄联盟文件夹。&lt;/p&gt;

&lt;p&gt;点击文件夹图标选择lol的文件夹。\英雄联盟\Game\DATA\FINAL\&lt;/p&gt;

&lt;h2&gt;查找图像与音频资源&lt;/h2&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126627806.webp&quot; alt=&quot;同步表&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;例如我需要查找惩戒技能的图标。我可以搜索summoner_smite，然后点击展开全部即可。&lt;/p&gt;

&lt;p&gt;像是游戏语音等资源文件都可以在这里搜索，可以自行探索。&lt;/p&gt;

&lt;h2&gt;皮肤资源&lt;/h2&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126628239.webp&quot; alt=&quot;选择lol目录&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;可以参考A League of Legends Resource Guide&lt;/p&gt;

&lt;p&gt;这里提取的内容来自上文。&lt;/p&gt;

&lt;p&gt;如何将《英雄联盟》模型导入3D软件并进行处理&lt;/p&gt;

&lt;p&gt;最近我研究了一下如何将《英雄联盟》里的英雄模型导入到3D软件里，这里分享一下详细教程。主要是以阿狸为例，帮助大家从游戏数据中提取模型并进行处理。&lt;/p&gt;

&lt;h3&gt;第一步：打开游戏文件&lt;/h3&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126628697.webp&quot; alt=&quot;文件夹&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;打开文件管理器，导航到《英雄联盟》的安装文件夹。&lt;/p&gt;

&lt;p&gt;按照路径找到 wad.client 文件夹。注意：不要使用 en_US.wad.client 之类的文件，只选普通的 wad.client 文件。&lt;/p&gt;

&lt;p&gt;打开后，你会看到一长串的英雄数据文件列表。&lt;/p&gt;

&lt;h3&gt;第二步：选择皮肤并提取文件&lt;/h3&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126629096.webp&quot; alt=&quot;查找图标&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;找到你想要提取的皮肤数据文件。如果你要使用经典皮肤，可以在“base”文件夹中找到对应的数据。&lt;/p&gt;

&lt;p&gt;勾选目标皮肤文件旁的小框。&lt;/p&gt;

&lt;p&gt;点击菜单中的“文件 -&amp;gt; 提取已选择项（Extract Selected）”将文件导出到一个指定的文件夹。&lt;/p&gt;

&lt;p&gt;导出完成后，导航到该文件夹，会看到一些 .dds 纹理文件，以及 .skl 和 .skn 文件。&lt;/p&gt;

&lt;h3&gt;第三步：转换模型文件&lt;/h3&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126629512.webp&quot; alt=&quot;其他召唤师技能&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;为了将 .skn 文件转换成可以被3D软件识别的 .dae 文件，我们需要用到 Lol2dae 工具。&lt;/p&gt;

&lt;p&gt;转换后的 .dae 文件会存放在与原 .skn 文件相同的目录下。&lt;/p&gt;

&lt;h3&gt;第四步：导入模型与加载纹理&lt;/h3&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126630253.webp&quot; alt=&quot;Obsidian File Path&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;p&gt;导入 .dae 文件到你的3D软件中，比如 Cinema 4D。如果发现模型没有纹理，不要慌，我们需要手动加载。&lt;/p&gt;

&lt;p&gt;打开一个支持 .dds 文件的程序，加载不带 2x 或 4x 字样的主纹理文件（通常是 512x512 或 1024x1024）。以经典阿狸为例，纹理文件名为 ahri_base_tx_cm.dds。将 .dds 文件保存为 .png 格式，然后在3D软件中重新加载纹理。&lt;/p&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126630656.webp&quot; alt=&quot;Model Folder&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126631065.webp&quot; alt=&quot;lol2dae&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126631451.webp&quot; alt=&quot;C4D Screen&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;

&lt;img src=&quot;https://ctpds.com/images/09jgqsgw_1777126631843.webp&quot; alt=&quot;Ahri Texture&quot; style=&quot;max-width:100%;border-radius:8px;display:block;margin:16px auto;&quot; /&gt;</description><pubDate>Wed, 29 Apr 2026 19:22:58 +0800</pubDate></item><item><title>网文推荐:次元之大筒木辉夜 作者：大筒木辉夜 1-1934章 TXT下载</title><link>https://ctpds.com/post/8634.html</link><description>网文推荐:次元之大筒木辉夜 作者：大筒木辉夜 1-1934章 TXT下载&lt;br /&gt;
&lt;strong&gt;本文收集自网络，如有侵权请联系我们将尽快删除。
收集自：&lt;a href=&quot;https://www.53dushu.com/thread-32499-1-1.html&quot;&gt;https://www.53dushu.com/thread-32499-1-1.html&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.53dushu.com/thread-32499-1-1.html&quot;&gt;&lt;strong&gt;点此跳转下载&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tr&gt;&lt;td class=&quot;t_f&quot; id=&quot;postmessage_221553&quot;&gt;
次元之大筒木辉夜 作者：大筒木辉夜&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;　穿越成为终极的大BOSS大筒木辉夜，他心里是崩溃的。&lt;/div&gt;&lt;div&gt;　　为什么别人穿越成为了正义的伙伴，而他却穿越成了大反派啊！&lt;/div&gt;&lt;div&gt;　　这是闹哪样啊！&lt;/div&gt;&lt;/div&gt;
&lt;style&gt;
#copyright {
margin-top: 10px;
padding: 10px;
background: #E5EDF2;

border-radius: 5px;

}

#copyright .copyright-title {
padding: 5px;
text-align: center;
color : #333333;
}

#copyright .copyright-text {
font-size: 15px;
color: #666666;
}
&lt;/style&gt;
</description><pubDate>Sat, 11 Oct 2025 13:33:17 +0800</pubDate></item><item><title>网文推荐:综漫轮回：开局加载无限词条(1-169) 作者：随便冰淇淋 -  在线小说！</title><link>https://ctpds.com/post/8633.html</link><description>网文推荐:综漫轮回：开局加载无限词条(1-169) 作者：随便冰淇淋 -  阅读使人进步！&lt;br /&gt;
&lt;strong&gt;本文收集自网络，如有侵权请联系我们将尽快删除。
收集自：&lt;a href=&quot;https://www.53dushu.com/thread-506622-1-1.html&quot;&gt;https://www.53dushu.com/thread-506622-1-1.html&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.53dushu.com/thread-506622-1-1.html&quot;&gt;&lt;strong&gt;点此跳转下载&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tr&gt;&lt;td class=&quot;t_f&quot; id=&quot;postmessage_924640&quot;&gt;
穿越到了日常啥混合的综漫世界，林树本以为可以就此攻略二次元美少女，打下一个大大的水晶宫，却被死亡游戏突然选中......&lt;br /&gt;
&lt;br /&gt;
危急关头，他觉醒了无限词条升级，可以通过杀死敌人，掠夺它们身上的词条变强。&lt;br /&gt;
&lt;br /&gt;
从此，无数多元宇宙中，出现了一个掌控无数词条的最强君王！&lt;br /&gt;
&lt;br /&gt;
.......&lt;br /&gt;
&lt;br /&gt;
雪乃：为什么阳乃总是出现在你的房间？&lt;br /&gt;
&lt;br /&gt;
由比滨结衣：不对劲，妈妈回房的时间怎么越来越晚了？&lt;br /&gt;
&lt;br /&gt;
亚丝娜：我愿成为您唯一的剑！&lt;br /&gt;
&lt;br /&gt;
春日野穹：哥哥只能是穹的！&lt;br /&gt;
&lt;br /&gt;
加藤惠：才不是暗杀者！&lt;br /&gt;
&lt;br /&gt;
某卢小说网独家签约小说：《综漫轮回：开局加载无限词条》；&lt;br /&gt;
&lt;br /&gt;
本小说及人物纯属虚构，如有雷同，纯属巧合，切勿模仿。
&lt;style&gt;
#copyright {
margin-top: 10px;
padding: 10px;
background: #E5EDF2;

border-radius: 5px;

}

#copyright .copyright-title {
padding: 5px;
text-align: center;
color : #333333;
}

#copyright .copyright-text {
font-size: 15px;
color: #666666;
}
&lt;/style&gt;
</description><pubDate>Sat, 11 Oct 2025 13:33:15 +0800</pubDate></item><item><title>网文推荐:《娱乐封神榜》作者：威武武威  1-1070.txt -  在线小说！</title><link>https://ctpds.com/post/8632.html</link><description>网文推荐:《娱乐封神榜》作者：威武武威  1-1070.txt -  阅读使人进步！&lt;br /&gt;
&lt;strong&gt;本文收集自网络，如有侵权请联系我们将尽快删除。
收集自：&lt;a href=&quot;https://www.53dushu.com/thread-36677-1-1.html&quot;&gt;https://www.53dushu.com/thread-36677-1-1.html&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.53dushu.com/thread-36677-1-1.html&quot;&gt;&lt;strong&gt;点此跳转下载&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tr&gt;&lt;td class=&quot;t_f&quot; id=&quot;postmessage_230938&quot;&gt;
&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;font face=&quot;宋体&quot;&gt;娱乐封神榜&lt;/font&gt;&lt;font face=&quot;宋体&quot;&gt;-威武武威◎作品&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;font face=&quot;宋体&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;&lt;i&gt;节选：&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;　　&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;font face=&quot;宋体&quot; style=&quot;font-family: 宋体; font-size: 10.5pt;&quot;&gt;　&lt;/font&gt;&lt;font face=&quot;宋体&quot; style=&quot;font-family: 宋体; font-size: 10.5pt;&quot;&gt;------&lt;/font&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;font face=&quot;宋体&quot;&gt;　　&lt;/font&gt;&lt;font face=&quot;宋体&quot;&gt;“谢谢你，伍德先生，没有你的帮助，我很难在这次白银风波里获利。”签署好自己的文件后，李旭站起来对办公桌后面的中年男人伸出手。&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;font face=&quot;宋体&quot;&gt;　　&lt;/font&gt;&lt;font face=&quot;宋体&quot;&gt;“我的荣幸，小李先生，”中年男人跟着站起来，“我得说，真是非常精彩的一战，在未来的几个月甚至几年里，无论是华尔街的交易员们，还是银行的高管们，都会对此津津乐道。”&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;font face=&quot;宋体&quot;&gt;　　&lt;/font&gt;&lt;font face=&quot;宋体&quot;&gt;“那可不是我想要的。”李旭半开玩笑的说了句，和对方握手后随即离开了办公室。&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;　　他一路来到洗手间，方便之后对着镜子整理了下衣服，看着里面那混血得很明显的脸庞，轻轻的笑了声。&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;font face=&quot;宋体&quot;&gt;　　话虽那么说，想不被关注都不可能，他现在看上去&lt;/font&gt;&lt;font face=&quot;宋体&quot;&gt;20来岁的样子，实际上还有2个月才满18岁。还未成年就在市场上靠做空赚了5000万美元，就算许多投行的知名人物，都没有这个成绩，这可是1980年的5000万呢。&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;　　然后，李旭瞟了一眼旁边盒子的里的香皂，那玩意儿当即凭空飞了起来，在空中划出一个弧线，再落了回去。&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;　　跟着，他再轻轻一挥手，一朵晶莹剔透的水晶玫瑰就出现在了手中，又迅速化为灰烬。&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;font face=&quot;宋体&quot;&gt;　　&lt;/font&gt;&lt;font face=&quot;宋体&quot;&gt;“不行啊，还差得远。”他叹着气的说道。&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoPlainText&quot;&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;　　谁能想到，一颗天外流星砸死了自己，不仅让自己重生了，还获得了一颗残缺的神格。&lt;/span&gt;&lt;span style=&quot;mso-spacerun:'yes';font-family:宋体;mso-hansi-font-family:'Courier New';
mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;style&gt;
#copyright {
margin-top: 10px;
padding: 10px;
background: #E5EDF2;

border-radius: 5px;

}

#copyright .copyright-title {
padding: 5px;
text-align: center;
color : #333333;
}

#copyright .copyright-text {
font-size: 15px;
color: #666666;
}
&lt;/style&gt;
</description><pubDate>Sat, 11 Oct 2025 13:33:12 +0800</pubDate></item><item><title>网文推荐:《东京情报系统，开局截胡校花》 作者：小鱼钓猫（1-494） TXT下载</title><link>https://ctpds.com/post/8631.html</link><description>网文推荐:《东京情报系统，开局截胡校花》 作者：小鱼钓猫（1-494） TXT下载&lt;br /&gt;
&lt;strong&gt;本文收集自网络，如有侵权请联系我们将尽快删除。
收集自：&lt;a href=&quot;https://www.53dushu.com/thread-506664-1-1.html&quot;&gt;https://www.53dushu.com/thread-506664-1-1.html&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.53dushu.com/thread-506664-1-1.html&quot;&gt;&lt;strong&gt;点此跳转下载&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tr&gt;&lt;td class=&quot;t_f&quot; id=&quot;postmessage_924725&quot;&gt;
同学的女友被我站起来蹬
被大家看不起的死宅上杉健一，忽然觉醒了情报系统，每天可以收到3份情报！
邻居太太竟然不穿内衣去倒垃圾？
股票将会在一小时内狂飙500%？
瞧不起自己的优等生的女友，竟然要去做交际？！
&lt;style&gt;
#copyright {
margin-top: 10px;
padding: 10px;
background: #E5EDF2;

border-radius: 5px;

}

#copyright .copyright-title {
padding: 5px;
text-align: center;
color : #333333;
}

#copyright .copyright-text {
font-size: 15px;
color: #666666;
}
&lt;/style&gt;
</description><pubDate>Sat, 11 Oct 2025 13:33:10 +0800</pubDate></item><item><title>网文推荐:《娱乐：挪用热芭小金库，一路狂飙》作者：青城第一仙[1-209章] -  在线小说！</title><link>https://ctpds.com/post/8630.html</link><description>网文推荐:《娱乐：挪用热芭小金库，一路狂飙》作者：青城第一仙[1-209章] -  阅读使人进步！&lt;br /&gt;
&lt;strong&gt;本文收集自网络，如有侵权请联系我们将尽快删除。
收集自：&lt;a href=&quot;https://www.53dushu.com/thread-518857-1-1.html&quot;&gt;https://www.53dushu.com/thread-518857-1-1.html&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.53dushu.com/thread-518857-1-1.html&quot;&gt;&lt;strong&gt;点此跳转下载&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tr&gt;&lt;td class=&quot;t_f&quot; id=&quot;postmessage_941072&quot;&gt;
“明星是高收入职业，但不稳定，所以借我两百万开公司吧！”&lt;br /&gt;
过气明星叶湘伦穿越平行世界，却不想再简简单单做个演员。&lt;br /&gt;
挪用热芭小金库，开公司征战商海，打造属于自己的商业帝国。&lt;br /&gt;
多年后，网友调侃：演员里面最会投资的，投资人里面长得最帅的，不在娱乐圈却永远不过气。&lt;br /&gt;
哪怕怼天怼地的王施聪，也忍不住称赞：伦哥是我见过最有商业头脑的艺人。&lt;br /&gt;
记者采访迪莉热芭：如果有土豪说只要你陪他吃顿饭，就给你一百万，你会怎么做？&lt;br /&gt;
热芭霸气回应：给他两百万，然后让他滚蛋！&lt;br /&gt;
叶湘伦在一旁补充：这钱我出，税后！&lt;br /&gt;
杨蜜感慨：他多会花钱啊，只要他投资的项目，就没见亏过钱。&lt;br /&gt;

&lt;style&gt;
#copyright {
margin-top: 10px;
padding: 10px;
background: #E5EDF2;

border-radius: 5px;

}

#copyright .copyright-title {
padding: 5px;
text-align: center;
color : #333333;
}

#copyright .copyright-text {
font-size: 15px;
color: #666666;
}
&lt;/style&gt;
</description><pubDate>Sat, 11 Oct 2025 13:33:06 +0800</pubDate></item><item><title>网文推荐:失明人士的孤独摇滚  1-239.txt  作者：鲨鱼黄瓜 -  在线小说！</title><link>https://ctpds.com/post/8629.html</link><description>网文推荐:失明人士的孤独摇滚  1-239.txt  作者：鲨鱼黄瓜 -  阅读使人进步！&lt;br /&gt;
&lt;strong&gt;本文收集自网络，如有侵权请联系我们将尽快删除。
收集自：&lt;a href=&quot;https://www.53dushu.com/thread-519508-1-1.html&quot;&gt;https://www.53dushu.com/thread-519508-1-1.html&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.53dushu.com/thread-519508-1-1.html&quot;&gt;&lt;strong&gt;点此跳转下载&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tr&gt;&lt;td class=&quot;t_f&quot; id=&quot;postmessage_941888&quot;&gt;
&lt;br /&gt;
内容简介：猫屋敷晴，性别男，年龄17，辍学玩乐队，是瞎子，酒喝一点点，但是绝不抽烟，喜欢画画，虽然压根画不好…&lt;br /&gt;
时隔多年归来下北泽，却已经彻底失去视力。&lt;br /&gt;
幸好遇到神奇的粉色软体生物带路才没有在阴险的楼梯前丧命。&lt;br /&gt;
自此，在名为【繁星】的livehouse里成为staff的生活开始了。&lt;br /&gt;
…&lt;br /&gt;
……&lt;br /&gt;
………&lt;br /&gt;
睡觉的时候…总感觉有人在耳边说着什么奇怪的话。&lt;br /&gt;
黄色的：已经不用再努力了哦，小猫，我永远在你身边哦。&lt;br /&gt;
蓝色的：一直做朋友吧，我的生活似乎离不开你了。&lt;br /&gt;
红色的：我会把前辈从前辈那里抢过来的，请再等一会吧。&lt;br /&gt;
粉色的：谢谢您…谢谢您愿意看着我，我会用一辈子报答您的…但是如果您不接受我就去$^^??$+》（意义不明的声音）&lt;br /&gt;
【我的结局…到底会是什么样呢…】&lt;br /&gt;
察觉到自己的家中似乎不止自己一个的猫屋敷晴忍不住想道。
&lt;style&gt;
#copyright {
margin-top: 10px;
padding: 10px;
background: #E5EDF2;

border-radius: 5px;

}

#copyright .copyright-title {
padding: 5px;
text-align: center;
color : #333333;
}

#copyright .copyright-text {
font-size: 15px;
color: #666666;
}
&lt;/style&gt;
</description><pubDate>Sat, 11 Oct 2025 13:33:03 +0800</pubDate></item></channel></rss>