定义一个只包含 with 语句一部分的函数

Defining a function that includes only part of a with statement

我正在尝试定义一个函数,以便它只包含 with 语句的一部分。例如,它将包括被 ##### 截断的部分。

#####

with open(filename,'r') as fh:

    contentall = fh.read().replace('\n', '')

    contentall = contentall.upper()

    print contentall

#####

    i = contentall.count(">")

    print i

我的问题是 with 语句中仍有一些我不想在我的函数中使用的内容。这可以在不创建两个不同的 with 语句的情况下完成吗?

没有。您可以将上下文管理器作为参数传递给第二个函数,但不能在两个函数定义之间共享上下文管理器。

你能不能不这样做

def getContent(filename):
    with open(filename,'r') as fh:
        contentall = fh.read().replace('\n', '')
        contentall = contentall.upper()
    return contentall

contentall = getContent(filename)
print contentall
i = contentall.count(">")
print i

您可以使用变量来启用或禁用计数行为:

def contentFunc(filename, countBool):
    with open(filename, 'r') as fh:
        contentall = fh.read().replace('\n',' ').upper()
        print contentall
        if countBool == True:
            print contentall.count(">")