Home  >  Article  >  Backend Development  >  Modification of the value of global variables under the global statement in Python

Modification of the value of global variables under the global statement in Python

高洛峰
高洛峰Original
2017-03-02 11:13:351782browse

Python's global variables: int string, list, dic(map) If global exists, its value can be modified. It doesn't matter whether the global exists in the if, or whether the if can be executed.

However, if there is no

if bGlobal: 
    global g_strVal;

int string, an error will be reported. And list dic(map) is ok.

#!/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");

Result:

==== 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']

Why modify the global The global keyword is not used for dict variables.
This is because,
In the sentence s = 'bar', it is "ambiguous" because it can either refer to the global variable s or create a new local variable, so In python, its default behavior is to create local variables, unless global is explicitly declared.

In the sentence d['b']=2, it is "clear" because if d is regarded as local If it is a variable, it will report KeyError, so it can only refer to the global d, so there is no need to explicitly declare global.

The above two assignment statements are actually different behaviors. One is rebinding and the other is mutation.

But if it is like the following


s = 'foo' 
d = {'a':1} 
def f(): 
  s = 'bar' 
  d['b'] = 2 
f() 
print s 
print d



In the sentence d = {}, it is "ambiguous", so it creates a local variable d instead of referencing the global variable d, so d['b']=2 is also a local variable of the operation .

By extension, the essence of all these phenomena is "whether it is clear or not."

If you think about it carefully, you will find that not only dict does not need global, but all "explicit" things do not need global. Because the int type and str type have only one modification method, that is, x = y. This modification method is also a method of creating variables, so ambiguity arises, and I don’t know whether to modify or create. As for dict/list/objects, etc., they can be modified through dict['x']=y or list.append(). It does not conflict with creating variables and does not create ambiguity, so there is no need to explicitly global.

#For more articles related to modifying the value of global variables under the global statement in Python, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn