Python变量作用域(四个主要作用域)
作者:luod
文章介绍了Python中变量的作用域,包括局部作用域、嵌套函数作用域、全局作用域和内置作用域,还讨论了变量遮蔽问题以及如何使用`global`和`nonlocal`关键字来修改不同作用域中的变量,感兴趣的朋友跟随小编一起看看吧
在程序中定义一个变量时,这个变量是有作用域的,变量的作用范围被称为它的作用域。
四种主要作用域
- 局部作用域
- 嵌套函数作用域
- 全局作用域
- 内置作用域
1. 局部作用域
def my_function():
x = 10 # 局部变量
print(x) # 可以访问
my_function() # 输出: 10
# print(x) # 这里会报错,x在函数外部不可访问2. 嵌套函数作用域
在嵌套函数中,内部函数可以访问外部函数的变量。
def outer():
x = "outer" # 嵌套作用域变量
def inner():
print(x) # 可以访问外部函数的变量
inner()
outer() # 输出: outer3. 全局作用域
在模块级别定义的变量具有全局作用域。
x = "global" # 全局变量
def my_function():
print(x) # 可以访问全局变量
my_function() # 输出: global
print(x) # 输出: global4. 内置作用域
在Python中,内置作用域(Built-in Scope) 是最外层的作用域,包含了所有内置函数、异常和对象,如print(), len(), True等
内置作用域中的名称在任何地方都可用,无需导入:
# 这些函数都来自内置作用域
print("Hello, World!") # print 是内置函数
len([1, 2, 3]) # len 是内置函数
max(1, 2, 3) # max 是内置函数常用的内置函数分类
数学函数
# 数值计算 print(abs(-5)) # 绝对值: 5 print(round(3.14159, 2)) # 四舍五入: 3.14 print(pow(2, 3)) # 幂运算: 8 print(divmod(10, 3)) # 商和余数: (3, 1)
类型转换
# 类型转换函数
print(int("123")) # 字符串转整数: 123
print(float("3.14")) # 字符串转浮点数: 3.14
print(str(123)) # 转字符串: "123"
print(bool(0)) # 转布尔值: False输入输出
# 输入输出函数
name = input("请输入你的名字: ")
print(f"你好, {name}!")# # 文件操作
with open('text.txt', 'w') as f:
f.write("Hello, World!")
内置异常
# 常见内置异常
try:
x = 1 / 0
except ZeroDivisionError as e: # ZeroDivisionError是内置异常
print(f"捕获到异常: {e}")
# 其他常见内置异常
builtin_exceptions = [
'ArithmeticError', 'AssertionError', 'AttributeError',
'EOFError', 'ImportError', 'IndexError', 'KeyError',
'KeyboardInterrupt', 'NameError', 'TypeError', 'ValueError'
]5.变量遮蔽问题
当不同作用域有同名变量时,内部作用域的变量会"遮蔽"外部作用域的变量。
x = "global"
def test():
x = "local" # 遮蔽了全局变量x
print(x) # 输出: local
test()
print(x) # 输出: global6.修改作用域的关键字
global 关键字
用于在函数内部修改全局变量。
x = 10
def modify_global():
global x
x = 20 # 修改全局变量
modify_global()
print(x) # 输出: 20nonlocal关键字
用于在嵌套函数中修改外部函数的变量。
def outer():
x = 10
def inner():
nonlocal x
x = 20 # 修改外部函数的变量
inner()
print(x) # 输出: 20
outer()到此这篇关于Python变量作用域(四个主要作用域)的文章就介绍到这了,更多相关Python变量作用域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
