06 python 函数中的参数

2018-07-02  本文已影响32人  小码码

1 参数的类型

def test(x,y):     //位置参数
    return x+y
def test(x=1,y=2):
    return x+y
def test(x,y=2):    //关键字参数必须在最右边,否则报错
    return x+y

def test(x=1,y):    //会报错  SyntaxError: non-default argument follows default argument
    return x+y
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
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

总结

some_func(fargs, *args, **kwargs)
上一篇 下一篇

猜你喜欢

热点阅读