相关疑难解决方法(0)

eval,exec和compile之间有什么区别?

我一直在寻找的Python代码动态评估,并遇到了eval()compile()功能,以及exec声明.

有人可以解释之间的区别evalexec怎样的不同模式,compile()适应吗?

python eval dynamic exec

403
推荐指数
3
解决办法
19万
查看次数

python 中匿名函数的配方?

我正在寻找允许在 python 中内联定义函数或多行 lambda 的最佳食谱。

例如,我想执行以下操作:

def callfunc(func):
   func("Hello")

>>> callfunc(define('x', '''
...     print x, "World!"
... '''))
Hello World!
Run Code Online (Sandbox Code Playgroud)

define我在这个答案中找到了该函数的示例:

def define(arglist, body):
    g = {}
    exec("def anonfunc({0}):\n{1}".format(
        arglist,
        "\n".join("    {0}".format(line) for line in body.splitlines())), g)
    return g["anonfunc"]
Run Code Online (Sandbox Code Playgroud)

这是一种可能的解决方案,但并不理想。理想的功能是:

  • 更聪明地处理缩进,
  • anonfunc更好地隐藏内部结构(例如,在函数范围内没有)
  • 提供对周围范围/捕获中的变量的访问
  • 更好的错误处理

以及一些我没有想到的事情。我有一个非常好的实现,完成了上述大部分内容,但不幸的是我失败了。我想知道是否有其他人做过类似的东西。

免责声明:

我很清楚这在 Python 用户中是有争议的,并且被认为是 hack 或 unpythonic。我还知道 python-dev 邮件列表上有关多行 lambda 的讨论,并且故意省略了类似的功能。然而,从同样的讨论中我了解到许多其他人也对这样的功能感兴趣。

我不是在问这是否是一个好主意,而是:既然有人决定实施这个,(要么出于乐趣和好奇,要么出于疯狂,真正认为这是一个好主意,要么被枪指着)如何使匿名define工作尽可能接近def使用Python(2.7或3.x)当前的设施?

例子:

更详细地解释一下为什么,这对于 GUI 中的回调来说非常方便:

# gtk example:
self.ntimes = 0
button.connect('clicked', …
Run Code Online (Sandbox Code Playgroud)

python anonymous-function

6
推荐指数
1
解决办法
1780
查看次数

标签 统计

python ×2

anonymous-function ×1

dynamic ×1

eval ×1

exec ×1