1 参数的类型
- 1.1位置参数
def test(x,y): //位置参数
return x+y
- 1.2关键字参数
def test(x=1,y=2):
return x+y
- 1.3位置参数和关键字参数混用
def test(x,y=2): //关键字参数必须在最右边,否则报错
return x+y
def test(x=1,y): //会报错 SyntaxError: non-default argument follows default argument
return x+y
- 1.4不定长参数之args
其实并不是必须写成args,只有变量前面的 才是必须的.写成var也可以. 而写成*args 只是一个通俗的命名约定。
(1)举例
def test(x,*args):
print(x)
print(args)
test(2,3,4,5,6) // 输出为:2 (3, 4, 5, 6)
test(1, {'name':'alex'}) // 输出为:1 ({'name': 'alex'},)
test(1,['x','y','z']) //输出位:1 (['x', 'y', 'z'],)
test(1,*['x','y','z']) //输出位:1 ('x', 'y', 'z')
test(1 *{'name':'alex'}) //报错 TypeError: unsupported operand type(s) for *: 'int' and 'dict' 因为args对应的为list类型
(2) *args 的使用场景
当一个函数在使用时不知道会传递多少个参数时,可以用 *args 来发送一个非键值对的可变数量的参数列表给一个函数.
例如:
# 定义函数
def test_var_args(f_arg, *argv):
print("first normal arg:", f_arg)
for arg in argv:
print("another arg through *argv:", arg)
# 调用函数
test_var_args('yasoob', 'python')
test_var_args('yasoob', 'python', 'eggs')
test_var_args('yasoob', 'python', 'eggs', 'test')
除了第一个参数是必传的以外,后面传1个、2个、3个参数都可以,argv类似于一个list,里面存了不确定个数的参数。
(3) 使用 *args 来调用函数示例
# 定义函数
def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
#使用`*args`方式传参
>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5
- 1.5不定长参数之kwargs
其实并不是必须写成kwargs,只有变量前面的 才是必须的.写成vars也可以. 而写成*kwargs只是一个通俗的命名约定。
(1)举例
def test(x,**kwargs):
print(x)
print(kwargs)
test(1,y=2,z=3) //输出为1 {'z': 3, 'y': 2}
test(1,2,y=2,z=3) //报错 TypeError: test() takes 1 positional argument but 2 were given
(2)**kwargs的使用场景
kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用kwargs。
例如:
def greet_me(**kwargs):
for key, value in kwargs.items():
print("{0} == {1}".format(key, value))
>>> greet_me(name="yasoob")
name == yasoob
kwargs类似于一个字典类型的数据。
(3) 使用 **kwargs 来调用函数示例
#使用`**kwargs`方式参数
>>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
>>> test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3
总结
- 位置参数必须一一对应,缺一行多一行都不行
- 关键字参数,无需一一对应,但缺一行多一行都不行
- 位置参数必须在关键字参数左边,否则报错
- 标准参数与args、*kwargs在使用时的顺序:
如果函数里同时使用三种参数, 顺序是:
some_func(fargs, *args, **kwargs)
网友评论