关于python函数传参
必须参数
最常见的传参
def say(arg):
print(arg)
say("Hello world")
输出:
Hello world
默认参数
def say(arg, arg2="world"):
print(arg + arg2)
say("Hello")
输出:
Helloworld
默认参数的要求:
1.默认参数在函数定义的时候传入默认值
2.默认参数要在必须参数后面,不能默认参数在必须参数之前
我们一般调用函数的时候一般就是采用,必须参数正常传递,然后默认参数采用关键字传参的办法例如:
requests.get(url,allow_redirects=False)
这个例子是requests
禁止重定向需要传递的一个参数
因为默认参数一般都是特别多,而且不需要每次调用的时候都自己传递,只有遇到特殊需求的时候进行更改
关于*args和*kwargs的使用方法
例子:
def test(a,*args,**kwargs):
print(a,args,kwargs)
test(1,2,3,4,c=5,d=6)
输出:
1 (2, 3, 4) {'c': 5, 'd': 6}
我相信很多文章都说了,形参的顺序不能变化,必须是 test(a,*args,**kwargs)
这样一个顺序
形参a是必须参数,必须参数必须有相应的实参对应,其余的赋给 *args
并形成一个元祖 ,剩余采用关键字传参的都付给 **kwargs
并形成一个字典
说几个其余文章没有提到的:
-
*args, **kwargs不是固定的变量名,哪怕形参叫
fuck
也是可以运行的,带几个*
才是区分这几个参数的关键 -
这三种类型的参数只有必须参数必须传递,其余的参数都可以不传递
例如:不传递 *argsdef test(a,*args,**kwargs): print(a,args,kwargs) test(1,c=5,d=6)
输出:
1 () {'c': 5, 'd': 6}
不传递 **kwargs参数
def test(a,*args,**kwargs): print(a,args,kwargs) test(1,2,3,4)
输出:
1 (2, 3, 4) {}
-
这几种类型的参数不只是在函数定义中可以使用,函数调用的时候也可以使用
def a(b,c): print(b,c) dict_ = dict( b = 1, c=2 ) a(**dict_)
输出:
1 2
不过需要注意,字典的键必须对应形参的名字
def a(b,c): print(b,c) tuple_ = (1,2) a(*tuple_)
输出:
1 2
其实归根结底这些都是拆包
本文来自博客园,作者:Hello_wshuo,转载请注明原文链接:https://www.cnblogs.com/Hellowshuo/p/15622216.html