在同一个py脚本中,定义在所有函数之外的变量可以理解为全局变量,因为所有函数可以直接访问函数外的变量(但不能访问其他函数的私有变量),这里涉及到变量的作用域,一般分为函数作用域和全局作用域,函数作用域包含在全局作用域中,子作用域可以访问全局作用域的变量,全局作用域不能访问子作用域的变量。

(一)定义和访问

python全局变量定义在函数外部,在全局包括函数内作用域都可以访问。

public_str = 'a'
def show():# 打印结果aprint(public_str)
show()
# 打印结果a
print(public_str)

(二)修改

全局变量的修改需要在修改前使用global声明该变量为全局变量,如果不使用global声明则python认为该变量为新定义的函数内局部变量。如果函数中既有访问又有修改,那么global声明应该在访问之前。

public_str = 'a'
def show():global public_str# 打印结果aprint(public_str)public_str = 'b'
show()
# 打印结果b
print(public_str)

结论:引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明。列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。

二、跨模块全局变量

跨模块全局变量不局限于单个py脚本使用,在python程序中所有运行的模块函数都可以访问和修改。python单个py脚本可以理解为一个模块,在py脚本中可以import加载使用多个模块,并且使用其中的函数功能。通过import加载的模块如果需要共用一个变量,那么就需要定义跨模块全局变量。

python中一个脚本多次import同一个模块,模块中的数据共用。例如a import b,cb import c,a作为主程序加载b模块c模块,b模块中再加载c模块,因为都由主程序开始加载因此内存资源是共用的,a和b中的c我们可以理解为同一个c。因此我们在python如果需要使用跨模块全局变量,可以在单独模块中进行定义,然后在需要的模块中import加载即可访问及修改。

下面演示在公共模块config中定义变量public_val,在main模块和app模块使用和修改:

1.config.py

public_val = 888

2.main.py

import config, appprint(f'main config.public_val:{config.public_val}')
app.hello('world')def show():print(f'show config.public_val:{config.public_val}')
show()

2.app.py

import configdef hello(name):print(f'app.hello {name}')print(f'app.hello config.public_val:{config.public_val}')# 修改config模块中public_val变量config.public_val = 999

输出结果:

main config.public_val:888
app.hello world
app.hello config.public_val:888
show config.public_val:999

config.py为变量定义的模块,在main.pyapp.py中加载config.py访问其中的public_val变量。

Python全局变量跨模块变量定义和使用相关推荐

  1. python全局变量(模块法和global)

    python全局变量(模块法和global) python中全局变量使用,一般有两种方法,使用global和使用模块 global 在python中,可以使用global声明一个变量为全局变量 1. ...

  2. 关于python中的模块的定义、使用、优点及其使用cpy文件的介绍 简单易懂

    一 模块的定义及其使用规范 首先pycharm中每一个以.py结尾的python文件都是一个模块,并且模块就相当于一个工具包,当我们想使用这个工具包内的工具的时候,必须要用到import关键字来导入, ...

  3. python如何跨模块调用变量_Python跨模块用户定义的全局变量:在其他模块运行时调用它们的问题...

    我对Python相当陌生,目前正在学习如何在Python程序中使用函数和多个模块.在 我有两个模块"Functions_Practice_Main"(运行菜单)和"Fun ...

  4. python全局变量 | 跨文件模块使用的一种实现方法

    使用一个模块来专门管理全局变量,其他模块再通过导入该模块来间接对全局变量进行操作. 为了避免造成全局变量的赋值混乱,对于每一个全局变量,可以有多个模块读取该全局变量,但尽量只有一个模块用来对其进行赋值 ...

  5. python中模块是什么意思_Python中的模块是什么?3分钟搞懂Python中的模块问题

    Python 中的模块是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,模块让你能够有逻辑地组织你的 Python 代码段.把相关的代码分配到一个模块里能 ...

  6. python全局变量定义_Python 3 实现定义跨模块的全局变量和使用

    尽管某些书籍上总是说避免使用全局变量,但是在实际的需求不断变化中,往往定义一个全局变量是最可靠的方法,但是又必须要避免变量名覆盖. Python 中 global 关键字可以定义一个变量为全局变量,但 ...

  7. [Python学习] 专题六.局部变量、全局变量global、导入模块变量

    定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域.本文主要讲述全局变量.局部变量和导入模块变量的方法.         参考:<Python核心编程 (第二版)> 一 ...

  8. python 全局变量使用报错没有定义_Python变量作用域代码解析

    本篇文章小编给大家分享一下Python变量作用域代码解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 特点 python的作用域是静态的,在源代码中 ...

  9. python定义全局变量 跨文件使用

    参考:https://www.cnblogs.com/syw20170419/p/10872318.html 借鉴global 关键字的思路,既然在一个文件里面可以生效的话,那么我们就专门为全局变量定 ...

最新文章

  1. Linux初学(Linux命令行的使用)
  2. TypeScript基本数据类型
  3. 谁说格力不做手机了?格力折叠屏手机了解一下
  4. 易安卓与jaVa_E4A变量 · E4A易安卓中文开发教程-E4A社区 · 看云
  5. C++中menset用法
  6. yii2 提供接口给java_Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)...
  7. 配置centOS下的Python
  8. C语言 · 进制转换
  9. zhang 快速并行细化方法_Zhang快速并行细化算法.docx
  10. 使用yum安装java
  11. BTC公钥生成地址的过程详解
  12. Rar5.20 key
  13. 面试题目:2个鸡蛋100层楼问题
  14. border之border-style用法
  15. php 提取图片的特征,让机器“看见”:图像数据的特征提取方法
  16. 数字孪生概念股四方伟业抢滩IPO 依赖华为拓客应收账款暴增成隐忧
  17. 2021星巴克月饼全新上市;万豪旗下源宿品牌入驻中国东南区;现代汽车承诺到2045年实现碳中和 | 美通社头条...
  18. 如何在BPA600添加新的协议
  19. SpaceSniffer--你的专属文件嗅探器
  20. app性能测试:(一)启动时间

热门文章

  1. 游戏开发——向着目标出发
  2. Python中进程与线程的(详细)教程之进程
  3. 获巴菲特腾讯加持,拉美信用卡大王Nubank 凭啥值400亿美元?
  4. 用html些在线印章代码,懒人代码,常用网页代码全集
  5. gcc指定头文件搜索路径及动态链接库搜索路径
  6. 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0
  7. JavaScript递归函数详解:如何使用递归及简单的递归案例
  8. 银河麒麟操作系统安装Mono开发环境操作步骤
  9. java多线程复习与巩固(四)
  10. FZU 2230 翻翻棋 (找规律 水题)