1、简单定义
- 必须使用关键字 def
- 函数体注意缩进
- 函数名与()需绑定
- 应用:将重复的代码封装到函数,增强代码模块化
- print(函数名),输出的结果为函数地址。
2、函数之可变参数
def add(*args):
print(args)
add() #输出结果空元组()
add(1) #输出结果为(1)
add(1,2) # 输出结果为 (1,2)
add(1,2,4) #输出结果为 (1,2,4)
注: 可变参数可以接受多个参数,并将可变参数打包为元组。
3、关键字参数
-
关键字参数固定参数
def add(a,b=10): result = a+b print(result) #调用 add(5) #输出结果为15 add(4,7) #输出结果为11 def add1(a,b=10,c=4): result = a+b+c print(result) #如果想将6赋值给c,则需要结合关键字的key使用 add1(2,c=6) #输出结果为18
-
关键字参数可变参数
def func(**kwargs): print(kwargs) func(a=1,b=2,c=3) #输出结果为{'a':1,'b'=2,'c'=3} dict1 = {'01':'python','02':'java','03':'c语言'} func(dict) #报错 func(**dict1) #不报错,输出结果{'01':'python','02':'java','03':'c语言'}
注: **kwargs只要把外面给函数送的值,送的值必须是key = value。关键字可变参数是将变量打包为字典。
4、* & **
*、**都表示可变参数的意思,但是前者是传入一个value,后者是传入类似键值对形式。两者都可以表示拆包和装包的过程,那什么时候拆包?什么时候装包呢?
- 当*、**为函数的参数时,表示装包的过程。所以传入的实参一定是可装包的。
- 当作为实参传给函数的形参时,需要拆包。
- *拆包和装包都可打印,**装包是可打印的,**拆包后是不可打印的。
* 装包输出的结果类型是元组、**装包输出的结果类型是字典。
def func1(*args):
print(args)
list1 = [1,2,6]
print(*list1)
func1(*list1)
#输出结果为:
1 2 6
(1, 2, 6)
def func(**kwargs):
print(kwargs)
# func(a=1, b=2, c=3) # 输出结果为{'a':1,'b'=2,'c'=3}
dict1 = {'01': 'python', '02': 'java', '03': 'c语言'}
#print(**dict1) 报错
# func(dict) # 报错
func(**dict1) # 不报错
#输出结果为:{'01': 'python', '02': 'java', '03': 'c语言'}
5、返回值
return 后面可以是多个参数,如果多个参数则底层会将多个参数先放在一个元组中(之后拆包),也可以接受的时候多个变量来接受。
6、全局变量和局部变量
需要注意的是:
- 当全局变量与局部变量同名时,优先使用局部变量。
- 全局变量需要在函数体内修改时候:
- 当全局变量是不可变类型时,则需要在函数体内声明global关键字。
- 当全局变量是可变类型时,则不需要在函数体内声明global关键字,正常使用就行。
- 对于不可变类型和可变类型可参考:Python中可变与不可变类型
7、补充
判断变量是为某个数据类型的函数:
isintance(变量,变量类型),为系统函数,返回值为boolean类型。