Python: Syntax

Python: Syntax
ExisfarPython: Syntax
Python 函数参数 *
和 **
核心总结
📌 核心作用:处理可变数量的参数,提升函数灵活性。
*args
→ 收位置参数为元组,用于不确定数量的输入。**kwargs
→ 收关键字参数为字典,用于带名称的动态参数。- 顺序规则:固定参数 →
*args
→**kwargs
。 - 解包:
*
展开序列,**
展开字典。
✨ 应用场景:
• 动态计算(如 sum(*values)
)。
• 配置传递(如 build_model(**config)
)。
• 装饰器、继承等高级用法。
Python Magic Methods (魔法方法)
重写(override)这些带有一对双下划线(如 __iter__
、__getitem__
、__setitem__
、__len__
等)的方法有以下几个主要作用:
1. 让自定义类支持 Python 内置语法和操作
这些方法被称为“魔法方法”或“特殊方法”,它们让你的类像内置类型(如 list、dict)一样使用。例如:
__iter__
让对象可以被for ... in ...
遍历。__getitem__
让对象支持obj[key]
取值。__setitem__
让对象支持obj[key] = value
赋值。__len__
让对象支持len(obj)
。__add__
、__mul__
等让对象支持加法、乘法等运算。
2. 提升易用性和兼容性
比如 nn.Sequential
重写了 __iter__
,你就可以直接 for module in seq:
遍历所有子模块;重写了 __getitem__
,你可以用 seq[0]
取第一个子模块。这让 PyTorch 的容器类用起来和 Python 的 list、dict 非常像,极大提升了易用性。
3. 实现自定义行为
你可以根据自己的需求,定制这些操作的具体行为。例如,nn.Sequential
的 __getitem__
支持切片,返回一个新的 Sequential
,这在普通的 list 上也常见。
4. 与 Python 生态无缝集成
重写这些方法后,你的类可以和 Python 的很多标准库、工具、语法无缝协作,比如解包、遍历、序列化等。
总结:
重写双下划线方法,就是让你的类像内置类型一样自然、强大、易用。这是 Python 面向对象编程的核心特性之一。
Global Variables (全局变量)
- 只读全局变量时不用
global
。 - 需要在函数内部赋值全局变量时用
global
。 - 需要在嵌套函数里赋值外层变量时用
nonlocal
。
操作类型 | 是否需要声明 | 关键字 |
---|---|---|
读取全局变量 | 否 | - |
对全局变量重新赋值 | 是 | global |
修改可变对象的内部元素 | 否 | - |
嵌套函数中修改外层变量 | 是 | nonlocal |
1. global
- 用于函数内部,声明某个变量是全局变量(即模块级变量)。
- 你可以在函数内部对这个全局变量重新赋值,而不是创建一个新的局部变量。
示例:
x = 1 |
2. nonlocal
- 用于嵌套函数,声明变量来自最近的外层非全局作用域。
- 你可以在内层函数中修改外层函数的变量。
示例:
def outer(): |
Comment
匿名评论隐私政策