假设您有一个小型计算器程序,它接受数字和操作员对这些数字作为输入执行,然后打印出应用指定操作的结果.因此,如果您输入"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.
如果您只是尝试实现像+ - */%**这样的二进制算术运算符,那么字典应该足够好了.