在python编程中,一般使用global 关键字来定义全局变量,但是发现 global 关键字在涉及多个文件时,好像存在问题。

比如,单个文件下用global定义使用全局变量的情况 ,看下面的代码

#-*-coding: utf-8 -*-#from data_def import *

distance=34

classtest(object):def __init__(self):pass

#在类里面改变全局变量的值

defchange_1(self):globaldistance

distance=90

print("distance in class:", distance)#输出全局变量的值

defprint_value(self):globaldistanceprint("distance in class:", distance)#在函数里面使用和打印全局变量的值

deffunction_test():globaldistanceprint("global value in function", distance)

distance=234

print("global value in function",distance)

function_test()#在函数里面使用和改变全局变量的值 34->234

t=test()

t.print_value()#在类里面打印全局变量的值 234

t.change_1() #在类里面改变全局变量的值 234->90

程序运行结果如下:全局变量运行正确

global value in function 34

global value in function 234distance in class: 234distancein class: 90

下面把上述代码拆分成两个文件,data_def.py 和 main.py ,data_def.py 定义全局变量distance 和类 ,main.py 导入data_def.py。

data_def.py文件代码如下:

#-*-coding: utf-8 -*-

distance=34

classtest(object):def __init__(self):pass

#在类里面改变全局变量的值

defchange_1(self):globaldistance

distance=90

print("distance in class:", distance)#输出全局变量的值

defprint_value(self):globaldistanceprint("distance in class:", distance)

main.py文件代码如下:

#-*-coding: utf-8 -*-

from data_def import *

#在函数里面使用和打印全局变量的值

deffunction_test():globaldistanceprint("global value in function", distance)

distance=234

print("global value in function",distance)print("gloabl value in main:",distance) #主函数里面,全局变量为34

function_test() #在函数里面使用和改变全局变量的值 34->234

t=test()

t.print_value()#在类里面打印全局变量的值 输出为 34 并非是234,函数里面改变全局变量值不影响类里面全局变量的值???

t.change_1() #在类里面改变全局变量的值 34->90

程序运行结果:

gloabl value in main: 34

global value in function 34

global value in function 234distancein class: 34distancein class: 90

两次运行的结果存在出入,可以发现,用global 在不同文件间操作全局变量时,生成的结果和我们想象的不太一样,具体原因还不明确??知道原因的欢迎留言。

为此,可以考虑用类变量来定义全局变量。实现方式看以下代码。

第一个文件(data_def.py)定义两个类,第一个类定义全局变量distance ,第二个类为普通操作类

#-*-coding: utf-8 -*-#filename:data_def.py#构造类变量作为全局变量,代替global

classglobal_value():

distance=34

classtest(object):def __init__(self):pass

#在类里面改变全局变量的值

defchange_1(self):

global_value.distance=40

print("distance in class:", global_value.distance)defchange_2(self):

global_value.tail_dis=90

print("distance in class:",global_value.distance)#输出全局变量的值

defprint_value(self):print("distance in class:", global_value.distance)

第二个文件(main.py) 导入第一个文件定义的类,并进行变量操作

#-*-coding: utf-8 -*-

from data_def import *

#在函数里面使用和打印全局变量的值

deffunction_test():print("global value in function", global_value.distance)

global_value.distance=234

print("global value in function",global_value.distance)print("global value in main:",global_value.distance) #打印出全局变量的初始值:34

t=test()

t.change_1()#在类里面改变全局变量的值:34->40

print("global value in main:",global_value.distance)

t.change_2()#在类里面改变全局变量的值:40->90

print("global value in main:",global_value.distance)

function_test()#在自定义函数里面使用和改变全局变量的值 90->234

global_value.distance=11 #在main主函数里面改变全局变量的值 234->11

t.print_value() #在类里面查看已经改变的全局变量的值 11

程序输出结果如下:

程序执行输出结果:global value in main: 34distancein class: 40

global value in main: 40distancein class: 40

global value in main: 40

global value in function 40

global value in function 234distancein class: 11

从输出结果可以看出,利用类变量的方式也可以实现全局变量的定义,并且可以跨文件操作。

python在类中定义全局变量_python程序中用类变量代替global 定义全局变量相关推荐

  1. python 全局变量_python程序中用类变量代替global 定义全局变量

    在python编程中,一般使用global 关键字来定义全局变量,但是发现 global 关键字在涉及多个文件时,好像存在问题. 比如,单个文件下用global定义使用全局变量的情况 ,看下面的代码 ...

  2. python的类中包含什么_Python中的类(中)

    上一篇介绍了Python中类相关的一些基本点,本文看看Python中类的继承和__slots__属性. 继承 在Python中,同时支持单继承与多继承,一般语法如下: classSubClassNam ...

  3. python在wps中的应用_python程序的一个应用wps的实例

    最近看到一个同事在统计一个月的数据量时,看到她是一个wps文件打开来记下几个特定的数,然后是当月的每天的一个文件看过来,然后算出总和,我看她一个个文件打开来很麻烦,最近刚好在看python,想了下不知 ...

  4. Python 同一个类中不同函数相互调用

    本文采取:Python的类中函数方法相互调用的两种方式_狗哥的博客-CSDN博客 __metaclass__=type class Stu:name=Noneage=Noneschool=" ...

  5. Python 自定义类中NameError错误的解决

    Python 自定义类中NameError错误的解决 自定义类之后,python中常常有莫名其妙的NameError提示出错.经尝试后发现,在修改类代码并保存之后,光重新import类是不够的,需要重 ...

  6. python类中调用另一个程序函数_Python:如何在另一个类中调用函数

    我被一些python脚本困住了 https://python4kids.brendanscott.com/2014/12/02/hooking-up-the-sunfish-chess-engine- ...

  7. 【PYTHON】论Python的类中的私有变量、共有变量、全局变量、局部变量

    0 引言 Python语言中,一切皆对象.对于Python语言中的变量,我想大家都不陌生,但是在Python中,变量也有很多种类.如私有变量.共有变量.全局变量.局部变量等.这里给大家介绍Python ...

  8. python类定义中__init__()_转:python学习——类中为什么要定义__init__()方法

    学习Python的类,一直不太理解为什么一定要定义init()方法,现在简要谈一下自己的理解吧. 1.不用init()方法定义类 定义一个矩形的类,目的是求周长和面积. 1 classRectangl ...

  9. python类中变量作用域_python进阶14变量作用域LEGB

    作用域 "作用域"定义了Python在哪一个层次上查找某个"变量名"对应的对象.接下来的问题就是:"Python在查找'名称-对象'映射时,是按照什么 ...

最新文章

  1. SpringMVC学习03之使用注解开发SpringMVC
  2. 二级联动菜单(javascript)
  3. php 复制文件夹并压缩到最小_PHP压缩文件夹的方法
  4. 原来还有这样一个东西,重来不知道过-linux ,ulimit
  5. 自己写的简易多任务系统---基于pic18fxxx
  6. Javascript IE 内存释放
  7. JACK——BOM Exercise2
  8. awk -f 分隔符 命令_Linux awk命令详解(详解版)
  9. Windows 禁止mysql 自动更新
  10. 15个实用的管理mysql的MySQLadmin命令
  11. android开发框架_2019 年五大跨平台移动应用开发工具
  12. MCPC 2011Hdu4207-4214(未完全)题解
  13. java 睡眠_Java 线程和多线程执行过程分析
  14. MySQL回滚日志(undo log)总结
  15. 备忘--moodle安装
  16. 电大系统服务器的性能测试报告表,湖南电大校教职工绩效管理系统的设计与实现...
  17. java即时通讯聊天工具
  18. 中国网络游戏行业发展模式创新与投资前景调研报告2021-2027年
  19. songtest 歌曲下载 器
  20. 怎么正确理解股票量化的概念?

热门文章

  1. 中兴新支点Linux桌面操作系统,中兴新支点Linux桌面操作系统,小白也能轻松上手...
  2. Vivado仿真信号无输出问题
  3. vue配置启动项目自动打开浏览器
  4. 借道元宇宙 一汽-大众揽巡打造沉浸式上市体验
  5. cookie的组成与作用
  6. 浅谈java中的多态
  7. 【py spider】读取代理ip文件的几个函数 | 代理ip获取 | TXT
  8. 从各个角度深度分析,医美行业的龙头【爱美客】是否值得我们投资
  9. ios内存管理机制基础
  10. iphone之打开pdf、doc、xls文件用UIWebView