函数参数 以及默认参数
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!