没有lambda可以实现单行python闭包吗?

时间:2018-06-06 13:54:51

标签: python-3.x closures

是否可以在Python中只在一行中编写以下闭包(例如,可以传递给<subreport> <reportElement x="0" y="10" width="555" height="398" uuid="3f4fc8a1-d7ff-40ae-b8b3-c5685bf0948e"/> <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("documentList")]]></dataSourceExpression> <subreportExpression><![CDATA[$P{SUBREPORT_DIR}+"testsub6.jasper"]]></subreportExpression> </subreport> 的表达式)而不使用lambda?

map()

1 个答案:

答案 0 :(得分:1)

可能(使用exec),但不可取 - 有many disadvantages,包括可读性的丧失:

from operator import add, eq

exec('def sum_equal_to_target(target):\n    def f(pair):\n        return eq(target, add(*pair))\n    return f')

print(list(map(sum_equal_to_target(7), [(1,2),(3,4),(5,6)])))
# [False, True, False]

请注意,lambda函数是Python制作(简单)单行的方法 匿名函数。 AFAICS,要做到这一点没有 lambda需要像exec那样的黑客攻击。