欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习之路(函数参数)

程序员文章站 2024-02-24 14:01:28
...

函数参数 以及默认参数

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!