【问题标题】:Repr and Eval functions in Python? [duplicate]Python中的Repr和Eval函数? [复制]
【发布时间】:2014-01-20 03:21:38
【问题描述】:

在说明任何内容之前,我已经阅读了有关 thisthis 的信息。但我仍然不清楚evalrepr 实际使用/应用到哪里? 现实生活中的应用

【问题讨论】:

  • eval 可在您想在软件中创建安全漏洞的任何时候使用
  • 那么,它是不是像负面测试?
  • @wim nice one :) user1162512 你可以阅读这个posteval()
  • 虽然这确实是一个很好的问题,但 evalrepr 在这个网站上已经解释了很多很多次了,这个问题有很多重复,让我头晕目眩。下次请自行搜索了解repr的网站。我真的不明白你为什么问这个问题。
  • @InbarRose - 你有没有看到我已经提供了与相同的 SO 相关的最佳线程(我读过很多),但我并没有真正看到任何一个的实际应用。其次,您标记为重复的问题,我的问题与它完全不同。

标签: python


【解决方案1】:

repr 一直在后台使用,例如每次格式化容器时,大多数时候在打印内容时等等。

>>> class A:
...     def __repr__(self):
...             print('calling repr')
...             return('<object of class A>')
... 
>>> print(A())
calling repr
<object of class A>
>>> a = [A() for _ in range (3)]
>>> '{}'.format(a)
calling repr
calling repr
calling repr

eval...我不知道。我什至认为那些声称有必要的人可能是错的。

【讨论】:

  • eval 没有必要单独使用,因为它可以很容易地被其他函数替换。加载任意 Python 代码的能力(这是eval 的所有问题的根源,并且由可用于重新实现eval 的函数共享),但是,必要的有时。
  • @delnan 对于这些情况,我个人更喜欢import__import__ 而不是eval。我不知道,也许这只是我对eval和它的兄弟们长久以来的宠爱。
  • 没有进一步的限定,这确实看起来像是一种非理性的恐惧症。我会把__import__ 算作兄弟,它本质上是exec 结合find_module_pathopen。如果您有一个字符串,并将其转储到一个文件中以便您可以动态地导入它,那么您并没有获得任何东西(但是通过将文件 I/O 添加到您的元编程中增加了复杂性)。当然,如果你只是想动态加载一个已经在文件中的模块,那么导入机制就是正确的选择。
猜你喜欢
  • 2021-05-19
  • 2014-09-13
  • 2013-10-20
  • 2014-04-24
  • 2021-02-12
  • 2019-10-26
  • 2018-04-10
  • 2017-12-14
相关资源
最近更新 更多