Python中global关键字的变量创建与修改机制详解
本文详细讲解Python中global关键字的用法,包括如何在函数内创建全局变量以及如何正确修改全局变量。通过对比错误示范与正确代码,深入剖析int、string、list和dict在有无global声明时的行为差异,帮助开发者避免常见的变量作用域陷阱。
global关键字允许在函数内部创建全局变量,其效果等同于在文件顶层直接定义全局变量。
当尝试在函数内直接对全局变量进行赋值或修改时,Python默认会将其视为创建一个新的局部变量,从而导致无法修改原有的全局变量。
不过,可以通过索引方式定位并修改全局变量中的元素,这种方式无需使用global关键字即可生效。
代码示例
global 变量1, 变量2, … 变量1 = 赋值数据 # 错误示范 期望修改的全局变量1 = 数据 # python 认为创建了一个局部变量:变量1。 # 正确示范 global 期望修改的全局变量1 # 先告诉 python 这个变量在这个局部也是当做全局变量看。 期望修改的全局变量1 = 数据
内容扩展:
在Python中,对于int、string、list以及dict(map)类型的全局变量,如果使用了global关键字声明,就可以直接修改其值。无论global声明是否位于if语句中,也不管该if语句是否被执行,只要执行到global声明,后续对该变量的赋值操作就会作用于全局变量。
然而,如果没有使用global关键字声明,
if bGlobal:
global g_strVal;
对于int和string类型,直接赋值会引发错误;而对于list和dict(map)类型,通过索引或方法修改元素则是允许的。
#!/usr/bin/dev python
import sys
import os
g_nVal = 0;
g_strVal = "aaaa";
g_map = {
"aaa" : "111",
"bbb" : "222",
"ccc" : "333",
"ddd" : "444"
}
g_ls = ['a', 'b', 'c']
def FixInt(bGlobal = False):
if bGlobal:
global g_nVal;
g_nVal = g_nVal + 1;
def FixString(bGlobal = False):
if bGlobal:
global g_strVal;
#fix string value
g_strVal = g_strVal + 'b';
def FixMap(bGlobal = False):
if bGlobal:
global g_map;
#fix map value
g_map['aaa'] = 'aaa__' + g_strVal;
g_map['bbb'] = 'bbb__' + g_strVal;
g_map['ccc'] = 'ccc__' + g_strVal;
g_map['ddd'] = 'ddd__' + g_strVal;
def FixList(bGlobal = False):
if bGlobal:
global g_ls;
g_ls.append('1');
def PrintVal(strInfo):
if strInfo:
print("==== %s =====" %strInfo);
print("int value:%d" %g_nVal);
print("string value:%s" %g_strVal);
print("map value:%s" %g_map);
print("list value:%s" %g_ls);
print("\n\n");
if "__main__" == __name__:
PrintVal("The orgin vlaue");
FixInt();
FixString();
FixMap();
FixList();
PrintVal("print all bGlobal = False vlaue");
FixInt(True);
FixString(True);
FixMap(True);
FixList(True);
PrintVal("print all bGlobal = True vlaue");
运行结果:
==== The orgin vlaue =====
int value:0
string value:aaaa
map value:{'aaa': '111', 'bbb': '222', 'ccc': '333', 'ddd': '444'}
list value:['a', 'b', 'c']
g_nVal src:0
g_nVal dst:1
==== print all bGlobal = False value =====
int value:1
string value:aaaab
map value:{'aaa': 'aaa__aaaab', 'bbb': 'bbb__aaaab', 'ccc': 'ccc__aaaab', 'ddd': 'ddd__aaaab'}
list value:['a', 'b', 'c', '1']
g_nVal src:1
g_nVal dst:2
==== print all bGlobal = True value =====
int value:2
string value:aaaabb
map value:{'aaa': 'aaa__aaaabb', 'bbb': 'bbb__aaaabb', 'ccc': 'ccc__aaaabb', 'ddd': 'ddd__aaaabb'}
list value:['a', 'b', 'c', '1', '1']
到此这篇关于python global的创建和修改实例讲解的文章就介绍到这了,更多相关python global的创建和修改内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













