是否可以在我们使用的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
?
答案 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语法不允许在as
,with
或except
构造之外使用“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__()
...