本文阅读的代码实现了计算列表中元素的最小公倍数的功能。本文阅读的代码片段来自30-seconds-of-python(https://github.com/30-seconds...)。lcmfromfunctoolsimportreducefrommathimportgcddeflcm(numbers):returnreduce((lambdax,y:int(x*y/gcd(x,y))),numbers)#EXAMPLESlcm([12,7])#84lcm(复制代码[1,3,4,5])#60两个数的最大公约数和最小公倍数满足以下公式:lcm(a,b)*gcd(a,b)=abs(a*b)andfor2列出以上数据时,只需计算任意两个数的最小公倍数和其余数的最小公倍数即可。即:lcm(a,b,c,...)=lcm(lcm(a,b),c,...)因此我们使用functools.reduce函数遍历列表。functools.reducefunctools.reduce(function,iterable[,initializer])reduce函数中的第一个参数是function函数,接受两个参数。reduce函数累积地将函数应用于可迭代对象上的第二个参数iterable。函数以可迭代对象的前两个值作为输入参数,以可迭代对象的返回值和下一个值作为函数的输入参数进行下一次迭代,直到迭代对象的所有值对象用尽。例如下面的例子:#((((1+2)+3)+4)+5)reduce(lambdax,y:x+y,[1,2,3,4,5])reduce函数大致等同于In:defreduce(function,iterable,initializer=None):it=iter(iterable)ifinitializerisNone:value=next(it)else:value=initializerforelementinit:value=function(value,element)return上面代码片段的实际使用是为了展示一种使用Python的方法。细心的同学可以看出,如果要放到实际的生产应用中,lcm函数存在一些问题,主要有两点,一是异常处理,包括被零除等;另一种是最小公倍数是正整数,函数的返回值可能会出现负数。30-seconds-of-python(https://github.com/30-seconds...)代码主要展示了一种思路。不检查边缘情况和异常,其背后的原因是保持项目简单并展示有趣的技术和思维方式。所有代码片段都假定用户对问题、语言和可能发生的潜在错误有基本的了解,因此没有添加异常处理或参数检查。
