我对python中的全局范围有疑问。
我制作这个剧本并且有效,但我不知道为什么:
#! /bin/python3
# -*- coding: UTF-8 -*-
data = []
stats = {'white':0, }
def main():
global data
with open(args.finput, 'r') as f:
data = f.readlines()
rwhitespaces()
with open(foutput, 'w') as f:
for line in data:
f.write(line)
print(stats)
def rwhitespaces():
cnt = 0
for line in data:
if line == '\n':
data.pop(cnt) # Modifing data var without global keywork and works, why??
stats['fistro'] = 1 # Modifing stats var without global keywork and works why??
cnt += 1
if __name__ == "__main__":
main()
所以我误解了具有全球范围的东西可以有人解释我吗??? 谢谢,对不起我的坏英语
答案 0 :(得分:5)
这是有效的,因为您没有更改引用,而是访问可变对象,并让它自己执行更改。
global
需要为全局范围的变量(x = blah
)分配新值,但不需要仅访问一个变量。正如您所做的data.pop(cnt)
所做的一样是访问变量,您可以在不使用global
关键字的情况下执行此操作。
简而言之,它不是关于更改对象的属性,而是关于对象的赋值到变量。