这是我写的代码:
def write_to (a):
for i in range(len(a)):
f.write('{} '.format(a[i]))
f.write('\n')
f = open('temp.txt', 'w')
a = [2, 3, "this is a test"]
write_to(a)
f.close()
我应该定义像write_to(f, a)
这样的函数吗?
但是,当我像下面那样颠倒它时:
def tes():
f = open('temp.txt', 'w')
f.write('This is in function tes()\n')
tes()
f.write('This is after calling the tes() function\n')
出现错误:Name f is not defined.
答案 0 :(得分:0)
您的代码有效,因为f
是全球。此时你可以省略传递a
......
但是如果你把你的代码放在另一个不起作用的函数中:
def test():
f = open('L:/so/temp.txt', 'w')
a = [2, 3, "this is a test"]
write_to(a)
f.close()
现在你得到NameError: name 'f' is not defined
在第二个示例中,您声明了一个本地变量,然后尝试从另一个上下文访问它:这不起作用。局部变量不会传播到全局范围。
无论如何,将初始化代码以外的代码放在模块的顶层(如果导入,代码执行)是个坏主意,所以最常见的用法是创建函数:所以传递参数而不是依赖于某些全局分辨率魔术。