当前位置:  编程语言>python

Python函数默认参数和字典参数及可变参数(带星号参数)

 
    发布时间:2013-8-13  


    本文导语:  1 Python函数位置参数 定义一个Python函数如下:def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return Fals...

1 Python函数位置参数

定义一个Python函数如下:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
    while True:
        ok = input(prompt)
        if ok in ('y', 'ye', 'yes'):
            return True
        if ok in ('n', 'no', 'nop', 'nope'):
            return False
        retries = retries - 1
        if retries < 0:
            raise IOError('refusenik user')
        print(complaint)

默认参数是按照参数的位置来进行赋值,函数的调用形式举例:

仅仅使用必须的参数: ask_ok('Do you really want to quit?')

使用第2个可选参数: ask_ok('OK to overwrite the file?', 2)

使用所有参数: ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

2 关键字参数

定义一个包含关键字参数和位置参数的函数如下:

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
    print("-- This parrot wouldn't", action, end=' ')
    print("if you put", voltage, "volts through it.")
    print("-- Lovely plumage, the", type)
    print("-- It's", state, "!")

可以对函数进行调用的方式:

parrot(1000)                                        

parrot(voltage=1000)                                

parrot(voltage=1000000, action='VOOOOOM')            

parrot(action='VOOOOOM', voltage=1000000)            

parrot('a million', 'bereft of life', 'jump')        

parrot('a thousand', state='pushing up the daisies')  

3 可变参数,可变位置参数及可变关键字参数

1).位置参数,即按照位置进行赋值的参数,加上*后成为可变位置参数,*args是一个tuple类型。在参数名之前使用一个星号,就是让函数接受任意多的位置参数。

>>> def multiply(*args):
...     total = 1
...     for arg in args:
...         total *= arg
...     return total
...
>>> multiply(2, 3)
6
>>> multiply(2, 3, 4, 5, 6)
720

python把参数收集到一个元组中,作为变量args。显式声明的参数之外如果没有位置参数,这个参数就作为一个空元组。

2)关键字参数

   python在参数名之前使用2个星号来支持任意多的关键字参数。kwargs是一个正常的python字典类型,包含参数名和值。如果没有更多的关键字参数,kwargs就是一个空字典。

>>> def accept(**kwargs):
...     for keyword, value in kwargs.items():
...         print "%s => %r" % (keyword, value)
...
>>> accept(foo='bar', spam='eggs')
foo => 'bar'
spam => 'eggs'

3)混合参数类型

  任意的位置参数和关键字参数可以和其他标准的参数声明一起使用。混合使用时要加些小心,因为python中他们的次序是重要的。参数归为4,不是所有的类别都需要。他们必须按下面的次序定义,不用的可以跳过。

(1)必须的参数

(2)可选的参数

(3)过量的位置参数

(4)过量的关键字参数

def complex_function(a, b=None, *c, **d):

这个次序是必须的,因为*args和**kwargs只接受那些没有放进来的其他任何参数。没有这个次序,当你调用一个带有位置参数的函数,python就不知道哪个值是已声明参数想要的,也不知道哪个被作为过量参数对待。也要注意的是,当函数能接受许多必须的参数和可选的参数,那它只要定义一个过量的参数类型即可。


相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3