zoukankan      html  css  js  c++  java
  • python中参数总结

    一、形参和实参

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

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

    形参:定义函数时的参数

    实参:调用函数时的参数

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

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

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

    #值传递与引用传递
    def demo(obj):
        print obj
        obj+=obj
    
    obj1="123456"
    demo(obj1)
    print "函数调用后obj1:"+obj1
    
    obj2=[1,2,3]
    demo(obj2)
    print "函数调用后obj2:"+str(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.可变参数(不定长参数)

    可变参数有两种形式:一种是*args,另一种是**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中定义函数,可以用必选参数、默认参数、可变参数、关键字参数组合使用。但是注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数。

  • 相关阅读:
    Linux信号列表
    ubuntu nfs server的安装
    【转】 澄清:make oldconfig
    鸟哥的私房菜
    【转】WIN XP下pppoe服务器的搭建与使用
    《Win32多线程程序设计》学习笔记 第4章 同步控制之 事件(Event Objects) 和 interlocked variables
    《Win32多线程程序设计》学习笔记 第4章 同步控制之 信号量(Semaphores)
    《C++编程规范》学习笔记(2)
    《Win32多线程程序设计》学习笔记 第5章 不要让线程成为脱缰野马
    《C++编程规范》学习笔记(4)编程风格
  • 原文地址:https://www.cnblogs.com/josie-xu/p/10455702.html
Copyright © 2011-2022 走看看