1、函数的概念
被命名,独立的,完成特定功能的代码段
2、函数的作用
①简化代码,代码的重复利用
②模块化编程
3、函数的基本原理
通过函数(内存地址),找到地址中保存的函数内部执行的代码,然后通过函数名()可以调用内存地址中的代码
4、函数的定义语法
通过def关键字进行定义
def 函数名(参数):
函数中的代码
def hello():
print("hello world")
hello()
hello world
5、带有参数的函数定义
def 函数名(参数名):
函数中的代码(使用参数)
# 在定义函数时,写入的参数,叫做形参(形式参数) 类似变量
def hello(name):
print(f"{name}老师好")
# 使用函数时,传入的参数,叫做实参(实际参数) 类似变量值
hello("张三")
6、带有返回值的函数定义
def 函数名():
函数中的代码
return 返回值
def hello():
ret = "你好"
return ret
print(hello())
你好
7、函数嵌套
函数在执行过程中又调用了另一个函数
def func01():
print("1")
def func02():
print("2")
func01()
func02()
2
1
8、全局变量和局部变量
全局变量:定义在函数外部的变量,可以在函数内部外部生效的变量
局部变量:定义在函数内部的变量,只能在函数内部生效的变量(随着函数调用结束,局部变量就会在内存中销毁)
# 定义一个全局变量
a = 100
def func01():
# 定义一个局部变量
b = 10
print(f"输出全局变量a:{a}")
print(f"输出局部变量b:{b}")
func01()
print(f"输出全局变量a:{a}")
# print(f"输出局部变量b:{b}") # 报错,只能作用于函数内部
输出全局变量a:100
输出局部变量b:10
输出全局变量a:100
9、global关键字
声明全局变量,在函数中改变全局变量
注意点:
针对不可变类型的全局变量(字符串、整型、浮点型、元组等)可变类型的全局变量(字典,集合,列表等)可写可不写
a = 100
def func01():
global a
a = 10
print(f"a的值为:{a}")
func01()
print(f"a的值为:{a}")
list1 = [1, 2, 3]
def func02():
list1.append(4)
print(list1)
func02()
print(list1)
a的值为:10
a的值为:10
[1, 2, 3, 4]
[1, 2, 3, 4]
10、位置参数和关键字参数
位置参数:在调用函数传入参数时,传入的实参顺序要和定义函数时形参顺序一一对应
关键字参数:在调用函数传入参数时,以“变量名=值”的方法进行传递,关键字参数不需要考虑顺序是否对应
def func01(name, age, gender):
print(f"我叫{name},今年{age}岁,是个{gender}孩")
# 位置参数
func01("张三", 18, "男")
# 关键字参数
func01(gender="男", name="张三", age=18)
我叫张三,今年18岁,是个男孩
我叫张三,今年18岁,是个男孩
11、缺省参数
定义函数值时,可以定义一个缺省参数,此时参数就有一个默认值,可以手动修改缺省参数的值
注意点:
①调用函数时,可以不传递缺省参数,将默认值进行参数传递,也可以自行修改默认值
②定义和调用默认值参数时,将默认值参数放到位置参数后边
def func01(name, age, gender="男"):
print(f"我叫{name},今年{age},是个{gender}孩")
func01("张三", 18)
func01("小红", 20, "女")
我叫张三,今年18,是个男孩
我叫小红,今年20,是个女孩
12、不定长参数
*args:定义函数传入形参时,接收的是一个元组类型,调用函数传入实参时通过位置参数传递
**kwargs:定义函数传入形参时,接收的是一个字典类型,调用函数传入实参时通过关键字参数传递
def func01(*args):
print(args)
print(f"我叫{args[0]},今年{args[1]}岁,性别{args[2]}")
func01("张三", 18, "男")
def func02(**kwargs):
print(kwargs)
print(f"我叫{kwargs['name']},今年{kwargs['age']},性别{kwargs['gender']}")
func02(name="张三", age=18, gender="男")
('张三', 18, '男')
我叫张三,今年18岁,性别男
{'name': '张三', 'age': 18, 'gender': '男'}
我叫张三,今年18,性别男