Python的特有的参数传递(*和**)

python的传递方式具有两种值传递和引用传递。除此之外,python中还允许包裹方式的参数传递,这未不确定参数个数和参数类型的函数调用提供了基础:

值传递

  • int、float等值传递
    **特点,区别于C语言参数需要一一对应
    #eg1:
    def f(a,b,c):
        print(a,b,c)
        return
    f(1,2,3)
    f(b=1,a=2,c=3)
    
    上面代码的运行结果是:
    1 2 3
    2 1 3

引用传递

  • 以字典、列表等非值对象数据类型为代表
  • def f(*a,**b)
    *所对应的形参(如上面的a)会被解释为一个元组(tuple,而**所对应的形参(如上面的b)会被解释为一个字典。
    #eg2:
    def f(*a,**b):
        print(a)
        print(b)
    
    a=8
    b=4
    f(a,b,m=1,n=2)
    
    上面代码的运行结果是:
    (8 4)

可见,对于不使用关键字传递的变量,会被作为元组的一部分传递给*a,而使用关键字传递的变量作为字典的一部分传递给了**b。

python中规定非关键字传递的变量必须写在关键字传递变量的前面,所以混合使用*和**时肯定时*形参在**形参的前面,如def f(*a,**b);

posted @ 2019-09-26 15:42  燕山北  阅读(2886)  评论(0编辑  收藏  举报