在编程中,默认参数的引入使得函数调用更为灵活,不仅允许开发者在特定情况下省略某些非必需参数,同时也强调了对参数与实际传递值(即论点)之间区别的理解,这对于掌握函数工作机制至关重要。
此外,根据需要选择位置参数或是关键字参数进行传递,以及利用 *args 和 **kwargs 来处理不确定数量的参数,都极大地增强了函数的通用性和代码的简洁性,使得编程实践既高效又优雅。
1) 默认参数
def hello(name, greeting="Hi"):
print(greeting, name)
hello("韩梅梅")
# Hi 韩梅梅
hello("韩梅梅", greeting = "你好")
# 你好 韩梅梅
在 hello("韩梅梅")中,我们没有在greeting中传递任何信息。这意味着它默认为 "hi"
在hello("韩梅梅", greeting = "你好")中,我们将 "hello "传入了 greeting。也就是说,我们覆盖了默认参数,并指定 greeting = '你好'
如果函数中有大量参数,而我们又不希望每次调用函数时都要输入每个参数,那么这种方法就非常有用。
2)形参和实参
在我学习 Python 的最初一年,我以为它们的意思是一样的。
但也不尽然。有一点区别。
比方说,我们有一个简单的函数,它接收 (a, b) 并返回它们的平均值。
def add(a, b):
return a+b
形参是我们定义函数时写在括号内的变量。这里,a 和 b 就是形参。
def add(a, b):
return a+b
x = add(3,4)
print(x) # 7
实参是我们在调用函数时实际传递给函数的值。在这里,当我们调用 add(a, b) 函数时,3 和 4就是参数。
3) 位置参数和关键字参数
举一个简单的函数为例。
def test(a,b):
print(f'{a=} {b=}')
让我们通过传递一些位置参数来调用这个函数。
def test(a,b):
print(f'{a=} {b=}')
test(4,3) # a=4,b=3
这里,4 和 7 是位置参数。位置参数需要按顺序排列 ,将4 传递到 a,而 7 传递到 b。
接下来,让我们通过传递一些关键字参数来调用我们的函数。
def test(a,b):
print(f'{a=} {b=}')
test(b=10,a=20) # a=20,b=10
这里,b=5 和 a=8 是关键字参数。关键字参数不需要按顺序排列,但我们必须使用 key=value 格式传递它们。
4) 任意位置参数 (*args)
函数中的任意位置参数(也称为 *args)允许函数接受任意数量的位置参数。
def test(*args):
print(args)
test() # ()
test(1) # (1,)
test(1,10) # (1,10)
args是约定俗成的写法,其实你也可以写成 *a 或 *aa
在这里,test 函数接收 *args , 这使得 test 可以接收任意数量的位置参数,所有这些参数都将包含在一个名为 args 的元组中。
我们也可以将其与普通参数相结合(*参数必须在后面)
def test(a,b, *args):
print([a,b],args)
test() # 错误
test(1) # 错误
test(1,10) # [1,10] ()
test(1,10,20) # [1,10] (20)
test(1,10,20,30) # [1,10] (20,30)
再次补充说明:我们不必将其命名为 *args。只要在前面加上 "*",我们可以给它起任何名字(甚至是中文)。
5)任意关键字参数(**kwargs)
任意关键字参数(也称为 **kwargs)允许我们的函数接收任意数量的关键字参数。
def test(**kargs):
print(kargs)
test() # {}
test(a = 1) # {"a":1}
test(b = 1,a = 10) # {'b': 1, 'a': 10}
在这里,test 函数使用了 **kwargs, 它允许 test 使用任意数量的关键字参数,这些参数将被记录在名为 kwargs 的字典中。
我们还可以将其与普通参数相结合(**kwargs 也必须在后面)
def test(a,b,**kargs):
print(kargs)
test() # 错误
test(a = 1) # 错误
test(b = 1,a = 10) # {}
test(b = 1,a = 10, c=20) # {"c":20}
6) 使用 * 和 ** 将 列表或字典传递给函数
下面是一个简单的函数,它只需打印出参数。
def test(a,b):
print(f'{a=} {b=}')
我们可以不按常规方法调用这个函数,即 test(1,2):
使用 * 传递包含位置参数的列表
def test(a,b):
print(f'{a=} {b=}')
nums= [10,20]
test(*nums) # a = 10, b =20
在这里,nums 前面的 * 将其内容作为位置参数解包到函数调用中。这与 test(100, 200) 相同。
使用 ** 传递包含关键字参数的字典
def test(a,b):
print(f'{a=} {b=}')
nums= {"a":10,"b":20}
test(**nums) # a = 10, b =20
在这里,nums前面的 ** 将其键值对作为关键字参数解包到函数调用中。这与 hi(a=10, b=20) 相同
python81
python · 目录
上一篇shp文件转换为CAD文件 (第三版) 这个软件的界面颜值挺高的