验证python - yield 作用的复杂程序

本文探讨了Python中yield关键字的使用,通过杨辉三角的生成实例,详细解析了yield如何在函数间传递值,以及如何利用yield节省内存。文章还提供了完整的代码示例。

 程序主要是用来测试python - yield 的。yield的作用是在主函数中产生一个数传入子函数,然后从子函数返回一个值到主函数,之后如果从主函数中再用 next(g) 或者g.send(str) 进到子函数 g中,那么子函数从上次yield 跳出子函数的地方的下一行开始执行。其他的原理没什么特别需要注意的。

至于说yield是如何节省内存的,python 初级使用者可以忽略。

#encoding:UTF-8

# ****************************************************
# **    程序来自  https://www.noniu.com/jiaocheng/219.html
# ****************************************************
def pas_triangles():
    a = [1]
    while True:     # 当main 函数中的for 语句判断为False 时,循环结束
        yield a
        a = [sum(i) for i in zip([0] + a, a + [0])]

        # print([0] + a, a + [0])
        # 第一次zip之前是 [0, 1] [1, 0]  zip之后是 [(0, 1), (1, 0)]
        # zip([0] + a, a + [0])
        # 前面的 [0] + a 是为了向list a 前面插入一个 0
        # 后面的 a + [0] 是为了把两个数加起来用的
        # 这样方便计算杨辉三角
        # zip([0] + a, a + [0]) 的结果是始终是2个tuple,所以这里的for循环不用写出它的大小,系统能自动判断




if __name__ == "__main__":  # 该判断语句为真的时候,说明当前运行的脚本为主程序,而非主程序所引用的一个模块
    g = pas_triangles()
    for n in range(10):
        # fill 和 align 大概是为了打印时对齐用的,暂时不用管
        print("{0:{fill}{align}40}".format(str(next(g)), fill=" ", align="^"))
        # print(str(next(g)))
<think>嗯,用户想了解Python中'->'的用法。首先,我得回忆一下自己学过的Python语法知识。记得在函数定义的时候,有时候会看到参数后面跟着一个箭头和类型,比如def func(a: int) -> bool:。这里的'->'应该是用来指定函数的返回类型吧。不过具体细节可能需要注意,比如这是Python 3.5之后引入的类型注解功能,属于PEP 484的一部分。 接下来,用户可能想知道这个语法的具体含义和使用场景。需要解释类型注解的作用,比如提高代码可读性,方便静态类型检查工具如mypy进行类型检查。同时,要说明这并不会影响程序的运行时行为,Python仍然是动态类型语言,注解只是元数据而已。 可能还需要举一些例子,比如如何为参数和返回值添加类型注解,以及更复杂的类型,如列表、字典或者自定义类。比如def greet(name: str) -> str:这样的例子,或者使用Union、Optional等类型。此外,提到第三方库如typing模块的支持可能会有帮助。 用户可能还会混淆'->'和其他语言中的箭头函数,比如JavaScript中的箭头函数,需要指出两者的不同,避免误解。此外,使用场景方面,可以提到在大型项目中类型注解有助于团队协作,IDE的自动补全和类型检查功能也依赖这些注解。 另外,需要确认是否有相关的引用资料支持这些信息。比如引用[1]提到None的用法,但类型注解可能不在其中。不过引用[2]提到Python的版本和应用场景,可能可以联系到Python3.x的新特性。不过用户的问题可能更多依赖于外部知识,但需要结合现有的引用内容。 可能还需要生成相关问题,比如类型注解的其他用法,或者与静态类型检查工具的结合使用。确保问题与用户的问题相关,并且能引导进一步学习。 总结一下,回答的结构应该是先解释'->'的语法含义,然后说明使用场景,举例说明,注意事项,以及和相关工具的结合。同时要避免错误,比如不混淆类型注解和实际类型强制,明确其作为注解的性质。</think>### Python中'->'语法含义及使用场景分步说明 #### 一、基本语法定义 Python中的`->`符号是**类型注解(Type Hint)**语法组成部分,用于在函数定义中标注返回值类型。语法格式为: ```python def 函数名(参数列表) -> 返回类型: # 函数体 ``` #### 二、核心功能解析 1. **类型声明作用** - 显式声明函数预期返回的数据类型,例如: ```python def add(a: int, b: int) -> int: return a + b ``` [^2] - 支持嵌套类型注解: ```python from typing import List def process_data(data: List[dict]) -> List[float]: return [x["value"]*0.8 for x in data] ``` 2. **运行时特性** - 类型注解不会影响实际执行逻辑 - 即使返回类型与标注不符,也不会抛出异常: ```python def wrong_type() -> str: return 42 # 实际运行时有效 ``` #### 三、主要应用场景 1. **代码可维护性增强** - 在大型项目中明确接口契约 - 示例: ```python class User: def __init__(self, uid: int, name: str) -> None: self.uid = uid self.name = name def get_profile(self) -> dict: return {"id": self.uid, "name": self.name} ``` 2. **静态类型检查支持** - 配合mypy等工具进行类型验证: ```python # 会触发mypy错误提示 def calculate(a: int) -> str: return a * 2 # 返回int但标注为str ``` 3. **IDE智能提示优化** - 提升开发工具自动补全准确性 - 示例: ```python from typing import Generator def fibonacci(n: int) -> Generator[int, None, None]: a, b = 0, 1 for _ in range(n): yield a a, b = b, a + b ``` #### 四、高级用法示例 1. **联合类型标注** ```python from typing import Union def parse_input(value: str) -> Union[int, float, None]: try: return int(value) except ValueError: try: return float(value) except ValueError: return None ``` 2. **回调函数类型标注** ```python from typing import Callable def data_filter( data: list, condition: Callable[[dict], bool] ) -> list: return [x for x in data if condition(x)] ``` #### 五、注意事项 1. **版本兼容性** - 仅支持Python 3.5+版本 - 旧版本需使用注释方式实现类似功能 2. **动态类型保留** ```python def dynamic_example() -> str: return 42 # 合法但类型检查工具会警告 ``` 3. **第三方库集成** - 使用`typing`模块扩展类型系统: ```python from typing import Optional def find_user(uid: int) -> Optional[dict]: # 可能返回dict或None ``` [^2]: 该语法属于Python3.x版本特性,与Python2.x不兼容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值