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

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

# -*-coding: utf-8 -*-#from data_def import *distance=34

class test(object):    def __init__(self):       pass    #在类里面改变全局变量的值    def change_1(self):        global distance        distance=90        print("distance in class:", distance)

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

#在函数里面使用和打印全局变量的值def function_test():    global distance    print("global value in function", distance)    distance=234    print("global value in function",distance)

function_test()  #在函数里面使用和改变全局变量的值 34->234t=test()t.print_value()  #在类里面打印全局变量的值 234t.change_1()   #在类里面改变全局变量的值 234->90

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

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

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

data_def.py文件代码如下:

#Python学习交流QQ群:778463939distance=34class test(object):    def __init__(self):       pass    #在类里面改变全局变量的值    def change_1(self):        global distance        distance=90        print("distance in class:", distance)

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

main.py文件代码如下:

# -*-coding: utf-8 -*-from data_def import *#在函数里面使用和打印全局变量的值def function_test():    global distance    print("global value in function", distance)    distance=234    print("global value in function",distance)

print("gloabl value in main:",distance)  #主函数里面,全局变量为34function_test()  #在函数里面使用和改变全局变量的值 34->234t=test()t.print_value()  #在类里面打印全局变量的值 输出为 34 并非是234,函数里面改变全局变量值不影响类里面全局变量的值???t.change_1()   #在类里面改变全局变量的值 34->90

程序运行结果:

gloabl value in main: 34global value in function 34global value in function 234distance in class: 34distance in class: 90

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

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

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

# -*-coding: utf-8 -*-# Python学习交流QQ群:778463939

class global_value():    distance=34

class test(object):    def __init__(self):       pass    #在类里面改变全局变量的值    def change_1(self):        global_value.distance=40        print("distance in class:", global_value.distance)

    def change_2(self):        global_value.tail_dis=90        print("distance in class:",global_value.distance)

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

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

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

#在函数里面使用和打印全局变量的值def function_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)   #打印出全局变量的初始值:34t=test()t.change_1()                                           #在类里面改变全局变量的值:34->40print("global value in main:",global_value.distance)t.change_2()                                           #在类里面改变全局变量的值:40->90print("global value in main:",global_value.distance)function_test()                                        #在自定义函数里面使用和改变全局变量的值 90->234global_value.distance=11                               #在main主函数里面改变全局变量的值 234->11t.print_value()                                        #在类里面查看已经改变的全局变量的值 11

程序执行输出结果:

global value in main: 34distance in class: 40global value in main: 40distance in class: 40global value in main: 40global value in function 40global value in function 234distance in class: 11

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

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

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

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

  2. js定义全局变量 vue页面_vue.js中如何定义全局变量?

    vue.js中如何定义全局变量?下面本篇文章给大家介绍一下在 Vuejs 项目中如何定义全局变量.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 在 Vuejs 项目中如何定义全局变 ...

  3. c语言头文件可以定义全局变量,C语言在头文件中定义全局变量

    C语言在头文件中定义全局变量 头文件定义全局变量等问题 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量.头文件中不可以直接定 ...

  4. python求和_Python程序查找特殊求和系列的解决方案

    python求和 We are going to design a special sum series function which has following characteristics: 我 ...

  5. python输入程序_python程序的输入输出(acm的几个小程序)

    #!/usr/bin/env python#coding=utf-8 a=[]for x inraw_input().split(): a.append(int(x))print sum(a) 下面的 ...

  6. 程序设计基础python答案_Python程序设计基础免费答案

    (河海大学2007年考研试题)设其一平面流动的流函数为ψ=3x2y-y3,则其流速ux=________,uy=_________ 在渠道管理范围内需改建.扩建.拆除或者损坏原有工程设施的,由后建工程 ...

  7. python缩进在程序中长度统一且强制使用_Python习题纠错1

    February, 1991 0.9.1 2.Python语言的缩进只要统一即可,不一定是4个空格(尽管这是惯例). Python缩进在程序中长度统一且强制使用. 3.IPO:Input Proces ...

  8. type是python保留字_Python保留字总结

    关键字 保留字也称为关键字,指被编程语言内部定义并保留使用的标识符,程序员编写程序时不能定义与保留字相同的标识符.每种程序设计语言都有一套保留字,保留字一般用来构成程序整体框架.表达关键值和具有结构性 ...

  9. php全局变量的关键字,php的static关键字和全局变量

    1.全局变量[其不属于面向对象的思想,因为其放在对象之外的],面向对象有一个特点,其实封装的,php希望其所有的成员都应该放在类中:php的面向对象是基于面向对象的,不是纯粹面向对象的:也就是其可以面 ...

最新文章

  1. 如何在 Linux 上用 Markdown 编写电影剧本
  2. Meta首个元宇宙平台Horizon被吐槽,用户只配有半截身子!
  3. Science Robotics近日刊登CMU重大突破,无需手术,普通人就能用意念操控机械臂!...
  4. java.nio.ByteBuffer中flip、rewind、clear方法的区别
  5. 一、NLTK工具包使用
  6. 利用js种的正则删除html标签
  7. VB 文件常用操作相关API
  8. 第41天:匀速、缓动运动和图片无缝滚动
  9. idc机房安装服务器系统,IDC机房如何部署IP KVM
  10. 轻量级 Visio,绘制程序框图,你值得拥有
  11. react devtools插件报错处理
  12. python mysql library,python调用mysql报错解决方案
  13. sails mysql_sails-mysql架构数据类型
  14. WPF DataGrid 值转换 conver使用
  15. 疯狂的上网本意义何在?
  16. 微信新升级?这2个功能是你们期盼的吗?
  17. Openstack-nova(placement)组件部署流程
  18. 计算机图形剪裁程序说明,计算机图形学实验报告实验2裁剪算法实验
  19. 3、防御迷阵(二分+bfs)
  20. day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器

热门文章

  1. 基于JAVA+SpringMVC+Mybatis+MYSQL的健身管理系统
  2. 存储过程/函数权限的问题解决(The user specified as a definer ('root'@'%') does not exist)...
  3. 吃糖果hdu2502
  4. python爬虫加强版!!!!想爬哪个队伍就爬那个
  5. 2021计算机一级模拟29套,“智慧家”2021年第二十九期每周家庭套餐
  6. pareto解是什么意思_Pareto是什么意思
  7. python grpc 并发_python中grpc的使用示例
  8. Node.js下载安装及各种npm、nvm、nrm配置(保姆式教程---提供全套安装包)---node.js的安装与配置(1)
  9. Python使用socket读取网页源代码实现简单爬虫程序
  10. 会议通知|2019暑期全国高校Python数据分析与实训课程高级研修班