函数分为定义阶段和调用阶段
def xxx(参数):
'''注释'''
表达式
xxx() -->调用
常用的print() 就是python内部定义好的函数
#########函数返回值###########
return
在函数中定义 return, 在调用的时候可以把返回值传递给一个变量,和print 不同
print 在函数调用的时候就直接打印了,而传递给变量之后在打印就是None
==========参数分类=============
1:位置参数
def foo(x,y,z):
print (x,y,z)
foo(1,2,3)
2:关键字参数
def foo(x,y,z):
print (x,y,z)
foo(y=2,x=1,z=3) -->在调用时体现
# 1:关键字实参必须在位置实参后面
# 2: 不能重复对一个形参数传值
# foo(1,z=3,y=2) #正确
# foo(x=1,2,z=3) #错误
3:默认参数
def foo(x,y,z=3):
print (x,y,z)
foo(1,y=2)
或者 foo(1,2)
#默认参数必须跟在非默认参数后
#默认参数的值通常定义成不可变类型
#默认参数在定义阶段就已经赋值了,而且只在定义阶段赋值一次
# def register(sex='male',name,age): #在定义阶段就会报错
4:可变长参数 *args(一个星) 会把溢出的按位置定义的实参都接收,以元组的形式赋值给args
**kwargs(俩个星) **会把溢出的按关键字定义的实参都接收,以字典的形式赋值给kwargs
def foo(x,y,*suibian): -->*后面随便写,最好写为args
print (x,y)
print (suibian)
foo(1,2,3,4,5,6,7,1)
变长参数会把里面的内容放到 一个元祖中
上面的调用结果 和这样写相同:
foo(1,2*[3,4,5,6,7,1]) -->在调用的时候使用* 会把后面的内容分别放入suibian 中
可以使用列表、集合、元祖、字典, 但是字典只会将key 提取出来
foo(1,2,*{'a':3,'b':4,'c':5})
如果想要 字典值:如下
foo(1,2,*{'a':3,'b':4,'c':5}.values())
如果想要k,v
foo(1,2,*{'a':3,'b':4,'c':5}.items())
处理结果:
1 2
(('c', 5), ('b', 4), ('a', 3))
##########**kwargs
def foo(x,y,**kwargs):
# (x,y)print )
print (x,y)
print (kwargs)
foo(1,2,a=3,b=4,c=5)
在传递的时候 **kwargs 的需要 以k=v 的形式传递 因为 **kwargs 是以字典形式显示
5:命名关键字参数(python3新加)