python global

如果想在函数内部改变函数外的变量值,用global语句完成:

在不传该变量值入函数的情况下要改变它的值:

>>> a = 3
>>> def f():
...     global a
...     a = a-1
...
>>> f()
>>> a
2

如果不声明global将会报错未找到:

>>> a = 3
>>> def f():
...     a = a-1
...
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
UnboundLocalError: local variable 'a' referenced before assignment

如果是将该变量传参进入函数时,则该变量不变:

>>> def f(a):
...     a = a-1
...
>>> f(a)
>>> a
3
>>> def f(a):
...     a = a-1
...     return a
...
>>> f(a)
2
>>> a
3

注意,这仅当a为数的时候,当a为list,set,dict,等可切片的时,不用声明global也会改变。

a为tuple或str时也不会改变(注意因为tuple/str对象的不支持对其中单个元素/字符赋值如:a[0] = "0" #对字符串a第一个元素改变为“0”会报错)

>>> a = (1,2,3,4)
>>> a[2] = 1 # 不可对单个改变
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> def f(a):
...     a = (3,4)
...     print(a)
...
>>> f(a)
(3, 4)
>>> a
(1, 2, 3, 4)

#####################################

>>> a = "asd"
>>> def f(a):
...     a = a + "00"
...     print(a)
...
>>> f(a)
asd00
>>> a
'asd'
>>> a[0] = "0" # 不可对单个改变
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

对于list,set,dict,涉及到切片等操作时,则会改变:

>>> a = [1,2,3,4]
>>> def f(a):
...     a[-1] = "0"
...     print(a)
...
>>> f(a)
[1, 2, 3, '0']
>>> a
[1, 2, 3, '0']
##################上面切片下面未切片
>>> a = [1,2,3,4]>>> def f(a):
...     a = [3,4]
...     print(a)
...
>>> f(a)
[3, 4]
>>> a
[1, 2, 3, 4]
#######################
>>> a = [1,2,3,4]
>>> def f(a):
...     a.append(0)
...     print(a)
...
>>> f(a)
[1, 2, 3, 4, 0]
>>> a
[1, 2, 3, 4, 0]
原文地址:https://www.cnblogs.com/cymwill/p/8592780.html