将文件传递给函数

时间:2017-09-15 14:24:08

标签: python-3.x

这是我写的代码:

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.

1 个答案:

答案 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

在第二个示例中,您声明了一个本地变量,然后尝试从另一个上下文访问它:这不起作用。局部变量不会传播到全局范围。

无论如何,将初始化代码以外的代码放在模块的顶层(如果导入,代码执行)是个坏主意,所以最常见的用法是创建函数:所以传递参数而不是依赖于某些全局分辨率魔术。