参数类型与默认值
对函数而言, 其参数能够拥有不一样的类型, 而且能够去设置默认值。知晓参数类型以及默认值的运用, 能够使你编写出更为灵活且安全的函数。
参数类型
这属于一种动态类型语言, 这表明你并不需要去显式地对变量的类型予以声明。函数的参数同样能够是任何一种类型, 比如包含基本数据类型、会有容器类型、存在函数、还有类等等。
类型注解
3 引入了一种功能, 这种功能为类型注解(Type), 它允许你针对函数参数指定类型, 同时还允许你针对函数返回值指定类型, 而这会对提高代码的可读性产生帮助, 另外也会对提高代码的可维护性产生帮助。
def add(a: int, b: int) -> int:
return a + b
在代码之中, 里边儿的 a 以及 b 被注释成为 int 类型, 而 -> int 意味着这个函数的返回值类, 型乃是 int。
类型检查与静态分析
类型注解自身不会去强制实施类型检查, 它依旧属于动态语言。要是你打算开展类型检查, 能够运用像mypy这般的工具来实施静态类型分析。
bash
$ pip install mypy
$ mypy your_script.py
默认参数值
于函数定义之际, 可为参数设定默认值, 若于调用函数之时, 未给出该参数之值, 那么便采用默认值,默认值的参数务必置于不具默认值的参数之后。
def greet(name: str = "Guest"):
print(f"Hello, {name}!")
greet() # Hello, Guest!
greet("Alice") # Hello, Alice!

使用默认参数的注意事项
当你针对参数去设置默认值之际, 务必要小心翼翼, 尤其是这些默认值归属常量或者可变对象(像列表或者字典)之时, 毕竟于函数调用的时候, 其相关修改极有可能对后续的调用造成影响。
def add_item(item, list_items=[]):
list_items.append(item)
return list_items
print(add_item(1)) # [1]
print(add_item(2)) # [1, 2]
上述当中有着一个可变类型的默认值, 每次在调用的时候, 要是没有将的给传入进去, 那么它会去使用这同一个列表对象, 进而致使后续的调用会去共享这同一个列表, 为了能够避免出现这个问题, 应当要使用None作为默认值, 并且在函数的体内去初始化一个全新的列表。
def add_item(item, list_items=None):
if list_items is None:
list_items = []
list_items.append(item)
return list_items
可变参数与默认值
能够变化的参数 *args 以及 ** , 同样是能够跟默认值一块去运用的, 进而对函数的灵活程度予以更进一步的强化。
def greet(message="Hello", *names):
for name in names:
print(f"{message}, {name}!")
greet("Hi", "Alice", "Bob") # Hi, Alice! Hi, Bob!
greet("Welcome", "Tom") # Welcome, Tom!
在上述所举的例子里头, 存在着默认值“Hello”, 并且, *names乃是一个可变类型的参数, 其作用在于去接纳数量不确定的名字。
总结
懂得掌握参数类型, 明白默认值的运用, 能够对你编写代码有所帮助, 让代码更具可读性, 有着可维护性, 且显得健壮性。

231

被折叠的 条评论
为什么被折叠?



