具有如果不是。。as语句一行python

具有如果不是。。as语句一行python,python,Python,所以我遇到了一个问题。。我试图打开一个文本文件,并根据变量的值逐行正常或反向读取它。Python不断抛出一个AttributeError:\uuuu enter\uuu错误;但我只是想看看这是否可能 示例代码: def function(rev): # - open file in reverse format - open file normally with reversed(list(open("test.txt")))

所以我遇到了一个问题。。我试图打开一个文本文件,并根据变量的值逐行正常或反向读取它。Python不断抛出一个
AttributeError:\uuuu enter\uuu
错误;但我只是想看看这是否可能

示例代码:

def function(rev):
    #    - open file in reverse format                        - open file normally
    with reversed(list(open("test.txt"))) if rev == True else open("test.txt") as dict:
        for line in dict:
            print (line)
            pass
        pass
    pass

function(True)
结果:

    ...
    with reversed(list(open("test.txt"))) if rev == True else open("test.txt") as dict:
AttributeError: __enter__

我如何做到这一点而不必为这两种可能性创建一个标准的if语句&为同一过程创建两个不同的as循环?

Python中的上下文管理器正在进行一些疯狂的业务。尝试使用一个简单的for语句,而使用常规的for循环

read_option.py 如果您确实想要一个带有语句的
,您可能需要在自己的类中实现
\uuuuu\uuuuu
方法。有关更多详细信息,请参阅此答案:

示例test.txt 输出
Python中的上下文管理器正在进行一些疯狂的业务。尝试使用一个简单的for语句,而使用常规的for循环

read_option.py 如果您确实想要一个带有
语句的
,您可能需要在自己的类中实现
\uuuuu\uuuuu
方法。有关更多详细信息,请参阅此答案:

示例test.txt 输出
不要在
with
语句中这样做,表达式将生成两个不同的对象(列表或文件对象,列表没有上下文管理器接口,文件对象有,这就是产生错误的原因)

只需分成两行,首先打开:

def function(rev):
    with open("test.txt") as fp:
        data = reversed(list(fp)) if rev == True else fp:
        for line in data:
            print(line)
function(True)

不要在
with
语句中这样做,表达式将生成两个不同的对象(列表或文件对象,列表没有上下文管理器接口,文件对象有,这就是产生错误的原因)

只需分成两行,首先打开:

def function(rev):
    with open("test.txt") as fp:
        data = reversed(list(fp)) if rev == True else fp:
        for line in data:
            print(line)
function(True)

列表没有上下文管理器接口,不能在带有
块的
中使用。同样在Python中,可读性比写一行程序更重要。我不明白你想做什么。为什么要在没有标准if语句的情况下执行此操作?如果你只说
如果rev==True
,然后反过来读,那就更干净了。否则,不要。与此答案类似,但有一个if语句:因为有很多代码使用
变量,不管它的顺序如何。只需在脚本中复制/粘贴和创建更多行即可。列表没有上下文管理器界面,不能在带有
块中使用。同样在Python中,可读性比写一行程序更重要。我不明白你想做什么。为什么要在没有标准if语句的情况下执行此操作?如果你只说
如果rev==True
,然后反过来读,那就更干净了。否则,不要。与此答案类似,但有一个if语句:因为有很多代码使用
变量,不管它的顺序如何。只需在脚本中复制/粘贴和创建更多行即可。这是第一个答案的一个很好的替代方案,而不是在一行中包含多行内容,而不是包含我需要的内容。谢谢:)这是第一个答案的一个很好的替代方案,它不是包含我需要的多行内容,而是在一行中完成。谢谢:)
(py36) [~]$ python3 read_option.py
ijlk

efgh

abcd
def function(rev):
    with open("test.txt") as fp:
        data = reversed(list(fp)) if rev == True else fp:
        for line in data:
            print(line)
function(True)