• python-中函数的参数


    函数的注释

    In [3]: def fun(test):
       ...:     '''This is a test content'''
       ...:     print("%s" % test)
       ...: 
    In [4]: print fun.__doc__  #打印函数的说明信息
    This is a test content

    函数与过程的区别

    #在数学中函数,执行完成之后,总是会返回一些数值;因为我们借助于函数做一些运算。
    #但正如上面定义fun()一样,这个函数我们并没有任何的返回结果,这样的形式一般称之为过程。
    # 但是在python中二者的区分并不是那么明确。

    函数的参数

    位置参数

    在c语言中有形参和实参之分,在这里我们参照c语言中的定义。

    形参:在定义函数时,指定的参数叫形参。

    实参:在调用函数是,给函数传递的值叫实参。

    In [5]: def fun(x,y,z):    # 这里的x, y,z叫形参
       ...:     print x
       ...:     print y
       ...:     print z
       ...:     
    
    In [6]: fun(1,2,3)   # 这里的1,2,3叫实参
    1
    2
    3
    
    # 在这里我们直接给fun()函数传递了三个数值,他会按照形参出现的位置顺序,把实参的值传递给形参。

    关键字参数:

    In [7]: fun(z=8,x=9,y=7) # 传递实参时使用这种形式,叫关键字参数
    9
    7
    8
    
    In [8]: fun(8,z=9,y=4)  # 关键字参数和位置参数的结合使用
    8
    4
    9
    
    In [9]: fun(y=6,3,8)  # 关键字参数,必须在位置参数之后
      File "<ipython-input-9-1fc769c7269b>", line 1
        fun(y=6,3,8)
    SyntaxError: non-keyword arg after keyword arg

    默认参数:

    在定义函数时,可以直接给形参指定对应的值,若在调用是没有传入数值,则使用默认的值;若在调用时传入了数值,则使用传入的值。

    In [10]: def fun1(x,y=5):
       ....:     print x
       ....:     print y
       ....:     
    
    In [11]: fun1(4)    #调用是没有只传人一个数值
    4
    5
    
    In [12]: fun1(4,9)  # 调用时传入两个数值
    4
    9
    
    In [13]: 

    收集参数--->准确的说,应该是收集实参

    In [13]: def fun(test):  # 注意这两个参数的异同
       ....:     print test
       ....:     
    
    In [14]: def fun1(*test): # 多了一个*号
       ....:     print test
       ....:     
    
    In [15]: fun(1,2,3)
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-15-057c5c08ae41> in <module>()
    ----> 1 fun(1,2,3)
    
    TypeError: fun() takes exactly 1 argument (3 given)
    
    In [16]: fun1(1,2,3)  # 会以元组的形式返回参数列表
    (1, 2, 3)
    
    
    
    In [17]: def fun2(x, *test):  # 含有位置参数,
       ....:     print x
       ....:     print test
       ....:     
    
    In [18]: fun2(1,2,3,4,5)  #×号就是收集其余的位置参数
    1
    (2, 3, 4, 5)

    若想收集关键字参数,则需要如下这样:

    In [19]: fun1(x=1,y=2,z=4)
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-19-58f73c6e27ee> in <module>()
    ----> 1 fun1(x=1,y=2,z=4)
    
    TypeError: fun1() got an unexpected keyword argument 'x'
    
    In [21]: def fun3(**kargs):  #定义形参时候使用双*号,可以处理关键字参数
       ....:     print kargs
       ....:     
    
    In [22]: fun3(x=1,y=2,z=4)  # 关键字参数以字典形式返回
    {'y': 2, 'x': 1, 'z': 4}

    以上是形参的设置,来处理不同类型的实参。反过来我们也可以把元组,或者字典作为实参,传入到函数的形参里面。

    In [23]: def add(x,y):   # 定义一个简单的函数
       ....:     print x +y 
       ....:     
    
    In [24]: add(4,5)    # 调用查看结果,作对比
    9
    
    In [25]: tuple1 = (34,54)   # 定义一个元组,
    
    In [26]: add(*tuple1)   # 把元组作为参数传递给函数
    88
    
    In [27]: dict1 = {"x":43, "y":32} # 定义一个字典, 
     
    In [28]: add(**dict1)  #把字典作为参数传递给函数
    75
    
    In [29]: dict2 = {"a":43, "b":32} # 定义另一个字典
    
    In [30]: add(**dict2)  #同样的传递,却失败
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-30-aa7abc779170> in <module>()
    ----> 1 add(**dict2)
    
    TypeError: add() got an unexpected keyword argument 'a'
    
    # 在使用字典传递参数时候,字典的key值要和形参的值对应,这里字典的键key值必须为x, y与形参对应
  • 相关阅读:
    a
    迭代 递归 反转链表 反转二叉树
    深入理解 Promise 之手把手教你写一版
    Golang在商业化广告的优化实践 https://mp.weixin.qq.com/s/joR1Y5t4a8fIs111XNZluA
    找BUG 题目理解 平衡二叉树 定义
    源码 json.Unmarshal json.Marshal
    大流量活动下钱包提现方案的设计与实现
    Scrum敏捷实践总结
    情况考虑不周 非边界值
    凡是正值 皆有贡献 保留
  • 原文地址:https://www.cnblogs.com/wxzhe/p/8888541.html
Copyright © 2020-2023  润新知