【发布时间】:2016-03-22 15:18:42
【问题描述】:
有可能/有没有办法像下面的例子那样遍历一系列运算符?
a, b = 5, 7
for op in (+, -, *, /):
print(a, str(op), b, a op b)
一个可能的用例是在某些抽象数据类型上测试各种运算符的实现,其中这些运算符被重载。
【问题讨论】:
标签: python testing operator-keyword
有可能/有没有办法像下面的例子那样遍历一系列运算符?
a, b = 5, 7
for op in (+, -, *, /):
print(a, str(op), b, a op b)
一个可能的用例是在某些抽象数据类型上测试各种运算符的实现,其中这些运算符被重载。
【问题讨论】:
标签: python testing operator-keyword
您可以使用操作员模块。
for op in [('+', operator.add), ('-', operator.sub), ('*', operator.mul), ('/', operator.div)]:
print("{} {} {} = {}".format(a, op[0], b, op[1](a, b)))
【讨论】:
您可以创建自己的操作,然后对它们进行迭代。
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mult(a, b):
return a * b
def div(a, b):
return a / b
a, b = 5, 7
operations = {'+': add,'-': sub, '*':mult, '/': div}
for op in operations:
print(a, op, b, operations[op](a, b))
【讨论】:
eval,真的很危险。所以不要使用它永远。
试试这个:
a,b=5,7
for op in ['+','-','*','/']:
exec 'print a' + op + 'b'
希望这会有所帮助!
【讨论】:
exec 与eval 几乎相同。