python函数参数(2)

(2)

<1>. 缺省参数

调用函数时,缺省参数的值如果没有传入,则取默认值。

下例会打印默认的age,如果age没有被传入:

def printinfo(name, age=35):
   # 打印任何传入的字符串
   print("name: %s" % name)
   print("age %d" % age)

# 调用printinfo函数
printinfo(name="miki")  # 在函数执行过程中 age去默认值35
printinfo(age=9 ,name="miki")

以上实例输出结果:

name: miki
age: 35
name: miki
age: 9

总结:

  • 在形参中默认有值的参数,称之为缺省参数
  • 注意:带有默认值的参数一定要位于参数列表的最后面
  >>> def printinfo(name, age=35, sex):
  ...     print name
  ...
    File "<stdin>", line 1
  SyntaxError: non-default argument follows default argument

<2>. 不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。

基本语法如下:

def functionname([formal_args,] *args, **kwargs):
   """函数_文档字符串"""
   function_suite
   return [expression]

注意:

  • 加了星号(*)的变量args会存放所有未命名的变量参数,args为元组
  • 而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.
Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
Type "copyright", "credits" or "license" for more information.


IPython 2.4.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.


In [1]: def fun(a, b, *args, **kwargs):
   ...:     """可变参数演示示例"""
   ...:     print("a =%d" % a)
   ...:     print("b =%d" % b)
   ...:     print("args:")
   ...:     print(args)
   ...:     print("kwargs: ")
   ...:     for key, value in kwargs.items():
   ...:         print("key=%s" % value)
   ...:         


In [2]: fun(1, 2, 3, 4, 5, m=6, n=7, p=8)  # 注意传递的参数对应
a =1
b =2
args:
(3, 4, 5)
kwargs: 
key=8
key=6
key=7


In [3]: c = (3, 4, 5)


In [4]: d = {"m":6, "n":7, "p":8}


In [5]: fun(1, 2, *c, **d)    # 注意元组与字典的传参方式
a =1
b =2
args:
(3, 4, 5)
kwargs: 
key=8
key=6
key=7


In [6]: fun(1, 2, c, d) # 注意不加星号与上面的区别
a =1
b =2
args:
((3, 4, 5), {'p': 8, 'm': 6, 'n': 7})
kwargs: 


In [7]: 

<3>. 缺省参数在*args后面

def sum_nums_3(a, *args, b=22, c=33, **kwargs):
    print(a)
    print(b)
    print(c)
    print(args)
    print(kwargs)

sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900)

说明:

  • 如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的

猜你喜欢

转载自blog.csdn.net/caomei_huacha/article/details/80889723