Python的functools.reduce用法

'''

python 3.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.

reduce的用法

reduce(function, sequence[, initial]) -> value

Apply a function of two arguments cumulatively to the items of a sequence,

from left to right, so as to reduce the sequence to a single value.

For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates

((((1+2)+3)+4)+5).  If initial is present, it is placed before the items

of the sequence in the calculation, and serves as a default when the

sequence is empty.

意思就是对sequence连续使用function, 如果不给出initial, 则第一次调用传递sequence的两个元素,

以后把前一次调用的结果和sequence的下一个元素传递给function.

如果给出initial, 则第一次传递initial和sequence的第一个元素给function.

'''

from functools import reduce

ret = reduce(lambda x,y: x+y,[1,2,3,4])

print(ret)#结果是10

ret = reduce(lambda x, y: x+y, [1,2,3], 9)

print(ret)#结果是13



''' 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。 如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?分析:经过月份01 23 4 5 6 7 8 9 10幼崽对数10 1 1 2 3 5成年对数01 1 2 3 5 8兔子对数11 2 3 58#显然兔子对数符合斐波那契数列'''def sum1(num):if num <3:return 1return sum1(num-1)+sum1(num-2)n = int(input('请输入兔子月数:'))print(sum1(n))'''欧几里得算法欧几里得算法又称辗转相除法,用于计算两个整数a,b的最大公约数gcd(a,b)基本算法:设a = qb + r其中 a,b,q,r都是整数,则gcd(a,b) = gcd(b,r),即gcd(a,b)=gcd(b,a%b)证明:a = qb + r如果 r = 0,那么a是b的倍数,此时显然b是a和b的最大公约数。如果 r !=0, 任何整除a和b的数必定整除 a-qb = r,而且同时整除b和r的数必定整除 qb+r = a ,所以a和b的公约集合与b和r的公约数集合是相同的特别的,a和b的最大公约数是相同的'''a = int(input('请输入第一个整数:'))b = int(input('请输入第二个整数:'))r = 0def f(n,m):if n',c)

else:

move(n-1,a,c,b)

move(1,a,b,c)

move(n-1,b,a,c)

print(move(10,'A','B','C'))

'''

def move(n,a,b,c):

if n==1:

print(a,'-->',c)

else:

move(n-1,a,c,b)

move(1,a,b,c)

move(n-1,b,a,c)

print(move(3,'A','B','C'))

你可能感兴趣的:(Python的functools.reduce用法)