是否可以在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()
答案 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
那样的黑客攻击。