一、函数的概念与定义格式
函数就是组织好的,可重复使用的,用来实现特定功能的代码段。好处:提高代码复用性,减少代码冗余,提高开发效率。
格式如下
def 函数名(传入参数):
函数体
return 返回值
def multi(num1, num2):
return num1 + num2
print(multi(10, 20))
函数需要先定义后使用,参数不需要时可以省略,返回值不需要时也可以省略
二、函数的参数与返回值
1. 参数与返回值
函数参数的作用就是在函数运行时,接受外部传入的数据。函数定义的参数,我们称为形式参数,函数调用中的参数,我们称为实际参数。参数的数量不受限制,多个参数中间用逗号隔开,传参时需要一一对应。
返回值就是在函数执行完后,返回给调用者的结果。使用关键字return来返回结果。
def multi(num1, num2):
return num1 + num2
result = multi(10, 20)
print(result)
2. 返回值之None类型
None作为一个特殊的字面量,用于表示空,无意义,有非常多的应用场景
def hi():
print("hi")
# 场景一:函数无返回值时,默认返回None
result = hi()
# None
print(result)
# <class 'NoneType'>
print(type(result))
# 也可以主动返回None
def say():
print("say")
return None
result1 = say()
print(result1)
# 场景二:None用于if判断,等同于False。在函数中主动返回None,配合if做些逻辑判断使用
def check_age(age):
if age > 18:
return "success"
else:
return None
result2 = check_age(10)
if not result2:
print("未成年")
else:
print("成年人")
# 场景三:定义变量时,暂时不需要变量有具体值,可以用None来代替
name = None
三、函数的说明文档
用于解释说明函数,帮助我们理解函数的功能
def summation(a, b):
"""
summation 函数可以接收两个参数,进行求和的功能
:param a: 形参a表示一个加数
:param b: 形参b表示一个加数
:return: 返回时是两数相加的结果
"""
result = a + b
print(f"两数相加的和等于{result}")
return result
# 鼠标悬停在参数位置,可以看到函数的说明文档
print(summation(2, 2))
四、函数的嵌套调用
嵌套函数就是在一个函数中调用另外一个函数。
def func_a():
print("a-------------")
def func_b():
print("bstart-----------")
func_a()
print("bend-------------")
func_b()
五、变量在函数中的作用域
# 局部变量:作用范围在函数内部,函数外部无法使用它
def func_a():
num = 100
print(f"num的值等于{num}")
func_a()
# 全局变量:定义在函数外部,函数内外都可以使用
age = 10
def func_b():
print(f"年龄为{age}")
func_b()
# 全局变量在函数内直接修改是无效的,需要使用关键字 global
height = 170
def func_c():
height = 10
print(f"身高等于{height}")
func_c()
# 还是输出了170 所以这里函数外的height变量与函数内的不是一个
print(height)
height = 170
def func_c():
global height
height = 10
print(f"身高等于{height}")
# 还是输出了170 所以这里函数外的height变量与函数内的不是一个
func_c()
print(height)
六、函数多返回值
多个返回值可以用逗号分割,直接return,并用多个变量接收
# 函数多个返回值
def my_fuc():
return 1, "hello", True
x, y, z = my_fuc()
print(x, y, z) # 1 hello True
七、函数多种传参方式
位置参数:根据形式参数位置来传递实际参数
关键字参数:函数调用时通过k=v形式传递参数,这时候对参数位置就没要求了
缺省参数:也叫默认参数, 默认参数在形参中的位置必须要在位置参数后面,不然会报语法错误
不定长参数:也叫可变参数,用于不确定参数个数
# 位置参数:根据形式参数位置来传递实际参数
def user_info(name, age, gender):
print(f"姓名:{name}, 年龄:{age}, 性别:{gender}")
user_info("Tom", 20, '男')
# 关键字参数:函数调用时通过k=v形式传递参数,这时候对参数位置就没要求了
user_info(name="Tom", age=18, gender="男")
user_info(age=18, name="Tom", gender="男")
# 可以混用,但是位置参数必须要在关键字参数前面
user_info("Tom", age=18, gender="男")
# 缺省参数:也叫默认参数, 默认参数在形参中的位置必须要在位置参数后面,不然会报语法错误
def user_info(name, age, gender="男"):
print(f"姓名:{name}, 年龄:{age}, 性别:{gender}")
user_info("Jack", 20)
user_info("Jack", 20, "女")
# 不定长参数:也叫可变参数,用于不确定参数个数
# 方式一:以*标记一个形参,以元组的形式接收参数,参数一般命名为args
def fun(*args):
print(args)
fun(1, 2, "apple", True) # (1, 2, 'apple', True)
# 方式二:以**标记一个形参,以字典的形式接收参数,参数一般命名为kwargs
def fu(**kwargs):
print(kwargs)
fu(name="Jack", age=18, gender="男") # {'name': 'Jack', 'age': 18, 'gender': '男'}
八、匿名函数
# 函数作为参数传递, 作用是传入计算逻辑,而非数据
def test_fun(calculate):
result = calculate(10, 20)
print(result)
def calculate(x, y):
return x + y
test_fun(calculate)
# lambda匿名函数
# def 关键字可以定义带有名称的函数,基于名称可重复使用 lambda关键字可以定义无名称的函数,只可临时使用一次
def test_function(computer):
result = computer(100, 200)
print(result)
test_function(lambda x, y: x + y)