1.函数参数相关
1.1.位置参数
1.1.位置参数
位置参数是指在调用函数时,按照形参的位置依次传递参数,数量和顺序必须与函数定义时的参数列表保持一致。下面是一个例子:
def func(a, b, c):
pass
func(1, 2, 3)
在这个例子中,1会传递给a, 2会传递给b, 3会传递给c。
1.2.关键字参数
关键字参数是指在调用函数时,指定参数名和对应的参数值,不需要按照参数的顺序传递。下面是一个例子:
def func(a, b, c):
pass
func(c=3, b=2, a=1)
在这个例子中,3会传递给c, 2会传递给b, 1会传递给a。关键字参数可以提高代码的可读性。
1.3.默认参数
默认参数是指在函数定义时,为参数设置默认值。如果调用函数时没有传递对应的参数值,则会使用默认值。下面是一个例子:
def func(a, b=2, c=3):
pass
func(1)
在这个例子中,由于只传递了一个参数,函数会使用默认值2和3来初始化b和c。
1.4.可变参数
可变参数指的是参数数量不定的情况,可以使用星号 * 来定义可变参数。下面是一个例子:
def func(*args):
pass
func(1, 2, 3)
在这个例子中,args会被初始化成一个元组(1, 2, 3)。
1.5.关键字可变参数
关键字可变参数指的是关键字参数数量不定的情况,可以使用两个星号 ** 来定义关键字可变参数。下面是一个例子:
def func(**kwargs):
pass
func(a=1, b=2, c=3)
在这个例子中,kwargs会被初始化成一个字典{'a': 1, 'b': 2, 'c': 3}。
2.星号用法
2.1.可变参数和关键字参数的传递
星号 * 可以用于函数调用时,将序列或字典展开为可变参数或关键字可变参数。下面是一个例子:
def func(a, b, c):
pass
args = [1, 2, 3]
func(*args)
kwargs = {'a': 1, 'b': 2, 'c': 3}
func(**kwargs)
在这个例子中,args会被展开成可变参数,kwargs会被展开成关键字可变参数。
2.2.解包元组或列表
星号 * 可以用于解包元组或列表。下面是一个例子:
a, *b, c = [1, 2, 3, 4, 5]
print(a) # 1
print(b) # [2, 3, 4]
print(c) # 5
在这个例子中,b的部分使用星号 * 来解包为一个list,这在循环中非常有用。
2.3.忽略元素
星号 * 可以用于忽略元素。下面是一个例子:
a, *_, c = [1, 2, 3, 4, 5]
print(a) # 1
print(c) # 5
在这个例子中,星号 _ 用于忽略列表中的元素。
3.斜杠用法
3.1.强制关键字参数
在Python 3中,可以使用斜杠 / 来标记位置参数结束,强制后续参数使用关键字传递。下面是一个例子:
def func(a, b, /, c, d):
pass
func(1, 2, c=3, d=4)
在这个例子中,/用于标记b为位置参数,c和d必须使用关键字参数传递。
3.2.函数注解
斜杠 / 也可以用于函数注解,在函数定义时表示位置参数的结束。下面是一个例子:
def func(a:int, b:int, /, c:float, d:float) -> int:
pass
在这个例子中,/用于标记b为位置参数,a和b使用注解:int,c和d使用注解:float,函数返回值使用注解:int。