Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新分配/更改全局变量时的变量范围_Python_Scope - Fatal编程技术网

Python 重新分配/更改全局变量时的变量范围

Python 重新分配/更改全局变量时的变量范围,python,scope,Python,Scope,我在python中遇到了一些行为,我相信这些行为很容易解释,但对我来说仍然很独特。我可以运行一个函数,该函数尝试“更改”全局变量,但由于创建的变量是本地变量,因此没有成功: x = 'n' def make_up(letter): return letter.upper() print x >>> 'n' print make_up(x) >>> 'N' print x >>> 'n' 但是,如果我运行一个函数,修改从全局范围

我在python中遇到了一些行为,我相信这些行为很容易解释,但对我来说仍然很独特。我可以运行一个函数,该函数尝试“更改”全局变量,但由于创建的变量是本地变量,因此没有成功:

x = 'n'

def make_up(letter):
    return letter.upper()


print x
>>> 'n'
print make_up(x)
>>> 'N'
print x
>>> 'n'
但是,如果我运行一个函数,修改从全局范围访问的列表,则全局变量会发生更改:

x = [0,1]

def rem(lst):
   return lst.pop(0)

print x
>>> [0,1]
print rem(x)
>>> 0
print x
>>> [1]

这种行为的解释是什么?换句话说:为什么我可以从全局范围修改一个列表,但是本地修改的字符串在全局范围内保持不变

此处不涉及变量范围。字符串在Python中是不可变的。所以,当你说

letter.upper()
将使用大写字母创建一个新字符串,并返回该字符串。而在第二种情况下,列表是可变的
lst
是对传递的列表的引用,因此
pop
会影响实际列表