函数的参数

函数的参数

  • 函数的参数:实参,形参
    • 形参角度:位置参数、万能参数(*args)、默认参数、仅限关键字参数、万能参数( *kwargs)
    • 实参角度:位置参数、关键字参数、混合参数
  • 实参和形参必须从左至右一一对应,不能多或少
def count(a,b):  #形参
    if a>b:
        return a
    else:
        return b
ret=count(in1,in2)   #实参
print(ret)
  • 关键字参数
    • 关键字传参的内容可以实参和形参不一一对应,但长度一定要一样
def baoli(age,name): #关键字传参的内容可以实参和形参不一一对应,但长度一定要一样
    s='我叫%s,今年%s岁'%(name,age)
    return s
ret=baoli(name='xiaoxiannv',age=21)
print(ret)
  • 默认参数值(一般放在形参最后面)

    • 默认参数值就是把形参里面的值固定死,但是实参里有参数会对实参进行覆盖

    • 特点,形参何实参的长度可以不一样

    • 如果默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,内存地址都是使用的同一个(函数中传参可变类型传的是引用,不可变类型传的是值)

    #实例一
    alist=[1,2,3]
    def func(n,alist):
        alist.append(n)
        return alist
    ret=func(100,alist)
    print(ret,id(ret))
    ret=func(200,alist)
    print(ret,id(ret))
    # [1, 2, 3, 100] 2083055027848
    # [1, 2, 3, 100, 200] 2083055027848
    
    #实例二
    def func(a,alist=[]):
        alist.append(a)
        return alist
    print(func(10,))
    print(func(20,[]))
    print(func(100,))
    
    # [10]
    # [20]
    # [10,100]
    
    #实例三
    def func(a,b):
        alist=[]
        alist.append(a)
        alist.append(b)
        return alist
    print(func(10,20))
    print(func(30,40))
    print(func(50,60))
    # [10, 20]
    # [30, 40]
    # [50, 60]
    
    #实例四
    def func(a,b,alist=[]):
        alist.append(a)
        alist.append(b)
        return alist
    print(func(10,20))
    print(func(30,40))
    print(func(50,60))
    # [10, 20]
    # [10, 20, 30, 40]
    # [10, 20, 30, 40, 50, 60]
    
# 默认参数值
def baoli(age,name='baoli'):   #默认参数值就是把形参里面的值固定
    s='我叫%s,今年%s岁'%(name,age)
    return s
ret=baoli(age=21)
print(ret)
得:我叫baoli,今年21岁

def baoli(age,name='baoli'):   #默认参数值就是把形参里面的值固定死,但是实参里有参数会对实参进行覆盖
    s='我叫%s,今年%s岁'%(name,age)
    return s
ret=baoli(age=21,name='liubaoli')
print(ret)

得:我叫liubaoli,今年21岁

  • 万能参数 *args , **kwargs
    • 函数定义时,*代表聚合,他将实参的所有位置参数聚合成一个元组,赋值给args
    • 函数定义时,*代表聚合,他将实参的所有关键字参数聚合成一个字典,赋值给 **kwargs
def baoli(*args):
    s='我是%s,性别%s,今年%s岁,学历%s\n'%(name,gender,age,edu)
    return s
while True:
    name=input('请输入姓名(输入Q退出!):')
    if name.upper()=='Q':break
    age=input('请输入年龄:')
    gender=input('请输入性别:')
    edu=input('请输入学历:')
    ret=baoli(name, age, edu,gender)
    print(ret)
def count(**kwargs):
    return kwargs

ret=count(name='liubaoli',gender='女')
print(ret)
得:{'name': 'liubaoli', 'gender': '女'} 
  • 仅限关键字参数
    • 放在*args和**kwargs之间
    • c必须写关键字参数,否则报错
def count(*args,c,**kwargs):
    return kwargs,c

ret,c=count(name='liubaoli',gender='女',c=666)
print(ret,c)

*、**的使用

  • *在函数定义时代表聚合,返回一个元组
  • **在函数定义时代表聚合,返回一个字典
  • *在函数调用时代表打散(可以打散列表,字符串,元组,集合),返回一个元组
  • **在函数调用时代表打散字典,返回一个字典(如果是多个字典进行打散,则打散后返回的是一整个字典)
def baoli(*args,**kwargs):    #聚合
    return args,kwargs
a,b=baoli(*'ohgfgf',*{1,2,3},**{'name':'baoli','age':21},**{'gender':'男'})#打散
print(a,b)

得:('o', 'h', 'g', 'f', 'g', 'f', 1, 2, 3) {'name': 'baoli', 'age': 21, 'gender': '男'}

上一篇:五、二分法


下一篇:DAY15—栈、队列、排序