ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

Python学习笔记四Python函数的参数(1/3)

来源:网络整理     时间:2016-03-25     关键词:

本篇文章主要介绍了"Python学习笔记四Python函数的参数",主要涉及到方面的内容,对于Pythonjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: Python的函数除了正常使用的必选参数外,还可以使用默认参数、可变参数和关键字参数。默认参数基本使用默认参数就是可以给特定的参数设置一个默认值,调用函数时,有...

Python的函数除了正常使用的必选参数外,还可以使用默认参数、可变参数和关键字参数。

默认参数

基本使用

默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如:

def power(x, n=2):
       s=1
       while n > 0:
              n = n - 1 
              s = s * x
        return s

这样调用power(5)时,相当于调用power(5, 2)。
设置默认参数时的注意事项:
一是必选参数必须在前,默认参数在后,否则Python的解释器会报错;
二是如何设置默认参数。当函数有多个参数时,把变化大的参数放在前面,变化小的参数放在后面,变化小的参数就可以作为默认参数。

有多个默认参数时的调用注意事项

如下函数,有多个默认参数:

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)

有多个默认参数时,调用的时候,既可以按顺序提供默认参数,如enroll('bob', 'M', 7),即除了name和gender两个参数外,最后一个参数用在age上,city使用默认值。
也可以不按照定义时的顺序提供默认参数,但是需要把参数名字写上,如enroll('bob', 'M', city='shanghai'),表示age使用默认参数,city使用传入的值。

默认参数必须指向不变对象

默认参数指向可变对象时的坑:
如下函数:

def add_end(L=[]):
    L.append('END')
    return L

如果正常传入list不会出问题,但是如果一直使用默认参数,会出现以下情况:

>>> add_end()
['END']
>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

出现以上情况的原因是:Python在函数定义的时候,默认参数L的值就已经被计算出来了,即[],因为默认参数也是一个变量,指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就改变了,不再是函数定义时的[]了。
所以默认参数必须指向不可变对象。
上面问题的解决方法为:

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

可变参数

Python中可变参数的定义方式如下,

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

在参数之前加一个*号,其内部原理是在函数内部,参数收到的是一个tuple,所以函数代码可以完全不变。
如果想把list或者tuple直接传入,可以使用如下方式:

>>> nums = [1, 2, 3]
>>> calc(*nums)
14

关键字参数

关键字参数的定义方式如下:

相关图片

相关文章