当前位置: 首页 > news >正文

python基础 - global关键字及全局变量的用法

在C语言中,由于变量一定是先声明,后使用,所以我们可以清楚的知道,现在使用的变量是全局还是局部,比如:

int a = 5;
 
void test(void)
{
    a = 1; // 没有先声明,所以用的是全局的变量a
}
 
void test1(void)
{
    int a;
    a = 2; // 前面声明了,所以用的是局部变量a,对其所做的修改不会影响全局变量a
}
 
void main(void)
{
    printf("before: a = %d\n", a);
    test();
    printf("after test: a = %d\n", a);
    test1();
    printf("after test1: a = %d\n", a);
}

在python中,变量不需要先声明,直接使用即可,那我们怎么知道用的是局部变量还是全局变量呢?

首先:python使用的变量,在默认情况下一定是用局部变量

其次:python如果想使用作用域之外的全局变量,则需要加global前缀

举例说明,不用global的情况:

a = 5 
def test():
    a = 1
    print 'In test func: a = %d' % a
test()
print 'Global a = %d' % a

程序执行结果为:

In test func: a = 1

Global a = 5

可以看出,不加global的时候,在函数内部是改不了外面的全局变量的(list类型例外)

下面是使用global前缀的情况:

a = 5
 
def test():
    global a
 #此处声明,告诉执行引擎:我要用全局变量a,不要整成局部的了!
    a = 1
    print 'In test func: a = %d' % a
 
test()
print 'Global a = %d' % a

执行结果:

In test func: a = 1
Global a = 1

可以看出,在函数内部成功的修改了全局变量的数值。

事实上,网络上很多文章推崇另外的一种方法来使用全局变量:使用单独的global文件

方法如下:

1. 在同一个文件夹下,新建2个文件: myglobal.py和test.py

2.  myglobal.py中放置全局变量,内容示例如下:

a = 0
b = 1
c = 2
d = 3

3. test.py中是测试代码,其中可以使用全局变量

import myglobal
 
def test():
    myglobal.a = 100
 
print 'myglobal a = %d' % myglobal.a
test()
print 'after test, myglobal a = %d' % myglobal.a

执行test.py的结果如下:

myglobal a = 0
after test, myglobal a = 100

OK,同样成功修改了全局变量(这个说法不准确,但姑且就这么叫吧)。

在实际使用中,两种方法各有优势,通常我们大多数时候只是用python写小功能的脚本,此时用global关键字就够了。

如果写比较大的功能应用时,用后一种方法可以使得 全局变量的管理更为方便。

相关文章:

  • 斜杠‘/‘ 和反斜杠‘\‘
  • 转义字符详解
  • USB的VID、PID、PVN及分类(Class,SubClass,Protocol)
  • Windows下开发HID设备主机程序
  • Windows与自定义USB HID设备通信说明
  • usb server
  • window api 文件操作之CreateFile、ReadFile和WriteFile
  • 服务器硬件基础知识
  • XPath详解
  • XML详解
  • 串口是什么
  • USB接口
  • ch340是什么芯片
  • 最大路径长度限制
  • 启动配置数据(BCD)存储
  • 【comparator, comparable】小总结
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • CAP 一致性协议及应用解析
  • extract-text-webpack-plugin用法
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js中的正则表达式入门
  • Service Worker
  • SQLServer之索引简介
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 百度小程序遇到的问题
  • 从伪并行的 Python 多线程说起
  • 前端面试题总结
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 数论-逆元
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (03)光刻——半导体电路的绘制
  • (2)Java 简介
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (南京观海微电子)——COF介绍
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)创业的注意事项
  • (转载)深入super,看Python如何解决钻石继承难题
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bashrc在哪里,alias妙用
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NetCore 如何动态路由
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /3GB和/USERVA开关
  • [20180129]bash显示path环境变量.txt
  • [ACM] hdu 1201 18岁生日
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [android]-如何在向服务器发送request时附加已保存的cookie数据