• python 的参数总结


    一、形参和实参

      函数参数的作用是传递数据给函数使用

      在使用的过程中,参数有两种形式:形式参数和实际参数

      形参:  

        定义函数的参数

      实参:

        调用函数时的参数

      根据实际参数类型不同,将实际参数传递给形参的方式有两种:值传递和引用传递

      值传递:

          实参为不可变对象,传递给形参后,形参的值改变,实参值不变。(如 fun(a),传递的只是 a 的值,没有影响 a 对象本身,比如在 fun(a) 内部修改 a 的值,只是修改另外一个赋值的对象,不会影响 a 本身)

      引用传递:

        实参为可变对象,传递给形参后,形参的值改变,实参值也会改变(如( fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会收影响)

    # 值传递和引用传递
    def fun(obj):
        print(obj)
        obj += 1
    
    obj1 = "123456"
    demo(obj1)
    print("函数调用后 obj1:" + obj1)
    
    obj2 = [1 ,2,3]
    demo(obj2)
    print("函数调用后:"+ obj2)
    
    # 结果
    123456
    函数调用后obj1:123456
    [1, 2, 3]
    函数调用后obj2:[1, 2, 3, 1, 2, 3]

    二、位置参数、关键字参数、默认参数、可变参数

    1、位置参数(必备参数)

      函数调用时的数量,位置,参数类型必须和定义的一样

    2、关键字参数

      函数调用时,使用形参的名字 = 输入的参数值,此时位置可与定义时不一致

    3、默认参数

      函数定义时,为参数设置一个默认的值,当函数调用时,没有传入这个参数值,直接使用这个默认值,

      注意:定义函数时,默认参数必须指向不可变参数,如果指向可变对象,多次调用,可能时得到的不是意料之内的结果。

    # 默认参数必须值相不可变对象,如果指向可变对象,结果不对
    def demo1(obj = []):
        print( obj )
        obj.append(1)
    
    def demo2(obj = None):
        if obj == None:
            obj = []
        print(obj)
        obj,append(1)
    
    demo1()
    demo1()
    demo1()
    
    demo2()
    demo2()
    demo2()
    #结果
    []
    [1]
    [1, 1]
    []
    []
    []

    4、可变参数(不定长参数)

      可变参数有两种形式:一种时 *arg, 一种时 ** kwargs 

      *args :

        这种形式表示接受任意多个实际参数将其放到一个与那组中

      **kwargs:

        这种形式表示接受任意多个实际参数将其放到一个字典中,类似关键字参数

    #可变参数
    #*args形式
    def demo3(*args):
        print "
     I like coffee:"
        for i in args:
            print i,
    #调用形式:可直接传一个tuple
    demo3('巴西','土耳其')
    #也可以通过list或者tuple的变量传
    obj1=['蓝山','摩卡','卡布奇诺']
    demo3(*obj1)
    
    #**kwargs形式
    def person(name, age, **kw):
        print'
     name:', name, 'age:', age, 'other:', kw
    def demo4(**kwargs):
        print "
     name:age"
        for i,j in kwargs.items():
            print i,':',j
    
    #调用:可直接传一个字典
    person("Paul",77,sex="male",job="teacher")
    #也可以通过字典变量传
    obj2={'Mary':23,'HanMeiMei':34,'Lily':12}
    demo4(**obj2)
    #结果
     I like coffee:
    巴西 土耳其 
     I like coffee:
    蓝山 摩卡 卡布奇诺 
     name: Paul age: 77 other: {'job': 'teacher', 'sex': 'male'}
    
     name:age
    Lily : 12
    Mary : 23
    HanMeiMei : 34

    三、参数组合

      在 Python 中定义函数,可以用必选参数,默认参数,可变参数,关键字参数组合使用,但是注意,参数定义的顺序必须是: 

      必选参数、默认参数、可变参数、关键字参数

                  

  • 相关阅读:
    使用ngx_lua构建高并发应用(1)
    nginx+lua项目学习
    学习乱
    if---(switch-case)语句初步学习总结
    数据类型转换
    总结:C#变量,占位符等相关知识
    学习随笔
    开始我的.NET的学习旅程
    Python 网络爬虫 008 (编程) 通过ID索引号遍历目标网页里链接的所有网页
    Python 网络爬虫 007 (编程) 通过网站地图爬取目标站点的所有网页
  • 原文地址:https://www.cnblogs.com/jcjc/p/11570770.html
Copyright © 2020-2023  润新知