脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python 局部变量global详解

Python 局部变量global详解

2022-08-14 19:55lanxiaofang Python

这篇文章主要介绍了Python 局部变量global详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

一、作用域

Local:局部作用域
Enclosing:嵌套作用域
nonlocal : 只作用于嵌套作用域,而且只是作用在函数里面
global :全局作用域
Built-in:内置作用域

python变量的使用顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量.

变量作用域:

在Python程序中声明、改变、查找变量名时,都是在一个保存变量名的命名空间中进行中,此命名空间亦称为变量的作用域。python的作用域是静态的,在代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。

一般在函数体外定义的变量成为全局变量、在函数内部定义的变量称为局部变量。

局变量所有作用域都可用,局部变量只能在本函数可用。

变量的使用顺序是,局部变量>全局变量,也就是说:优先使用局部变量。

那么问题来了,如果想在函数内使用全局变量,或改变全局变量的值,应该怎么做呢?

global关键字 出现了:

了解决函数内使用全局变量的问题, python增加了global关键字,利用它的特性,可以指定变量的作用域。

global关键字的作用:声明变量var是全局的

 

二、局部作用域

局部变量的定义无需使用关键字,定义变量时默认就是局部变量

在下列代码 c = 100 中c就是局部变量,c 是在函数内容定义的,在函数外是获取不到的

Python 局部变量global详解

def dummy():
i = 0
c = 100
print(i)
i += 1
print(c)

 

三、全局作用域

使用关键字global,要先用global关键字修饰,再赋值

Python 局部变量global详解

def dummy():
i = 0
global c
c = 100
print(i)
i += 1
print(c)

 

四、nonlocal作用域

nonlocal 一般是用在闭包函数中, nonlocal声明的变量在上级局部作用域内,而不是全局定义

Python 局部变量global详解

i = 0
n = 0
def dummy1():
i = 1
print(i)
def dummy2():
i = 2
dummy2()
print(i)
dummy1()
print(i)

输出结果:

Python 局部变量global详解

 如果在它声明的变量在上级局部中不存在,则会报错

Python 局部变量global详解

 

1、使用nonlocal

Python 局部变量global详解

i = 0
def dummy1():
i = 1
print(i)
def dummy2():
nonlocal i # 非局部的,只适用于闭包内部
i = 2
dummy2()
print(i)
dummy1()
print(i)

 

2、就近原则

b = 1111
def func5():
b = 5
print("l29", b)

def func6():
b = 6
print("l33", b) # 这里的b从内到外就近查找

func6()
print("l36", b)
func5()

Python 局部变量global详解

输出结果: 

Python 局部变量global详解

 

3、函数执行顺序

虽然这样没有报错,但是运行时会报错

a = 123
def func1():
print(a)
print(b)
func1() # 不能打印b
b = 456
func1() # 可以打印b

Python 局部变量global详解

输出结果: 除非第32行调用函数func1放在33行之后才能不报错

Python 局部变量global详解

 

4、循环、判断代码块中作用域问题

循环代码块中没有作用域这样的情况

if True:
a = 100
print(a)

for i in range(1, 5):
print(i)
print(i)

输出结果:

Python 局部变量global详解

到此这篇关于Python 局部变量global详解的文章就介绍到这了,更多相关Python global内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.51cto.com/u_15668438/5575177

延伸 · 阅读

精彩推荐
  • Pythonpython自动打开浏览器下载zip并提取内容写入excel

    python自动打开浏览器下载zip并提取内容写入excel

    这篇文章主要给大家介绍了关于python自动打开浏览器下载zip并提取内容写入excel的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具...

    拯救自己的小毛猴8672021-08-21
  • Python用python一行代码得到数组中某个元素的个数方法

    用python一行代码得到数组中某个元素的个数方法

    今天小编就为大家分享一篇用python一行代码得到数组中某个元素的个数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    霍姆格雷特11262021-05-23
  • Pythonpython实现csdn全部博文下载并转PDF

    python实现csdn全部博文下载并转PDF

    我们学习编程,在学习的时候,会有想把有用的知识点保存下来,我们可以把知识点的内容爬下来转变成pdf格式,方便我们拿手机可以闲时翻看,是很方便...

    武亮宇8142021-12-01
  • Python解析Tensorflow之MNIST的使用

    解析Tensorflow之MNIST的使用

    这篇文章主要介绍了解析Tensorflow之MNIST的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    ZHLee5182020-07-01
  • Pythonpycharm 的Structure界面设置操作

    pycharm 的Structure界面设置操作

    这篇文章主要介绍了pycharm 的Structure界面设置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    spider-liu11452021-09-02
  • PythonPython字典 dict几种遍历方式

    Python字典 dict几种遍历方式

    这篇文章主要给大家分享的是Python字典 dict几种遍历方式,文章主要介绍使用 for key in dict遍历字典、使用for key in dict.keys () 遍历字典的键等内容,需要的朋友...

    小小程序员ol9352022-02-25
  • PythonPython网络安全格式字符串漏洞任意地址覆盖大数字详解

    Python网络安全格式字符串漏洞任意地址覆盖大数字详解

    这篇文章主要介绍了Python网络安全格式字符串漏洞任意地址覆盖大数字的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    gxhhh19110602022-01-24
  • PythonPython字典中items()函数案例详解

    Python字典中items()函数案例详解

    这篇文章主要介绍了Python字典中items()函数案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    WordZzzz10672021-12-31