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与形参对应
原文地址:https://www.cnblogs.com/wxzhe/p/8888541.html