• 理解Python中的*,*args


    1、*在函数调用中的作用

    首先定义一个函数,并调用

    def fun(a, b, c):
        print a, b, c
    fun(1,2,3)

    则该函数的输出为

    1 2 3

    传递3个参数调用该函数,则该函数会打印出这三个参数

    接下来,创建一个3个元素的列表,并使用*进行调用

    l = [1,2,3]
    fun(*l)

    则输出同样为

    1 2 3

    在这里*号的作用是,将l中的的值进行了unpack,并作为相应位置的参数传递进fun函数中。

    如果使用如下代码:

    l=[3,5,6,9]
    fun(*l)

    则会因为函数数量问题产生错误:

    TypeError                                 Traceback (most recent call last)
    
    xxxx in <module>()
    
    TypeError: fun() takes exactly 3 arguments (4 given)

    2、*args在函数调用中的作用

    现在改变函数的定义,并进行调用

    def fun(*args):
        print args
    fun(1)

    则输出为

    (1,)

    或者使用任意多个参数进行调用,例如

    fun(1,2,3)

    这样的话,输出就是(1, 2, 3)

    *args在函数定义中的作用是

    接收所有形参后面的定位参数(positional arguments),并存储至一个元组中。所以args将会是一个元组。

    如果将*args与形参进行混合,例如

    def fun(a, *args):
        print "a is ", a
        print "args is ", args
    fun(1, 2, 3, 4)

    则调用后的输出为

    a is  1
    args is  (2, 3, 4)

    我们可以看到,a被第一个位置的参数赋值为1,args接收了包含所有其他参数的tuple。

  • 相关阅读:
    linux下vim的安装及其设置细节
    vm虚拟机下ubuntu连接上ssr
    文件写入-结构体排序
    利用链表进行报数游戏
    链表——尾插法
    C#设计模式总结
    C#设计模式(20)——策略者模式(Stragety Pattern)
    Autofac在项目中应用的体会,一个接口多个实现的情况
    C#设计模式(1)——单例模式
    jquery.js与sea.js综合使用
  • 原文地址:https://www.cnblogs.com/ruizhang3/p/6755129.html
Copyright © 2020-2023  润新知