python上下文mngr打开文件

python上下文mngr打开文件,python,Python,我在看一个文件,咬着行尾。我有这个密码 def strip_line(read_me=file_opened_for_reading): return (line.strip('\n') for line in read_me) with open('readme.txt', 'r') as file_opened_for_reading: stripped_lines = strip_line() [line for line in stripped_lines]

我在看一个文件,咬着行尾。我有这个密码

def strip_line(read_me=file_opened_for_reading):
    return (line.strip('\n') for line in read_me)

with open('readme.txt', 'r') as file_opened_for_reading:
    stripped_lines = strip_line()
    [line for line in stripped_lines]
这不起作用,因为文件未打开

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in strip_line
ValueError: I/O operation on closed file

为了读取而打开的文件需要传递到strip行,这是有道理的,但我希望“read\u me”的默认设置会解决这个问题。我在使用这个关键字位时哪里出了问题?

默认参数
file\u opened\u用于读取
是在第一次遇到
def strip\u line
(并且只有一次!)时定义的,这是在您读取实际文件之前,因此
strip\u line
永远不会“看到”您打开的文件(因此出现错误)

默认参数不应是可变的,请参阅或

编辑: 您可以将
read\u me='readme.txt'
定义为默认参数,并在函数
strip\u行
中打开文件

with open('readme.txt', 'r') as file_opened_for_reading:
    lines = strip_line(file_opened_for_reading)
    [line for line in lines]