Python的sum()函数返回迭代中的数字总和.
sum([3,4,5]) == 3 + 4 + 5 == 12
我正在寻找返回产品的功能.
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
我很确定这样的功能存在,但我找不到它.
是否有更简洁,高效或简单的pythonic方式来执行以下操作?
def product(list):
    p = 1
    for i in list:
        p *= i
    return p
编辑:
我实际上发现这比使用operator.mul要快一些:
from operator import mul
# from functools import reduce # python3 compatibility
def with_lambda(list):
    reduce(lambda x, y: x * y, list)
def without_lambda(list):
    reduce(mul, list)
def forloop(list):
    r = 1
    for x in list:
        r *= x
    return r
import timeit
a = range(50)
b = range(1,50)#no zero
t = timeit.Timer("with_lambda(a)", "from __main__ import with_lambda,a")
print("with lambda:", t.timeit())
t = timeit.Timer("without_lambda(a)", "from __main__ …我正在使用以下课程轻松存储我的歌曲数据.
class Song:
    """The class to store the details of each song"""
    attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
    def __init__(self):
        for att in self.attsToStore:
            exec 'self.%s=None'%(att.lower()) in locals()
    def setDetail(self, key, val):
        if key in self.attsToStore:
            exec 'self.%s=val'%(key.lower()) in locals()
我觉得这比写出一个if/else块更具可扩展性.但是,eval似乎被认为是一种不良做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?