Python:有一个模式的快捷方式[sth = get_sth();如果......:do_a_thing_on(某事)]

时间:2010-10-27 08:08:01

标签: python

嗨!

我想一切都在问题中...... 我只是想知道在Python中是否有一种很好的方法来缩短这种模式:

something = get_something()
if something:
    do_a_thing_with(something)

这意味着我只想在变量if不是None(或False)的情况下进入something上下文,然后在此上下文中自动设置此变量!是否可以使用with声明?

PS:我不想要更多东西定义......我正在寻找一些即时使用的声明?!

3 个答案:

答案 0 :(得分:5)

这就像它的pythonic一样。

事情应该不再简化,也不应该比它们更复杂。

了解with语句的工作原理并提供上下文保护。会很复杂。

答案 1 :(得分:1)

如果它是一个在你的代码中非常频繁的模式(正如你在@ pyfunc的answer的评论中所建议的那样),你可以把它变成一个函数:

def safeProcessData(getData, handleData):
    buffer = getData()
    if buffer:
        handleData(buffer)

在这种情况下,参数getDatahandleData将是callables,意味着任何函数(free或member)和实现__call__的对象。

答案 2 :(得分:1)

正如其他人所说,你现有的代码已经很好而且简短...如果你真的想要一个单行,请尝试列表理解:

[do_a_thing_with(something) for something in [get_something()] if something]