关于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并形成一个字典

说几个其余文章没有提到的:

  1. *args, **kwargs不是固定的变量名,哪怕形参叫 fuck 也是可以运行的,带几个*才是区分这几个参数的关键

  2. 这三种类型的参数只有必须参数必须传递,其余的参数都可以不传递
    例如:不传递 *args

    def 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) {}
    
  3. 这几种类型的参数不只是在函数定义中可以使用,函数调用的时候也可以使用

    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
    

其实归根结底这些都是拆包

posted @ 2019-10-07 15:15  Hello_wshuo  阅读(28)  评论(0编辑  收藏  举报