0%

Python参数使用总结

Python 中参数的传递非常灵活,不太容易记住理解,特整理如下备忘:

普通参数

即按照函数所需的参数,对应位置传递对应的值,可以对应 Java 中的普通参数

1
2
3
4
5
6
7
def max(a, b):
if a > b:
return a
else:
return b

max(5, 13) # = 13

默认参数

可以对位置参数中的某个参数设置默认值,设置了默认值的参数在调用时可以不传递

此时需要注意,默认参数只能在必选参数后面

1
2
3
4
5
6
7
8
9
def max(a, b=0):
if a > b:
return a
else:
return b

max(5, 13) # = 13
max(5) # = 5
max(-6) # = 0

当有多个默认参数时,调用参数传递的值会按照顺序赋值,也可以通过指定参数值为特定参数赋值

1
2
3
4
5
6
def position(x, y=1, z=0):
print('x:', x, 'y:', y, 'z:', z)

position(5) # x=5, y=1, z=0
position(5, 6) # x=5, y=6, z=0
position(5, z=6) # x=5, y=1, z=6

可变参数

即传递的参数个数不确定,可以对应为 Java 中的可变参数,类似传递了一个 list 或 tuple

可变参数只能出现在必选参数和默认参数后面

1
2
3
4
5
6
7
8
9
10
11
def max(*numbers):
# 此处可以有更简单的写法
sum = 0
for number in numbers:
sum += number
return sum

print(max(1,2,3,4,5)) # = 15
# 对于 list 或 tuple, 如 nums = [1,2,3,4,5], 可以这样使用
nums = [1,2,3,4,5]
print(max(*nums)) # = 15

关键字参数

关键字参数必须出现在必选参数、默认参数、可变参数、命名关键字参数后面

在可变参数的基础上,即不仅仅可以传递任意个参数,同时还可以对传递的各个参数指定参数名,可以理解为传递了一个 dict

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def person(name, **kw):
print('name:', name)
for k, v in kw.items():
print(k, v)

person('zhang', age=15, sex='M')
# name: zhang
# age 15
# sex M

# 对于 dict, 如 p={'age': 15, 'sex':'M'}, 可以这样使用
p={'age': 15, 'sex':'M'}
person('zhang', **p)
# name: zhang
# age 15
# sex M

总结一下

  • 普通参数——必选参数
  • 默认参数——参数有默认值,调用函数时可以传递也可以不传递,如果不传递则使用默认值
  • 可变参数——传递数量不确定 (可以为0个) 的参数,类似传递一个 list
  • 关键字参数——传递数量不确定 (可以为0) 的 键值对,类似传递一个 dict

在函数中出现的顺序必须和上面的保持一致