Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—是否可以将变量设置为运算符?_Python_Variables_Operation - Fatal编程技术网

Python—是否可以将变量设置为运算符?

Python—是否可以将变量设置为运算符?,python,variables,operation,Python,Variables,Operation,我正在开发一系列具有相同基本结构的函数-它们采用两个列表,并使用循环对两个列表执行特定的操作(例如,一个将列表中的每个元素提升到第二个列表中相应元素所表示的幂) 由于所有这些函数只因一个运算符而不同,我想知道-是否可以将变量设置为运算符?例如,你能做(类似于): 我知道这是行不通的,但是有没有类似的方法可以起到类似的作用呢?试试下面的方法: >>> op = lambda a, b: a + b >>> result = op(5, 7) >>&g

我正在开发一系列具有相同基本结构的函数-它们采用两个列表,并使用循环对两个列表执行特定的操作(例如,一个将列表中的每个元素提升到第二个列表中相应元素所表示的幂)

由于所有这些函数只因一个运算符而不同,我想知道-是否可以将变量设置为运算符?例如,你能做(类似于):

我知道这是行不通的,但是有没有类似的方法可以起到类似的作用呢?

试试下面的方法:

>>> op = lambda a, b: a + b
>>> result = op(5, 7)
>>> result
12

对!!您需要
操作符
模块,该模块“将Python的内部操作符公开为高效函数”

正如@falsetru指出的,lambda也很方便;
operator
中的函数将稍微快一点,不过:

from timeit import timeit
print timeit("add(5, 7)", "add = lambda x, y: x+y")    # about 0.176 OMM
print timeit("add(5, 7)", "from operator import add")  # about 0.136 OMM

@KevinMills,您可以在lambda体中使用一个二进制表达式(
lambda,b:(a+b)*2
)。但是正如@kindall所提到的,如果你只是简单地添加,
operator.add
更简洁,也许更快。这比简单地定义和传递一个子函数好吗?@KevinMills,如果你有多个语句要执行,你必须定义一个函数。如果只有一个表达式,则没有区别。您可以通过
导入dis查看;dis.dis(lambda,b:a+b)
;所以你喜欢用哪一种。看见
import operator

op = operator.add
var = op(5, 7)
from timeit import timeit
print timeit("add(5, 7)", "add = lambda x, y: x+y")    # about 0.176 OMM
print timeit("add(5, 7)", "from operator import add")  # about 0.136 OMM