美文网首页
python函数传参用法

python函数传参用法

作者: Subtle_emo | 来源:发表于2020-02-29 17:35 被阅读0次

先把测试代码贴上,以后再整理解释

def f1(a, b, c=1, d='abc'):
    print('a={}'.format(a))
    print('b={}'.format(b))
    print('c={}'.format(c))
    print('d={}'.format(d))


def f2(a=[]):  # 该定义不正确,默认参数指定的值必须是一个不可变类型,此处可以用 a = None
    a.append(1)
    return a


def f3(a, b, c=1, d='abc', *args, **kwargs):
    print('a={}'.format(a))
    print('b={}'.format(b))
    print('c={}'.format(c))
    print('d={}'.format(d))
    print(args)
    print(kwargs)


if __name__ == "__main__":
    # f1(1, 2)
    # f1(1, 2, 3, 4)
    # f1(1, 2, d='345')
    # f1(1, 2, d='212', c=3)    #以上调用均正确

    print(f2())  # [1]
    print(f2())  # [1][1]
    print(f2())  # [1][1][1]
    # 默认参数设置为一个可变类型会输出以上结果
    # 解释:原因是当执行这个模块时,函数只会被加载一次,
    #      并且它的默认参数也会被设置在这个函数对象的defaults属性中(可以用 print(f2.__defaults__)查看)
    #      当我们三次调用该函数都没有传递参数时,a.append(1)
    #      就会在同一个列表对象上进行操作,于是就得到这样一个结果。

    f3(1, 2, 3, 4, 5, 6, 7, abc='222', bcd=234)  # 正确调用
    f3(1, 2, c=1, d='123')  # 正确调用
    # f3(1, 2, c=1, d='123',2,4,5)                 # 错误调用(python没有把后面的2,4,5当成你要传到args中的值,而是把他们当成了与之前1,2
    #                                                  相同的位置参数)
    f3(1, 2, 3, 4, 5, 6, 7, abc=345, you=23)  # 正确调用,1,2,3,4依次赋值给abcd,args接受了后面的 567,kwargs接受了abc和you

    li = [11, 22, 33, 44]
    di = {'one': 1, 'two': 2, 'three': 3}
    f3(1, 2, 3, 4, 5, 6, 7, 8, *li, abc=123, **di)  # 正确的解包调用,5678与拆包后的li一起被args接收,
    #            abc与拆包后的di一起被kwargs接收

# 总结:python函数传递有两个注意点:
#    1、定义函数时,如果使用默认参数,不能给其赋予默认值为可变类型,如果要传入可变类型使用*args和**kwargs,或者默认值指定为None
#    2、调用函数时,如果被调用函数是各种混合参数,传入的参数要注意顺序,即便是前面有默认值参数,也不能在前面指定参数赋值,
#                                           在后面才能指定参数赋值

相关文章

  • 2018-12-25 call,apply,bind

    *this的改变 1 call的用法之一不传参函数 2 apply的用法之一不传参函数 3 call的用法之二传参...

  • python函数传参用法

    先把测试代码贴上,以后再整理解释

  • python函数

    python函数 什么是函数 函数语法 调用函数 函数参数形参与实参传参指定参数传参参数默认值可变参数参数解包参数...

  • 详解python中@的用法

    python中@的用法 @是一个装饰器,针对函数,起调用传参的作用。有修饰和被修饰的区别,@function作为一...

  • Python的函数返回值返回的是值还是引用?

    关于Python函数传参是传值还是传引用?这一问题网上都有很多的讨论,这篇博客解释比较清楚,结论是:Python参...

  • python函数传参

    * 和** test(*args)* 的作用其实就是把序列args中的每个元素,当作位置参数传进去。*所对应的形参...

  • Python函数传参

    函数代码块以def关键字开头,后接函数标识符名称和圆括号() 所有传入的参数和自变量都必须放在圆括号内,可以在圆括...

  • Python共享传参

    函数的参数作为引用 Python 唯一支持的参数传递是 共享传参 ,也就是常说的引用传参。函数内部的形参是实参的别...

  • Python中的*和**用法

    在python中,我们常接触的是定义函数时候的形参概念,但实际还有如下几种用法: 1、函数形参- *args 返回...

  • 研究Python中函数的传参方式

    注:原创研究目的:研究Python中函数的传参方式:传值、传地址研究对象:Python的list和Numpy的ar...

网友评论

      本文标题:python函数传参用法

      本文链接:https://www.haomeiwen.com/subject/rvkmhhtx.html