从0开始学python(2)

函数
函数用def定义,如

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

与C#或Java不同:函数可以有默认参数,返回多个值时返回一个tuple

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

age与city为默认参数,只有与默认情况不符的时候才需要输入age与city,其他时候都是用默认值

enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')

可变参数
Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

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

*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。

命名关键字参数

对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。

仍以person()函数为例,我们希望检查是否有city和job参数:

def person(name, age, **kw):
    if 'city' in kw:
        # 有city参数
        pass
    if 'job' in kw:
        # 有job参数
        pass
    print('name:', name, 'age:', age, 'other:', kw)

但是调用者仍可以传入不受限制的关键字参数:

person('Jack', 24, city='Beijing', addr='Chaoyang', zipcode=123456)

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:

def person(name, age, *, city, job):
    print(name, age, city, job)

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

调用方式如下:

 person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

总结:
可变参数
前面加上*,允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
关键字参数
前面加上**,允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
命名关键字参数
限制关键字参数的名字,和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。
对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

转载至廖雪峰的python教程https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000

猜你喜欢

转载自blog.csdn.net/weixin_42316707/article/details/86493388