函数--函数调用

2020-05-18  本文已影响0人  echo_ni

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

函数参数

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

# 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
上一篇下一篇

猜你喜欢

热点阅读