python-函数 function
(1) 用于封装一个特定的功能,表示一个功能或者行为。(2) 函数是可以重复执行的语句块, 可以重复调用。(1) 语法:def 函数名(形式参数): 函数体(2) 说明:def 关键字:全称是define,意为 ”定义”。函数名:对函数体中语句的描述,规则与变量名相同。形式参数:函数定义者要求调用者提供的信息。函数体:完成该功能的语句。(3) 函数的第一行语句建议使用文档字符串描述函数的功能与参数
1 pycharm快捷键
Ctrl + P 参数信息(在方法中调用参数)
Ctrl + Q 快速查看文档
2 定义
(1) 用于封装一个特定的功能,表示一个功能或者行为。
(2) 函数是可以重复执行的语句块, 可以重复调用。
3 作用
提高代码的可重用性和可维护性(代码层次结构更清晰)。
4 基础语法
4.1 定义函数
(1) 语法:
def 函数名(形式参数): 函数体
(2) 说明:
def 关键字:全称是define,意为 ”定义”。
函数名:对函数体中语句的描述,规则与变量名相同。 形式参数:函数定义者要求调用者提供的信息。
函数体:完成该功能的语句。
(3) 函数的第一行语句建议使用文档字符串描述函数的功能与参数。
# 形式参数:表面的不具体的数据
def attack(count):
"""
攻击
:param count:次数
"""
for in range(count):
print("直拳")
print("摆拳")
print("勾拳")
4.2 调用函数
(1) 语法:函数名(实际参数)
(2) 说明:根据形参传递内容。
1 # 实际参数:真实的具体的数据
2 attack(5)
3 attack(2)
练习1: 定义函数,在终端中打印一维列表.
list01 = [5, 546, 6, 56, 76, ]
for item in list01:
print(item)
list02 = [7,6,879,9,909,]
for item in list02:
print(item)
练习2:创建函数,在终端中打印矩形.
1 number = int(input("请输入整数:")) # 5
2 for row in range(number):
3 if row == 0 or row == number - 1:
4 print("*" * number)
5 else:
6 print("*%s*" % (" " * (number - 2)))
4.3 返回值
(1) 定义:
函数定义者告诉调用者的结果。
(2) 语法:
return 数据 (3) 说明:
return后没有语句,相当于返回 None。
函数体没有return,相当于返回None。
def func01():
print("func01执行了") return 100
# 1. 调用者 ,可以接收也可以不接收返回值
func01()
res = func01() print(res)
# 2.在Python语言中 ,
# 函数没有return或return后面没有数据 ,
# 都相当于return None
def func02():
print("func02执行了")
return 16
res = func02()
print(res) # None 19
# 3.return可以退出函数
def func03():
print("func03执行了")
return
print("func03又执行了") 25
func03() 27
# 4. return 可以退出多层循环嵌套
def func04():
while True:
while True:
while True:
# break 只能退出一层循环
print("循环体")
return 36
func04()
5 可变/不可变类型在传参时的区别
(1) 不可变类型参数有:
数值型(整数,浮点数)
布尔值bool None 空值 字符串str 元组tuple
(2) 可变类型参数有:
列表 list
字典 dict
集合 set
(3) 传参说明:
不可变类型的数据传参时,函数内部不会改变原数据的值。 可变类型的数据传参时,函数内部可以改变原数据。
6 函数参数
6.1 实参传递方式argument
6.1.1 位置传参
定义:实参与形参的位置依次对应。
def fun01(p1, p2, p3):
print(p1)
print(p2)
print(p3)
# 位置实参:根据顺序与形参进行对应
fun01(1, 2, 3)
6.1.2 序列传参
定义:实参用*将序列拆解后与形参的位置依次对应。
def func01(p1, p2, p3): print(p1, p2, p3)
# 序列实参:拆 ,按照顺序与形参对应
list01 = [1, 2, 3] name = "孙悟空"
tuple01 = (4, 5, 6)
# func01(list01)
func01(*list01) # 拆 1, 2, 3 func01(*name) # 拆 孙 悟 空
func01(*tuple01) # 拆 4, 5, 6
6.1.3 关键字传参
定义:实参根据形参的名字进行对应。
def fun01(p1, p2, p3):
print(p1)
print(p2)
print(p3)
# 关键字实参:根据名字与形参进行对应
fun01(p1=1, p2=2, p3=3) fun01(p2=2, p1=1, p3=3)
6.1.4 字典关键字传参
(1) 定义:实参用**将字典拆解后与形参的名字进行对应。
(2) 作用:配合形参的缺省参数,可以使调用者随意传参。
1 def func01(p1, p2, p3):
2 print(p1, p2, p3) 3
4 # 字典实参:拆 ,按照名称与形参对应
5 dict01 = {"p2":"B","p1":"A","p3":"C"}
6 func01(**dict01)
6.2形参定义方式parameter
6.2.1 缺省形参
(1) 语法:
def 函数名(形参名1=默认实参1, 形参名2=默认实参2, …): 函数体
(2) 说明:
缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数。
def func01(p1 =0, p2="", p3=100):
print(p1)
print(p2)
print(p3)
func01(p2=2)
func01(p2=2,p3=3)
# 支持同时使用位置实参与关键字实参
func01(1,p3=3)
# 注意1:先位置实参 ,后关键字实参 # func01(p1 =1,2,3) # 错误
6.2.2 位置形参
语法:
def 函数名(形参名1, 形参名2, …): 函数体
6.2.3 命名关键字形参
(1) 语法:
def 函数名(args, 命名关键字形参1, 命名关键字形参2, …): 函数体
def 函数名(, 命名关键字形参1, 命名关键字形参2, …): 函数体
(2) 作用:
强制实参使用关键字传参
# 命名关键字形参:
# 星号元组形参后面的位置形参 # 限制实参必须是关键字实参
def func01(*args, p1, p2):
print(args) print(p1)
print(p2)
func01(p1=1, p2=2)
func01(1, 2, 3, p1=1, p2=2)
def func02(p1, *, p2=0):
print(p1)
print(p2)
# 通常星号后面的命名关键字形参属于辅助参数 ,可选 .
func02(1)
func02(1, p2=2)
6.2.4 星号元组形参
(1) 语法:
def 函数名(*元组形参名): 函数体
(2) 作用:
可以将多个位置实参合并为一个元组
(3) 说明:
一般命名为’args’
形参列表中最多只能有一个
# 位置实参数量可以无限
def func01(*args): print(args)
func01() # 空元组
func01(1, 2, 34) # (1, 2, 34)
# 不支持关键字实参
# func01(args = 1,a=1)
6.2.5 双星号字典形参
(1) 语法:
def 函数名(**字典形参名): 函数体
(2) 作用:
可以将多个关键字实参合并为一个字典
(3) 说明:
一般命名为’kwargs’
形参列表中最多只能有一个
1 # 关键字实参数量无限
2 def func01(**kwargs):
3 print(kwargs) # {'a': 1, 'b': 2} 4
5 func01(a=1,b=2)
6 # func01(1,2,3) # 报错
6.2.6 参数自左至右的顺序
位置形参 -->星号元组形参 -->命名关键字形参 -->双星号字典形参
7 作用域LEGB
7.1 定义
变量起作用的范围。
7.2 分类
(1) Local局部作用域:函数内部。
(2) Enclosing 外部嵌套作用域 :函数嵌套。
(3) Global全局作用域:模块(.py文件)内部。
(4) Builtin内置模块作用域: builtins.py文件。
7.3 变量名的查找规则
(1) 由内到外: L -> E -> G -> B
(2) 在访问变量时,先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变量,最后 是内置变量。
6.7.4 局部变量
(1) 定义在函数内部的变量(形参也是局部变量)
(2) 只能在函数内部使用
(3) 调用函数时才被创建,函数结束后自动销毁
6.7.5 全局变量
(1) 定义在函数外部,模块内部的变量。
(2) 在整个模块(py文件)范围内访问(但函数内不能将其直接赋值)。
7.6 global 语句
(1) 作用:
在函数内部修改全局变量。
在函数内部定义全局变量(全局声明)。
(2) 语法:
global 变量1, 变量2, …
(3) 说明
在函数内直接为全局变量赋值,视为创建新的局部变量。 不能先声明局部的变量,再用global声明为全局变量。
7.7 nonlocal 语句
(1) 作用:
在内层函数修改外层嵌套函数内的变量
(2) 语法
nonlocal 变量名1,变量名2, …
(3) 说明
在被嵌套的内函数中进行使用
# 2. 全局作用域:文件内部
# 全局变量:在全部作用域内创建的变量 # 适用范围:整个文件
data02 = 20
data03 = [30]
def func01():
# 1. 局部作用域:函数内部
# 局部变量:在局部作用域内创建的变量 # 适用范围:一个函数
data01 = 10
print(data01) print(data02)
def func02():
# print(data01) # 不能访问其他函数局部变量 print(data02) # 读取全局变量
def func03():
# 在局部作用域中不能修改全局变量 # data02 = 200
# 必须通过global语句声明
global data02 data02 = 200
def func04():
# 没有修改全局变量
# 在修改全局变量指向的列表
# 所以不需要通过global语句声明
data03[0] = 300
func01() func02() func03() func04()
print(data02) # 200
print(data03) # [300]

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)