我可以在if语句中使用“as”机制吗?

时间:2013-11-17 20:19:31

标签: python if-statement

是否可以在我们使用的as if语句中使用with,例如:

with open("/tmp/foo", "r") as ofile:
    # do_something_with_ofile

这是我的代码:

def my_list(rtrn_lst=True):
    if rtrn_lst:
        return [12, 14, 15]
    return []

if my_list():
      print(my_list()[2] * mylist()[0] / mylist()[1])

我可以在此类型中使用if

if my_list() as lst:
     print(lst[2] * lst[0] / lst[1])

在第一次if中,我四次致电my_list。我可以使用变量,但我想知道有没有办法使用as

3 个答案:

答案 0 :(得分:4)

没有。 if语句定义为:

if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]

...其中test是一组测试表达式与or和and。

结合使用

有关详细信息,请参阅:http://docs.python.org/3.3/reference/grammar.html

您可以先定义变量,然后测试其值:

lst = my_list()
if lst:
     print(lst[2] * lst[0] / lst[1])

如果你想要一些挑战(仅限于过期的东西),你可以改变Python语法,玩得开心:http://www.python.org/dev/peps/pep-0306/

答案 1 :(得分:1)

没有。 Python语法不允许在aswithexcept构造之外使用“import”。你应该这样做:

lst = my_list()
if lst:
     print(lst[2] * lst[0] / lst[1])

答案 2 :(得分:1)

您需要使用变量。 with支持as - 变量,因为分配给它的对象是评估with - 表达式的结果。 (这是该结果的__enter__方法返回的值,请参阅http://docs.python.org/release/2.5/whatsnew/pep-352.html。对于(大多数)其他语句,在变量中捕获表达式很容易。即,with expr as v是(部分)相当于:

_context = expr
v = _context.__enter__()
...