假设您有一个小型计算器程序,它以数字和一个运算符作为输入对这些数字执行操作,然后打印出应用指定运算的结果。因此,如果您输入“4 + 5”,它将打印出“9”。简单吧?好吧,我想写的是这样的:
a, op, b = raw_input().split()
print somehowInvokeOperator(op, a, b)
问题是“somehowInvokeOperator()”部分。有没有办法在不求助于 (a) eval() 或 (b) 某种类型的字典映射键(如“+”和“-”)到执行适当操作的函数的情况下做到这一点? getattr() 似乎不适用于此。我真的不需要这段代码来做任何事情,我只是想看看这是否可以像在其他动态语言中一样优雅地在 Python 中解决。
最佳答案
基本上不需要,您至少需要有一个字典或函数来将运算符字符映射到它们的实现。实际上比这复杂一点,因为并非所有运算符都采用 a [op] b
的形式,所以通常您需要做一些解析;见https://docs.python.org/library/operator.html有关通信的完整列表,以及您可能希望用于运算符实现的函数。
如果您只是想实现像 + - */% ** 这样的二元算术运算符,那么字典就足够了。
关于python - 在 Python 中间接调用内置运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/542987/