1

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

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

4

1 回答 1

5

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

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

简而言之,这不是改变对象的属性,而是将对象分配给变量。

于 2012-11-04T17:32:42.070 回答