首页 / PYTHON / Python干货-变量的作用域
Python干货-变量的作用域
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python干货-变量的作用域,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2433字,纯文字阅读大概需要4分钟。
内容图文
在Python程序设计中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的
变量作用域
变量的作用域一共分4种:
- 局部作用域(Local)
- 闭包函数外的函数中(Enclosing)
- 全局作用域(Global)
- 内建作用域(Built-in)
变量的访问顺序为:
先查找局部作用域,如果没有则在装饰函数外的函数中查找,如果没有则在全局作用域查找,如果没有则在内建作用域查找
示例:
x = int(2.9) # 内建作用域,内建作用域变量一般可以在python的库中找到
g_count = 0 # 全局作用域
def outer():
o_count = 1 # 闭包函数外的函数中
def inner():
i_count = 2 # 局部作用域
在Python程序设计中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其他的代码块(如 if/elif/else/、tyr/except、for/while等)不会引用新的作用域,也就是说,这些语句内定义的变量,在外部也可以访问
示例:
if True:
m1 = 'if中变量'
else:
m2 = 'esle中变量'
# 在外部访问
print(m1)
if中变量
def test():
test_value = '函数中变量'
# 在外部访问
print(test_vale)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-9b9316eb7ed1> in <module>()
3
4 # 在外部访问
----> 5 print(test_vale)
NameError: name 'test_vale' is not defined
区分全局变量与局部变量
# 定义在函数外在的变量为全局变量
total = 0
def sum(arg1, arg2):
# 定义在函数内部的变量为局部变量
total = arg1 + arg2
print('函数内部是局部变量', total)
return total
# 调用sum函数
sum(50, 80)
print('函数外部是全局变量', total)
函数内部是局部变量 130
函数外部是全局变量 0
可以看出,虽然全局变量与局部变量的名称一样,但它们可被访问的空间是不一样的。如果在内部定义一个与外部全局变量一样名称的变量,会优先操作局部变量
global 和 nonlocal 关键字
这两个关键字可以在内部作用域修改外部作用域的变量,global适用于操作全局变量,noncloal适用于闭包外的函数中的变量
示例:
num = 1
def fun1():
global num # 使用 global 关键字声明,来使用全局变量num
print('在内部打印外部全局变量 num', num)
num = 123 # 重新为外部变量num赋值
print('在内部改变外部全局变量num的值', num)
print('未调用函数前num的值', num)
fun1()
print('调用函数后num的值', num)
未调用函数前num的值 1
在内部打印外部全局变量 num 1
在内部改变外部全局变量num的值 123
调用函数后num的值 123
def outer():
num = 10
def inner():
nonlocal num # 声明nonlocal关键字来使用闭包外部的变量
print('在嵌套函数中使用num的值', num)
num = 100 # 改变num的值
print('嵌套函数中改变num的值', num)
# 调用嵌套函数
inner()
print('调用嵌套函数后num的值', num)
outer()
在嵌套函数中使用num的值 10
嵌套函数中改变num的值 100
调用嵌套函数后num的值 100
内容总结
以上是互联网集市为您收集整理的Python干货-变量的作用域全部内容,希望文章能够帮你解决Python干货-变量的作用域所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。