目录
nonlocal:在嵌套函数中 修改外层函数变量(非全局):
接着上节内容
函数的作用域:
在编程中,作用域(Scope) 是指程序中变量、函数或对象的 可见性和生命周期范围。它决定了在代码的哪些部分可以访问某个变量或函数,以及在什么时间这些变量或函数会被创建和销毁。
1.作用域的核心概念
-
可见性:变量或函数在哪些代码区域可以被访问。
-
生命周期:变量或函数从创建到销毁的时间范围。
-
命名空间:作用域的实现依赖于命名空间(Namespace),每个作用域对应一个独立的命名空间。
2.作用域的类型
在Python中,作用域主要分为以下几种:
(1) 局部作用域(Local Scope)
-
定义:在函数或方法内部定义的变量。
-
特点:
-
只能在函数内部访问。
-
函数调用结束后,局部变量会被销毁。
def func(): x = 10 # x是局部变量 print(x) func() print(x) # 报错:x未定义
-
(2) 嵌套作用域(Enclosing Scope)
-
定义:在外层嵌套函数中定义的变量。
-
特点:
-
用于闭包(Closure)场景。
-
内层函数可以访问外层函数的变量,但外层函数不能访问内层函数的变量。
-
-
示例
def outer(): y = 20 # y是嵌套作用域变量 def inner(): print(y) # 内层函数访问外层变量 inner() outer()
(3) 全局作用域(Global Scope)
-
定义:在模块(文件)级别定义的变量。
-
特点:
-
在整个模块中可见。
-
生命周期从模块加载开始,到模块卸载结束。
-
-
示例:
z = 30 # z是全局变量 def func(): print(z) # 函数内可以访问全局变量 func()
(4) 内置作用域(Built-in Scope)
-
定义:Python内置的函数和变量(如
print
、len
等)。 -
特点:
-
在任何地方都可以访问。
-
优先级最低,当其他作用域有同名变量时会被覆盖。
-
-
示例:
print(len([1, 2, 3])) # len是内置函数
变量查找顺序
当访问一个变量时,Python会 按 L → E → G → B 的顺序查找:
x = "global" # G层
def outer():
x = "enclosing" # E层
def inner():
x = "local" # L层
print(x) # 输出 "local"(优先查找L层)
inner()
outer()
那么怎么更改变量所处位置呢,我们需要关键字
关键字global
和nonlocal
global
:在函数内部 修改全局变量:
x = 0
def func():
global x # 声明使用全局变量x
x = 10 # 修改全局变量,而非创建局部变量
func()
print(x) # 输出 10
nonlocal
:在嵌套函数中 修改外层函数变量(非全局):
def outer():
x = 1
def inner():
nonlocal x # 声明使用外层函数的x
x = 2 # 修改外层函数的x
inner()
print(x) # 输出 2(外层变量被修改)
outer()
简单总结一下吧:
-
优先使用局部变量:避免全局变量污染。
-
必要时用
global
/nonlocal
:明确修改变量来源。 -
闭包谨慎处理变量:注意循环中的延迟绑定问题。
内置函数
Python的 内置函数(Built-in Functions) 是Python解释器直接提供的函数,无需导入任何模块即可使用。这些函数涵盖了常见的数据操作、数学计算、类型转换等功能,是Python编程的基础工具。
常用内置函数分类
(1) 数学运算
(2) 类型转换
(3) 输入输出
(4) 迭代与序列操作
(5) 对象操作
(6) 逻辑判断
(7) 函数式编程 
(8) 文件操作
(9) 其他
示例代码
迭代操作
for i, v in enumerate(["a", "b", "c"]):
print(i, v) # 输出 0 a, 1 b, 2 c
在教大家怎么查找完整内置函数列表吧
import builtins
print(dir(builtins))
接下来会更精彩