美文网首页
函数--函数调用

函数--函数调用

作者: echo_ni | 来源:发表于2020-05-18 10:59 被阅读0次

    调用函数,需要知道函数的名称和参数结构

    函数参数

    函数传参实际是一种赋值,将调用者的引用值赋值给被调用函数的局部变量

    # x,y为函数A的局部变量
    def A(x,y):
          pass
    
    定义函数的参数结构

    常规参数(位置参数):接受调用者位置或变量名匹配

    def fun(name):
        print(name)
    >>>fun(1)   #  1
    >>>fun(name=2)  #  2
    

    默认参数:定义时已提供给参数默认值,接受调用者位置或变量名匹配,需写在常规参数后面

    def fun(name=0):
        print(name)
    >>>fun()  #  0
    >>>fun(1)  #  1
    >>>fun(name=2)  #  2
    

    非关键字形式可变参数:参数前增加*号表示,接受调用者位置参数匹配完后剩余的无关键字变量
    可以传入任意个参数,包括0个参数

    def fun(*name):  
           print (name)
    >>>fun(1,2)  #  (1,2)  参数name接收到一个tuple
    

    关键字参数:关键字参数允许你传入任意个含参数名的参数,这些参数调用时自动组装为一个dict

    def fun(**name):
        print (name)
    >>>fun(a=1,b=3)  #  {'a': 1, 'b': 3}
    

    判断字典中key值是否存在

    if 'c' in name:
      print(name["c"],end='')
    if 'c' in name.keys():
      print (name['c'])
    

    关键字参数分隔符:如果要限制关键字参数的名字,就可以用命名关键字参数。
    使用*号分隔后,其后的参数只能使用关键字传参,且只接受age作为关键字传参

    def fun(name,*,age):
        print (name,age)
    >>>fun(1,2)
    >>>TypeError: fun() takes 1 positional argument but 2 were given
    >>>fun(1,age=2)  #  1,2
    

    命名关键字参数:给与被强制为关键字传参的参数一个默认值,避免调用时不传参引起报错

    def fun(name,*,age):
        print (name,age,sep=',')
    >>>fun(1)
    >>>TypeError: fun() missing 1 required keyword-only argument: 'age'
    def fun(name,*,age=0):
        print (name,age,sep=',')
    >>>fun(1)  #  1,0  age自带默认值,可不传参
    

    定义顺序
    常规参数,默认参数,非关键字可变参数/关键字参数分隔符,命名关键字参数,关键字参数

    def f2(a, b, c=0, *, d, **kw):
          pass
    

    如果函数中已有一个非关键字可变参数,则不再需要一个关键字参数分隔符*,其后变量必须使用关键字传参

    def person(name, age, *args, city, job):
        pass
    >>>person('Jack', 24, city='Beijing', job='Engineer')
    

    调用顺序
    按位置匹配非关键字参数(即单变量名形式,如name)
    按变量名匹配关键字参数
    其他额外的非关键字参数分配到name中
    最后剩余的关键字参数分配到
    *name中

    return

    函数无return语句,或者return后没有参数,调用函数返回None
    执行到return语句即退出函数,像调用方返回表达式的结果,return后的语句不再执行

    def fun():
        name = 1
        return 
        print(name)
    >>>fun()  #  None
    

    return可以返回多个值
    return语句放在try...finally语句块中,return之后的语句仍然执行

    def fun():
        try:
            name = 1
            return 
        finally:
            print(name) 
    >>>fun()  #  1
    
    解包

    解包:将可迭代对象的元素逐个取出赋值给左侧变量

    # 左侧元素个数和右侧相等
    a,b,c=[1,2,3]  #  多元赋值本质上也是一种自动解包  
    print(a,b,c)
    >>>1 2 3
    a,b,c=(4,5,6)
    print(a,b,c)
    >>>4 5 6
    

    字典解包,只会把key取出来,value丢掉

    a,b,c = {"a":1, "b":2, "c":3}
    print(a,b,c)
    >>>'a' 'b' 'c'
    

    等号两边个数不等时

    a, *b, c = [1,2,3,4]
    print(a,b,c)
    >>>1 [2, 3] 4
    

    调用函数时,使用*号解包一个可迭代对象作为函数的参数

    def func(a,b,c):
        print(a,b,c)
    >>>func(*{'a':4,'b':5,'c':6})  #  a b c
    

    字典对象,也可以使用**,解包之后将整体作为关键字参数传递给函数

    def func(a,b,c):
        print(a,b,c)
    >>>func(**{'a':4,'b':5,'c':6})  #  4 5 6
    

    相关文章

      网友评论

          本文标题:函数--函数调用

          本文链接:https://www.haomeiwen.com/subject/xnbqohtx.html