Python函数

作者: 直到世界的尽头_yifan | 来源:发表于2017-12-17 22:28 被阅读0次

    Python的函数定义非常简单,但灵活度非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
    1.位置参数
    def power(x):
    return x*x
    对于power(x)函数,参数x就是一个位置参数。
    当我们调用power函数时,必须传入有且仅有的一个参数x:

    power(2)
    4
    power(10)
    100

    def power(x,n):
    s = 1
    while n > 0:
    n = n - 1
    print('before:',s)
    s = sx
    print('after:',s)
    return s
    2.默认参数
    def power(x,n=2):
    s = 1
    while n > 0:
    n = n -1
    s = s
    x
    return s
    注意:(1)必选参数在前,默认参数在后,否则Python解释器会报错
    (2)如何设置默认参数,当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面,变化小的参数可以作为默认参数,这样可以降低函数调用的难度

    注意:定义默认默认参数必须指向不变对象
    大家反复调用使用默认参数看看结果如何
    def add(L=[]):
    L.append('End')
    return L

    原因:Python函数在定义的时候,默认参数L的值就是被计算出来的,即[],因为L是一个变量,它指向对象L,每次调用该函数,如果改变了L的内容,则在下次调用的时候,默认参数内容就变了

    对上面的例子做好修改:
    def add(L=None):
    if L is None:
    L=[]
    L.append('End')
    return L

    3.可变参数
    在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是多个,还可以是0个。
    要定义Python函数,我们可以确定输入的参数,由于参数个数不确定,我们可以想到使用list或tuple传进来,例子:
    def calc(numbers):
    sum = 0
    for n in numbers:
    sum = sum + n
    return sum

    cacl([1,2,3])
    6
    cacl((1,2,3))
    6
    也可以简写如下:
    cacl(1,2,3)
    6

    我们把以上例子修改为可变参数:
    def cacl(*numbers):
    sum = 0
    for n in numbers:
    sum = sum + n
    return sum

    定义可变参数和定义list或tuple参数相比,仅仅在参数前面加了个*号。

    cacl(1,2,3)
    6
    cacl()
    0

    最常见的的写法:

    nums=[1,2,3]
    cacl(*nums)
    6
    总结:可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

    4.关键字参数
    关键字参数允许传入0个或任意个包含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,实例:
    def person(name,age,**mn):
    print('name:',name,' age:',age.' other:',mn)
    函数person除了接收参数name和age之外,还接受关键字参数mn。在调用该函数时,可以只传入必选参数:

    person('peter',29)
    name:peter age:29 other:{}

    也可以传入关键字参数:

    person('peter',29,city='nanjing')
    name:peter age:29 other:{'city':'nanjing'}
    关键字函数有什么作用?可以扩展函数的功能

    和可变函数类似,我们可以先组装一个dict,然后把dict转换为关键字参数传进去:

    infos=['city':'nanjing','job':'engineer']
    person('peter',29,**infos)
    name:peter age:29 other:{'city':'nanjing','job':'engineer'}
    infos表示把infos这个dict的所有的key-value用关键字参数传入到函数的person的mn参数,mn将获得一个dict字典数据类型,注意mn获得到的是一个mn的一份拷贝,对mn的改动不会影响到函数外的dict类型变量infos。

    5.命名关键字参数
    对于关键字参数,函数的调用者可传入任意不受限制的关键字参数;如果需要限制关键字参数的名字,也就是dict的key,就可以用命名关键字参数,例如city和job作为命名关键字参数,定义的函数如下:
    def person(name,age,,city,job):
    print(name,age,city,job)
    和关键字参数不同,命名关键字参数需要一个符号分隔符
    ,*后面的参数被视为命名关键字参数。
    调用方式如下:

    person('Peter',27,city='nanjing',job='engineer')
    Peter 27 nanjing engineer

    如果函数定义中有了一个可变参数,后面的命名关键字参数就不需要一个特殊分隔符了:
    def person(name,age,
    args,city,job):
    print(name,age,args,city,job)

    注意:命名关键字参数必须传入参数名,这和第1条的位置参数参数不同

    命名关键字参数可以有缺省值,从而简化调用:
    def person(name,age,*,city='nanjing',job):
    print(name,age,city,job)

    所以我们可以这样调用:

    person('peter',29,job='engineer')
    peter 29 nanjing engineer

    使用命名关键字参数时,特别注意,如果没有可变参数,就必须加一个作为特殊分隔符。如果缺少,Python解释器兼顾无法识别位置参数和命名关键字参数。

    相关文章

      网友评论

        本文标题:Python函数

        本文链接:https://www.haomeiwen.com/subject/isiuwxtx.html