函数基本使用

函数基本使用

回顾
1.函数的使用原则:先定义,定义只检测语法,后调用,
def foo(x,y):
	print(x)
	print(y)
	return 123
foo(1,2)

类型提示(Type hinting)
def foo(x:'描述信息',y:'描述信息')->'返回值是整型':
只有函数体后加括号才能运行
定义函数三种格式
无参
def foo():
	pass
	
有参	
def bar(x,y):
	pass
	
空参	
def spam():
	pass
函数返回值
def foo():
	return 123,'xx',[1,2,3]

a,b,c=foo()
print(a,b,c)   # 123 xx [1,2,3]
调用函数的三种格式
def foo():
	return 123
	
foo()
res = foo()*10
print(foo())

函数参数

形参:函数定义阶段,括号内指定的参数(变量名)
实参:函数调用阶段,括号内传入的值(变量值)

二者关系:
	在函数调用时,会将实参值绑定给形参名
	函数调用完毕后则解除绑定
位置形参
在函数定义阶段,按照从左到右的顺序依次定义的形参
特点:必须被传值
def foo(x,y,z):
	print(x,y,z)
	
foo(1,2,3)
位置实参
在函数调用阶段,从左到右的顺序依次传入的值
def foo(x,y,z):
	print(x,y,z)
	
foo(1,2,3)
foo(3,2,1)
关键字实参
在函数调用阶段,按照key=value的格式来传值
特点:可以打乱顺序,仍可以为指定的形参赋值
def foo(x,y,z):
	print(x,y,z)
	
foo(x=1,y=2,z=3)
foo(1,2,z=3)
默认形参
在函数定义阶段,已经为形参赋值
特点:定义阶段已经有值,意味着在调用阶段可以不用为其传值
def foo(x,y=111)
	print(x)
	print(y)

foo(111)
foo(111,3333)  

def register(name,age,gender='male'):
	print(name)
	print(age)
	print(gender)
	
register('egon',18)
register('jack',19)
register('tom',20)
register('lili',21,'female')

注意:
1.可以混用位置形参与关键字形参,但是位置形参需在默认形参前面
2.默认形参的值推荐不可变类型
3.默认形参的值只在函数定义阶段被赋值一次

例1
m = 100

def foo(x,y=m):
	print(x,y)
	
m=200
foo(1)   # 1 100

例2
m = [111,222,333]
 
def foo(x,y=m):
	print(x,y)
	
m.append(666)
foo(1)   # 1 [111,222,333,666]

例3
def register(name,hobby,hobbies=None):
	if hobbies is None:
		hobbies = []
	hobbies.append(hobby)
	print('%s的爱好%s' % (name,hobbies))
	
register('egon','read')
register('tom','music')
register('jack','drink')

可变长参数:*与**

在形参中带*:*会将溢出的 位置实参值 汇总成元组,然后赋值给紧跟其后的形参名
def foo(x,*y):    # y =(2,3,4)
	print(x,y)
	
foo(1,2,3,4)   

在形参中带**:**会将溢出的 关键字实参值 汇总成字典,然后赋值给紧跟其后的形参名
def foo(x,**y):  # y={'a':11,'c':33,'b':22}
	print(x,y)
	
foo(1,a=11,b=22,c=33)	
	
在实参中带*
def foo(x,y,z):
	print(x,y,z)

foo(*[11,22,33])     #   foo(11,22,33)

在实参中带**
def foo(x,y,z):
	print(x,y,z)
	
foo(**{'x':1,'z':3,'y':2})   # foo(y=2,z=3,x=1)

重点:
def index(a,b,c):
	print(a,b,c)
	
def wrapper(*args,**kwargs):    
	index(*args,**kwargs)       

wrapper(1,c=3,b=2)
命名关键字参数
def foo(x,y,*args,m=666,n):
	print(x,y)
	print(m,n)
	
foo(1,2,m=777,n=888)
posted @ 2021-07-02 17:13  wuc123  阅读(101)  评论(0)    收藏  举报