更改全局范围对象

时间:2012-11-04 17:31:36

标签: python python-3.x global-variables

我对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()

所以我误解了具有全球范围的东西可以有人解释我吗??? 谢谢,对不起我的坏英语

1 个答案:

答案 0 :(得分:5)

这是有效的,因为您没有更改引用,而是访问可变对象,并让它自己执行更改。

global需要为全局范围的变量(x = blah)分配新值,但不需要仅访问一个变量。正如您所做的data.pop(cnt)所做的一样是访问变量,您可以在不使用global关键字的情况下执行此操作。

简而言之,它不是关于更改对象的属性,而是关于对象的赋值到变量。