7.python-函数参数

# 函数参数
# 参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数

#===================================================
# 默认参数,及普通参数在函数调用时的规则
def student(name, gender, age=10, city='beijing'):
    print('name:', name, ',gender:', gender, ',age:', age, ',city:', city)


# 采用如下方式可以不管函数定义时参数列表的顺序
student(name='xiaoming', gender='M')  # name: xiaoming ,gender: M ,age: 10 ,city: beijing
student(gender='M', name='xiaoming')  # name: xiaoming ,gender: M ,age: 10 ,city: beijing

student('xiaoming', 'M', 'wuhan')  # name: xiaoming ,gender: M ,age: wuhan ,city: beijing
student('xiaoming', 'M', 9, 'wuhan')  # name: xiaoming ,gender: M ,age: 9 ,city: wuhan

# 如需跳过age直接给city赋值,方式如下
student('xiaoming', 'M', city='wuhan')  # name: xiaoming ,gender: M ,age: 10 ,city: wuhan


#===================================================
# 默认参数的一个坑
def append(l=[]):
    l.append('End')
    print(l)


append()  # ['End']
append()  # ['End', 'End']


# 注:上面两行代码直观上像是默认参数初始值改变了,
# 其实默认参数l在两次调用其代表的对象都是函数初始化
# 时产生的列表,只是这个列表的内容发生了变化

# 解决方法,如下
def append_no_bug(l=None):
    if l is None:
        l = []
    l.append('End')
    print(l)


append_no_bug()  # ['End']
append_no_bug()  # ['End']


#===================================================
# 可变参数和(列表、元组)类型参数的区别

def numbers(numbers):
    print(sum(numbers))


def numbers_mutable(*numbers):
    print(sum(numbers))


# numbers(1,2,3) #TypeError: numbers() takes 1 positional argument but 3 were given
numbers([1, 2, 3])  # 6
numbers((1, 2, 3))  # 6
numbers_mutable(1, 2, 3)  # 6
# numbers_mutable([1,2,3]) #TypeError: unsupported operand type(s) for +: 'int' and 'list'
a = [1, 2, 3, 4]
numbers_mutable(a[0], a[1], a[2], a[3])  # 10
numbers_mutable(*a)  # 10


#===================================================
# 关键字参数
def person(name, age, **other):
    print('name:', name, ',age:', age, ',other:', other)


person('Yue', 18)  # name: Yue ,age: 18 ,other: {}
person('Yue', 18, city='wuhan')  # name: Yue ,age: 18 ,other: {'city': 'wuhan'}
other = {'city': 'wuhan', 'province': 'hubei'}
person('Yue', 18, **other)  # name: Yue ,age: 18 ,other: {'city': 'wuhan', 'province': 'hubei'}
原文地址:https://www.cnblogs.com/wjc920/p/9256157.html