Python中的全局变量如何理解

微信扫一扫,分享到朋友圈

Python中的全局变量如何理解

Python是一种面向对象的开发语言,在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用。

首先应该说明的是需要尽量避免使用Python全局变量。不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性。对全局变量,如果程序员甲修改了_a的值,这时可能导致程序中的错误。这种错误是很难发现和更正的。

全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量。 但是某些时候,Python全局变量能够解决局部变量所难以解决的问题。事物要一分为二。

python里面全局变量有两种灵活的用法:

gl.py:

gl_1 = 'hello'
gl_2 = 'world'

在其它模块中使用

a.py:

import gl
def hello_world()
print gl.gl_1, gl.gl_2

b.py:

import gl
def fun1()
gl.gl_1 = 'Hello'
gl.gl_2 = 'World'
def modifyConstant() :
global CONSTANT
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT

1 声明法

在文件开头声明Python全局变量variable, 在具体函数中使用该变量时,需要事先声明 global variable,否则系统将该变量视为局部变量。 CONSTANT = 0 (将全局变量大写便于识别)

2模块法

gl.py:

gl_1 = 'hello'
gl_2 = 'world'

在其它模块中使用

a.py:

import gl
def hello_world()
print gl.gl_1, gl.gl_2

b.py:

import gl
def fun1()
gl.gl_1 = 'Hello'
gl.gl_2 = 'World'
def modifyConstant() :
global CONSTANT
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT

内容扩展:

什么是局部变量

通俗定义:函数内部定义的变量就叫局部变量。

话不多说,代码如下:

def test1():
a = 300 # 定义一个局部变量a,并初始化300
print("--test1--修改前:a=%s" % a)
a = 200 # 给变量a重新赋值200
print("--test1--修改后:a=%s" % a)
def test2():
a = 400 # 定义另一个局部变量a,并初始化400
print("--test2--修改后:a=%s" % a)
# 分别调用函数test1,test2
test1()
test2()

输出:

–test1–修改前:a=300

–test1–修改后:a=200

–test2–修改后:a=400

结论:

  • 局部变量就是在函数内部定义的变量。
  • 不同的函数内部可以定义名字相同的变量,但它们不会产生影响。
  • 局部变量的作用,为了临时保存数据需要在需要在函数中定义变量来进行存储。

到此这篇关于Python中的全局变量如何理解的文章就介绍到这了,更多相关Python中全局变量详解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间:2020-06-04

这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 了解全局变量和局部变量之前,我们先来了解一下作用域 a = 10 def func(): b = 20 def inner(): c = 30 以上面这个程序为例:打印a,b,c 可以看到只有a打印 10 ,b和c都报错,这就是作用域的问题. 我们把新创建的一个.py文件看做事一个模块,在模块内定义的变量,如a,就是这个模块的全局变量,作

函数局部变量 全局变量 及其作用域 #简单类型(int str等)变量的局部变量与全局变量及其作用域的关系 name = “xxx” #第一级顶头定义的变量都称为全局变量,其作用域从变量定义的位置开始到此程序结束 def Print_Name(): print(“name before change:”, name) #由于name在此函数之前已经被定义为全局变量,此处函数读取变量name是读取的全局变量name “xxx”,函数内部就不能再定义

问题 在写flask,使用uwsgi启动的时候,涉及到多request线程访问同一个全局变量,发现不能获取到全局变量的值的修改,这在flask独立启动的时候是没有问题的. 伪代码 全局变量 @app.route(‘/request1/’) def 函数1 修改全局变量 @app.route(‘/request2/’) def 函数2 获取全局变量 严重怀疑是uwsgi的线程机制的问题,因为uwsgi是可以指定子进程的数目的,然而我设置子进程数目为1,之后,在处理函数1的时候是不能同时处理函数2的

Python 多进程默认不能共享全局变量 主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值). 如果要共享全局变量需要用(multiprocessing.Value(“d”,10.0),数值)(multiprocessing.Array(“i”,[1,2,3,4,5]),数组)(multiprocessing.Manager().dict(),字典)(multiprocessing.Manager().list(ran

动态导入有两种: 1 __main__(): f=”demo.A” aa=__main__(f) aa.A.t() 2 import importlib: import importlib f=”demo.A” aa=importlib.import_module(f) aa.t() 全局变量使用: global_list.py: size=None A.py: from demo import global_list global_list.size=101 fr

Python中一个py文件就是一个模块,”__all__”变量是一个特殊的变量,可以在py文件中,也可以在包的__init__.py中出现. 1.在普通模块中使用时,表示一个模块中允许哪些属性可以被导入到别的模块中, 如:全局变量,函数,类.如下,test1.py和main.py test1.py __all__=[“test”] def test(): print(‘—-test—–‘) def test1(): print(‘—-test1—-

项目中想使用以前的代码,或者什么样的需求致使你需要导入外部的包 如果是web 下,比如说django ,那么你新建一个app,把你需要导入的说用东东,都写到这个app中,然后在setting中的app也配上基本就ok了 如果是本地代码,可以有几种方式, 1.这种最简单,也可能最不实用,将你的外部文件放到跟需要调用外部文件的文件同一个包下,同一目录 folder ——toinvoke.py ——tobeinvoded.py 这样在toinvoke.py 中引入 import tov

一.枚举与字典类型 字典类型的缺点: 1.值可变 2.没有防止相同标签的功能 枚举的特点: 1.枚举类的值不可以被外界更改 2.不能存在相同的标签,但允许不同标签存在相同的枚举值,即后者相当于前者的别名 3.枚举值可以是任意类型 4.枚举标签尽量用大写 from enum import Enum #普通类 class dict(): green = 1 green = 2 red = 3 dict.red = 4 print(dict.red) >>> 4 class VIP(Enum)

本文实例讲述了Python3.5模块的定义.导入.优化操作.分享给大家供大家参考,具体如下: 1.模块体系大纲 2.模块的定义 模块的本质:是一个.py格式的Python文件.文件名test.py,对应的模块名为:test. 用来从逻辑上组织Python代码(变量.函数.类.逻辑),实现一个功能. 3.模块的导入方法 举例: (1)当导入的模块中有多个方法和多个变量时,导入模块的所有变量与方法,举例如下: (2)两种模块的导入方法的使用比较: 仅仅导入模块,调用的方式是:模块.方法 导入模块的所

本文实例讲述了Python模块的定义,模块的导入,__name__用法.分享给大家供大家参考,具体如下: 相关内容: 什么是模块 模块的导入 模块的导入 自模块的导入 同级目录导入 不同级目录导入 目录内导入目录外 目录外导入目录内 __name__ 什么是模块: 在Python中,模块就是一个个方法和类的仓库,如果我们想要使用某个模块中的某个方法或类,那么我们就需要导入对应的模板. [python有内置方法.类,所以有些方法我们并不需要导入模块] 模块的使用:模块.函数 ,     模块.类

导入CSV文件导入数据的步骤 ①打开xxx.csv文件 ②首先读取文件头 ③然后读取剩余头 ④当发生错误时抛出异常 读取完所有内容后,打印文件头和剩余所有行 代码: import csv filename = ‘enrollments.csv’ data = [] try: with open(filename)as f: reader = csv.reader(f) header = next(reader) data = [row for row in reader] except: pas

python模块导入细节 本文主要介绍了关于python模块导入的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 用于执行的可执行程序文件 不用与执行,仅用于被其它python源码文件导入的模块文件 例如文件a.py和b.py在同一目录下,它们的内容分别是: # b.py x=”var x in m

本文实例讲述了Python模块结构与布局操作方法.分享给大家供大家参考,具体如下: #coding=utf8 #起始行 #!/usr/bin/env python #模块文档 ””’ 合理的Module布局: (1) 起始行(Unix) (2) 模块文档 (3) 模块导入 (4) 变量定义 (5) 类定义 (6) 函数定义 (7) 主程序 —————————– (1) 起始行(Unix) 通常只有在类Unix环境下才使用起始行,有起始行可以输入脚本名来执

Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发的一个小工具需要在命令行环境下操作,就写个学习笔记. 国际惯例,先来一段 “Hello World” 程序(假定已经安装了 Click 包). # hello.py import click @click.command() @click.option(‘–count’, default=1, help=’Number of gre

LeetCode 238. 除自身以外数组的乘积 | Python

上一篇

挪威一家手机维修店输掉了"假冒"进口iPhone屏幕的法律斗争

下一篇

你也可能喜欢

Python中的全局变量如何理解

长按储存图像,分享给朋友