Python 中函数的参数

函数的参数有 4 种,本文对这 4 种进行简要列举,方便回忆,详细请阅读后文中的参考链接。

位置参数

用法如下 :

1
2
def power(x):
return x * x

使用要点:

  1. 在调用时,必须按顺序给位置参数传递值

默认参数

用法如下:

1
2
3
4
5
6
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s

使用要点:

  1. 默认参数应在位置参数后面
  2. 在调用时,默认参数可以不传递值。没有值时取默认值
  3. 默认参数必须指向不变对象

在类的定义中,可以使用默认参数来实现函数的重载

可变参数

可变参数定义如下:

1
2
3
4
5
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

调用:

1
2
3
4
5
6
7
# 使用方式1
nums = [1, 2, 3]
calc(nums[0], nums[1], nums[2])

# 使用方式2
nums2 = (1,2,3) # 定义一个 tuple
cal(*nums2)

使用要点:

  1. 可变参数接收者是 tuple 类型

关键字参数

关键字参数允许传入任意个(包含 0 个)含参数名的参数,这些关键字参数在函数内部自动组装为一个 dict 类型。

非命名关键字参数

1
2
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)

命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数。

使用时,只能传入指定的关键字名,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。

1
2
def person(name, age, *, city, job=“dev”):
print(name, age, city, job)

使用要点:

  1. 使用时,只能传入指定的关键字名。
  2. 命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。
  3. 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
  4. 命名参数可以设置默认值
  5. 没有默认值的命名参数,必须要传入值

参数组合

当必选参数、默认参数、可变参数、关键字参数和命名关键字参数组合使用时,其定义顺序为:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

1
2
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

可以通过 tuple 和 dic 调用上述函数:

1
2
3
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1(*args, **kw)

注意前面的 *

所以:对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

致谢

本文参考以下文章,在此报以诚挚谢意!

  1. 函数的参数-廖雪峰的官方网站