Python学习之路(函数参数)

函数参数 以及默认参数

def getInfo(name, age, city) :
    return '我是%s,我今年%d岁了,我来自%s' %(name, age, city)
# print(getInfo('邓鹏', 24)) # 报错 缺少 city 参数

def getInfo(name, age, city='四川') :
    return '我是%s,我今年%d岁了,我来自%s' %(name, age, city)
print(getInfo('邓鹏', 24, '绵阳'))

# 多个参数 #默认参数 一定要写在参数列表最后

def getInfo1(name, age, city="四川", gender='男'):
    return '我叫%s, 性别%s, 我今年%d岁了,我来自%s' %(name, gender, age, city)
print(getInfo1('蔡姵仪', 23, '绵阳', '女')) # 参数顺序 必须正确
print(getInfo1('蔡姵仪', 23, gender='女')) # 参数顺序 设置其中一个默认参数 可带上参数名

定义一个可变参数的函数 一般是list 或者 tuple

# 第一种定义方式:
def cacl(numbers):
    for x in numbers: 
        print(x) 
cacl([1,2,3]) # list 对象

cacl((4,5,6)) # tuple 对象

# cacl(1,2,3) # 报错  参数个数不对

# 第二种定义方式: *args  可变参数

def cacl2(*numbers): # 加个* 代表有多个参数
    for x in numbers:
        print(x)

cacl2(7,8,9)
cacl2(*[1.0,1.1,1.2]) # 如果传入一个list 时  需将list里面的值作为参数传过去 只需在list 前面加上* 即可

函数参数之关键字参数

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

obj = {
    'city': 'cd',
    'gender': 'women'
}

person('dp', 20, **obj)

# 命名关键字参数

def person1(name, age, *, city, job): # 2个位置参数 name age 和 2个命名关键字参数 city job  用*隔开
    print(name, age, city, job)

person1('cpy', 24, city='cd', job='ww') # 传入时 位置参数按顺序传入值即可, 命名参数则需以key=value形式 传入

练习

写一个可接收一个或多个数并计算乘积的函数:

def product(*num):
    sum = 1
    for y in num:
        sum = sum * y
    return sum
# 测试
print('product(5) =', product(5))
print('product(5, 6) =', product(5, 6))
print('product(5, 6, 7) =', product(5, 6, 7))
print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))
if product(5) != 5:
    print('测试失败!')
elif product(5, 6) != 30:
    print('测试失败!')
elif product(5, 6, 7) != 210:
    print('测试失败!')
elif product(5, 6, 7, 9) != 1890:
    print('测试失败!')
else:
    try:
        product()
        print('测试成功!')
    except TypeError:
        print('测试失败!')

小结

Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。

默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
以及调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。
定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。

关注一波!喜欢一波!本人是前端菜鸟,正在做自己的个人博客邓鹏的博客,欢迎来交流学习, 使用的技术 vue + koa2 + mysql + php + nginx!

你可能感兴趣的:(Python学习之路(函数参数))