Python——函数
一,函数的定义
– 函数的定义:
def 函数名(参数列表):
函数体
return 返回值
– 函数的调用:
函数名(所传参数列表)
注意:
- 函数要先定义再调用
- 参数不需要可以省略
- 返回值不需要可以return None,None作为一个特殊的字面量,用于表示空,无意义。【在if判断中,None等同于False;定义变量,但暂时不需要变量有具体值,可以用None来代替。】
- 在函数定义中,参数一般称之为形式参数(形参),当有多个参数时,参数之间使用逗号分隔开
- 在函数调用中,参数一般称之为实参,参数传入时,按照顺序传入数据,使用逗号分隔
二,函数的说明文档
def func(x,y):
"""
函数说明
:param x:形参x的说明
:param y:形参y的说明
:return:返回值的说明
"""
函数体
return 返回值
快捷键方式:英文下打印三个双引号,系统自动补齐另外结尾的三个双引号且光标停留在这组三对双引号的中间,按下回车键,系统自动生成函数说明。
三,函数的嵌套使用
所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。
#定义函数fun_b
def fun_b():
print("这是函数b")
#定义函数fun_a
def fun_a():
print("这是函数a")
#嵌套调用fun_b
fun_b
print("函数a执行结束")
#调用函数fun_a
fun_a
四,函数变量作用域
局部变量:定义在函数内部的变量,即只在函数体内部生效
def fun_a():
#在函数体内部定义一个局部变量
num = 100
print(num)
fun_a() # 100
print(num) # 报错:name 'num' is not defined
全局变量:指的是在函数体内外都能生效的变量。
# 定义一个全局变量num
num = 100
def fun_a():
print(num)
fun_a #100
print(num) #100
五,函数中的多个返回值
如果一个函数要有多个返回值,该如何书写代码?
def mult_return ():
return 1,2
x,y = mult_return()
print(x) #1
print(y) #2
- 变量之间用逗号隔开
- 支持不同类型的数据一起作为返回值
- 按照返回值顺序,写对应顺序的多个变量接受即可。
六,函数的多种传参方式
函数参数种类
- 位置参数:调用函数时根据函数定义的参数位置来传递参数。(常用)
- 关键字参数:函数调用时通过“键-值”形式传递参数。
def user_infor(name,age,gender):
print(f'名字是{name},年龄是{age},性别是{gender}')
#关键字传参
user_info(age = 18,gender='女',name='小红')
#可以和位置参数混用,但位置参数必须在前
user_info("小红",age=18,gender='女')
注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。
- 缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值。(所有位置参数必须出现在默认参数前,包括函数定义和函数调用)
# 缺省参数在函数定义时需要放在最后
def user_info(name,age,gender='女'):
print(f'名字是{name},年龄是{age},性别是{gender}')
# 如果缺省参数传值则修改默认参数值,否则使用这个默认值
user_info('TOM',20)
user_info('Peter',23,'男')
- 不定长参数:分为位置传递和关键字传递
1.位置不定长传递
# 定义函数时使用了*
def user_info(*args):
print(args)
user_info('TOM') # ('TOM',)
user_info('TOM',18) #('TOM',18)
传进的所有参数都会被args收集,它会根据传进参数的位置合并为一个元组,(args是元组类型)这就是位置传递。
2.关键字不定长传递
# 函数定义时使用**,表示传入的参数数量不受限,但数据形式受限(多个参数的数据类型为Key:Value (字典)的形式)
def user_info(**wargs):
print(wargs)
user_info(name='小张',gender='女',age=25)
七,lambda匿名函数
- lambda关键字,可以定义匿名函数。
- 有名称的函数,可以基于名称重复使用。
- 无名称的匿名函数,只能临时使用一次。
匿名函数定义语法:** lambda 传入参数:函数体(只能写一行代码,无法支持多行代码)**
#使用def关键字定义一个函数作为参数的函数
def text_func(compuute):
result = compute(1,2)
print(result)
# 定义一个相同功能的匿名函数,只能使用一次
text_func(lambda x,y:x+y) #3