首页 > 编程语言 >Python 变量作用域

Python 变量作用域

时间:2022-11-01 14:15:37浏览次数:46  
标签:fun1 变量 作用域 Python print 全局变量 函数

一、Python 中变量作用域分为以下四种,简称 LEGB:

  • Local 局部变量
  • Enclosed 嵌套变量
  • Global 全局变量
  • Built-in 内置变量
    • Local 局部变量:暂时的存在,依赖于创建该局部作用域的函数。函数存,则局部变量存,函数亡,则局部变量亡
#局部作用域
def fun():
    b = 2
    print(b)    #输出2
    
fun()
print(b)    #报错
    • Enclosed(嵌套):一般是在函数中嵌套函数的时候,外层函数的变量作用域
#Enclosed(嵌套)作用域
def fun1():
    b = 2
    print("这是fun1打印的:", b)
    def fun2():
        print("这是fun2打印的:", b)    # 在这里函数fun2里面并没有定义变量b,但是它能够引用外层函数fun1定义的b变量,此时变量b的作用域就是Enclosed
    return fun2

temp = fun1()    #调用fun1
temp()    #调用fun2

# 结果如下
这是fun1打印的: 2
这是fun2打印的: 2
    • Global(全局):一般模块文件顶层声明的变量具有全局作用域,从外部来看,模块的全局变量就是一个模块对象的属性,仅限于单个模块文件中
#Global(全局)作用域
a = 2    # a 就是一个全局变量
def fun1():
    print("这是fun1打印的:", a)

fun1()
print(a)
    • Built-in(内置):解释器内置的变量,比如int, str等

 

二、变量的使用规则

  • 创建变量时从上往下创建,搜索变量时从下往上搜索。
  • 创建变量时,下层变量会覆盖上层同名变量,但不会改变上层变量的值,除非使用gloable和nonlocal关键字声明

 

 三、变量的修改

  • global 修改全局变量
    • 一般全局变量一经定义后几乎是不用改的,也不允许在局部修改全局变量,除非使用 Global 关键字声明。如下  
a = "我是全局变量"
def fun1():
    global a    #使用global声明
    a += ",但是是修改后的全局变量"#修改全局变量
    print(a)

print(a)#fun1函数修改前
fun1()
print(a)#fun1函数修改后

# 结果如下
我是全局变量
我是全局变量,但是是修改后的全局变量
我是全局变量,但是是修改后的全局变量
  • nonlocal修改外层函数变量
    • 在函数中嵌套函数时,嵌套在里面的函数创建的作用域内一般也是不允许改变外层函数变量的值的,除非是 nonlocal 关键字声明。如下  
#使用nonocal声明,修改外层函数变量值
def fun1():
    a = "我是fun1的变量"
    print(a)#修改前
    def fun2():
        nonlocal a  #使用nonlocal声明
        a += ",但是我是修改后的"
        print(a)#修改后
    return fun2

temp = fun1()#调用fun1
temp()#调用fun2

# 结果如下
我是fun1的变量
我是fun1的变量,但是我是修改后的

 

标签:fun1,变量,作用域,Python,print,全局变量,函数
From: https://www.cnblogs.com/ZhengYing0813/p/16847462.html

相关文章

  • 拓端tecdat|python代写辅导虎扑社区论坛数据爬虫分析报告
    以下是摘自虎扑的官方介绍:虎扑是为年轻男性服务的专业网站,涵盖篮球、足球、F1、NFL等赛事的原创新闻专栏视频报道,拥有大型的生活/影视/电竞/汽车/数码网上交流社区,聊体育谈......
  • vscode下如何把缩进为2个空格的python项目改为4个空格的缩进
    最近在看老项目的代码,是python2.7年代的项目,那个时候很多的python项目都是使用2个空格,不过现在估计大多数人写python项目都是使用4个空格的了,而我看这两个空格的项目代码也......
  • Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)
    分享知识传递快乐 1、函数定义linuxshell可以用户定义函数,然后在shell脚本中可以随便调用。Shell函数定义的语法格式如下:[function]funname[()]{函数体[retu......
  • Python Selenium 获取页面所有文本内容
    分享知识 传递快乐用Selenium爬虫获取网页上显示的文本,首先安装lxml模块:pipinstalllxml代码:driver=webdriver.Chrome()driver.maximize_window()driver.get("url"......
  • Centos7 安装Python3环境
    分享知识 传递快乐  很多linux系统上都会自带python2的环境,这里主要记录在centos7中安装python3。安装依赖[root@contos7local]#yuminstallgcc-c++zlibzl......
  • python安全学习笔记-沙箱逃逸
    沙箱逃逸免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.相关文章初探Python沙箱逃逸IS-pwn-escape......
  • 学习笔记-Python安全
    Python安全免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.代码混淆Hnfull/Intensio-Obfuscator:Ob......
  • Python matplotlib 学习——建立画布和坐标系
    #导入包importmatplotlib.pyplotasplt#让图表在jupyter展示出来%matplotlibinline#解决中文乱码问题plt.rcParams["font.sans-serif"]='SimHei'#解决负号无法显示plt.......
  • Python 生成器
    什么是生成器:生成器是Python中的一个对象(按照某种规律,来生成元素的对象),生成器不是列表,保存了产生元素的算法,同时会记录游标的位置(现在拿到第几个元素了),为了下次继续拿......
  • yum安装jdk环境变量配置
    首先查看系统版本[root@localhost~]#cat/etc/redhat-releaseCentOSLinuxrelease7.4.1708(Core)安装之前先查看一下有无系统自带jdkrpm-qa|grepjavarpm-qa|grep......