python之路_函数参数相关介绍

一、定义函数时为位置参数情况

#定义函数
def name(a,b):
    if len(a)>len(b):
        return a
    elif len(a)<len(b):
        return b
#调用函数
i=[1,2,3,4,5,6]
j=[1,2,3,4]
print(name(i,j))                          #按照位置传参
print(name(a=i,b=j))                      #按照关键字传参,name(b=j,a=i)也可以,位置不限
print(name(i,b=j))                        #混合传参:必须先按照位置传参,再按照关键字传参,不可以出现name(a=i,j)

二、定义函数时为默认参数情况

1.正常调用情况

  例1:

#定义函数
def welcome(name,sex='male'):             #sex默认参数
    print('welcome,%s,sex: %s'%(name,sex))
#调用函数
welcome('黄中山')                         #输出结果:welcome,黄中山,sex: male
welcome('曹海娇')                         #输出结果:welcome,曹海娇,sex: male
welcome('鲁旭彤','female')                 #输出结果:welcome,鲁旭彤,sex: female

  例2:

def age(a1,a2=18):
    print(a1,a2)
a2 = 20
age(10)                                   #输出结果:10,18  默认值在定义阶段已经被确定,外部无法更改,除非重新传参

2.默认值陷阱情况(可变数据类型情况)

#定义函数
def func(l = []):
    l.append(123)
    print(l) 
func()                                   #输出结果:[123]
func([])                                  #输出结果:[123]
func()                                    #输出结果:[123,123]

三、定义时为动态参数情况

1、*args情况

  情况1:实际参数为逐个元素

#定义函数
def my_sum(*args):
    count_sum = 0
    for i in args:                       #被*args转为元组args = (1,2,3,4,5)
        count_sum += i
    return count_sum
#调用函数
print(my_sum(1,2,3,4))                   #实际参数个数不定,以位置参数形式传入

  情况2:实际参数为元组或者列表

#定义函数
def my_sum(*args):
    count_sum = 0
    for i in args:                        #被*args转为元组args = (1,2,3,4,5)
        count_sum += i
    return count_sum
#调用函数
l = [1,2,3,4,5]
print(my_sum(*l))                         #等价my_sum(1,2,3,4,5),*的作用是将列表打散

2、**kwargs情况

  情况1:实际参数为关键字参数

#定义函数
def demo4(**kwargs):                      # **kwargs将传入的关键字参数转为字典形式
    print(kwargs)
#调用函数
demo4(a = 1,b = 2,c = 3)                  #输出结果为:{'a': 1, 'b': 2, 'c': 3}

  情况2:实际参数为字典

#定义函数
def demo4(**kwargs):                     # **kwargs将关键字参数转换为字典
    print(kwargs)
#调用函数
d = {'a': 1, 'b': 2, 'c': 3}
demo4(**d)                                #等价于demo4(a = 1,b = 2,c = 3),**kwargs将字典打散成关键字参数

四、定义函数时参数顺序

  参数顺序需按照如下顺序定义:def 函数名(位置参数,*args,默认参数,**kwargs)

#定义函数
def func(位置参数1,位置参数2,*args,默认参数=10,**kwargs):
    print(位置参数1,位置参数2)
    print(args)
    print(默认参数)
    print(kwargs)
#调用函数
func(1,2,3,4,5,默认参数='hahaha',a=10,b=20)

 

posted @ 2017-08-29 18:12  骑猪走秀  阅读(234)  评论(0编辑  收藏  举报