python函数的参数

# python函数的参数:必选参数、默认参数、可变参数、关键字参数和命名关键字参数

'''
默认参数:
1.默认参数简化了函数的调用,但是有以下几点要注意
2.必选参数必须放在默认参数之前
3.单独函数有多个参数的时候,把变化大的放在前面,变化小的放在后面。变化小的就可以作为默认参数
'''
# 默认参数
def power(x,n=2):
    s = 1
    while n > 0:
        n =n-1
        s =s*x
    return s

r = power(3,3)
r1 = power(3)
print(r,r1)
# 4.默认参数可以降低函数调用的难度
# 我们写一个小学生的组成为函数
'''
def enroll(name,gender):
    print("name",name)
    print("gender",gender)

enroll("bob","F")
'''
# 但是很多时候我们还有输入,年龄和城市
# 一般来说同年级的学生基本年龄都是一致的,城市一般都是本地的,这时候默认参数作用就来了
def enroll(name,gender,age=6,city='ChengDu'):
    print('name:',name)
    print('gender:',gender)
    print('age:',age)
    print('city:',city)

enroll('bob','F')
# 当有不一致时
# 1.两个都不一致
enroll('li','F',5,'BeiJin')
# 2.年龄不一致
enroll('Mm','F',9)
# 3.城市不一致时,这时就要注意了
enroll('Nn','F',city='BeiJin')

# 默认参数的大坑实例
def add_end(L=[]):
    L.append('END')
    return L

# 正常调用
print(add_end([1,2,3]))
print(add_end([2,4,6]))
# 问题来了
print(add_end())
print(add_end())
'''
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
定义默认参数要牢记一点:默认参数必须指向不变对象!
'''

# 可变参数,函数调用时自动组装成一个元组
# 问题引入:a,b,c...计算a*a+b*b+c*c...
# 1.用元组或列表
'''
def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum +n*n
    return sum

print(calc([1,2,3]))
'''
# 利用可变参数
def calc(*numbers):
    sum = 0
    for i in numbers:
        sum = sum + i*i
    return sum

print(calc(1,2,3))
# 当然可能这时我有收到了一个数组,这时可以用以下办法
num = [1,2,3]
print(calc(*num))

# 关键字参数,这些关键词在函数内部自动组装成为一个字典
def person(name, age, **kw):
    print('name',name,'age',age,'other',kw)

person("mick",20)
person('liv',45,gender = 'M',job = 'Note')
# 用处很大,在注册时有些必填信息,当然有些你可以选填
extra = {'city':'beijin','job':'Note'}
person('Jack',24,**extra)
# 当然在函数内部的改动不能影响extra


# 命名关键字参数
def person(name, age, **kw):
    if 'city' in kw:
        pass
    if 'job' in kw:
        pass
    print('name:',name,'age:',age,'other:',kw)

person('Jack',24,city='beijing',adder='CC',ri=123456)
#上述情况下关键字的名字时不受限制的,但是有时我们一抔不得不限制
def person1(name,age,*,city,job):
    print(name,age,city,job)
person1('Mm',25,city='12',job='24')
# 困惑这个有毛用啊,还不直接写,那么接下来就是解惑时间了
def person1(name, age, *args, city, job):
    print(name, age, args, city, job)
person1('Jack', 24, city='Beijing', job='Engineer')

# 参数组合,就是将python的参数类型组合在一起
# 当然肯定有一定的顺序,他们的顺序是:
# 必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
# 有趣的小例子
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1(*args, **kw)
# 当然虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。

def product(*num):
    if num==():
        raise TypeError
    else:
        sum=1
        for n in num:
            sum=sum*n
        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('测试成功!')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值