# 一边循环一边计算的机制,称为生成器 # g=(x*x for x in range(10)) # print g # print g.next() # for n in g: # print n # 斐波拉切数列 # def fib(max): # n,a,b=0,0,1 # while n<max: # print b # a,b=b,a+b # n=n+1 # 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator # def fib(max): # n,a,b=0,0,1 # while n<max: # yield b # a,b=b,a+b # n=n+1 # o=fib(3) # o.next() # o.next() # o.next() # for n in fib(6): # print n # map map()函数接收两个参数,一个是函数,一个是序列 # def f(x): # return x*x # print map(f,[1,2,3,4,5,6,7]) # reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算 # def add(x,y): # return x+y # print reduce(add,[1,3,5,7,9]) # def fn(x,y): # return x*10+y # def char2num(s): # return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] # print reduce(fn,map(char2num,'2134')) # 用lambda函数进一步简化成 # def char2num(s): # return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] # def str2int(s): # return reduce(lambda x,y: x*10+y, map(char2num, s)) # filter # def is_odd(n): # return n%2==1 # print filter(is_odd,[1,2,3,4,5]) # sorted # print sorted([36, 5, 12, 9, 21]) # 闭包 返回函数不要引用任何循环变量,或者后续会发生变化的变量。 # def lazy_sum(*args): # def sum(): # ax=0 # for n in args: # ax=ax+n # return ax # return sum # f = lazy_sum(1,2,3,4,6) # print f() # def count(): # fs=[] # for i in range(1,4): # def f(j): # def g(): # return j*j # return g # fs.append(f(i)) # return fs # f1,f2,f3=count() # print f1() #执行到return就返回不再执行 # print f2() # print f3() # 函数对象有一个__name__属性,可以拿到函数的名字: # 装饰器 # def log(func): # def wrapper(*args,**kw): # print 'call %s():',func.__name__ # return func(*args,**kw) # return wrapper # 把@log放到now()函数的定义处,相当于执行了语句:now = log(now) # @log # def now(): # print '2015-9-1' # now() # 简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。
python基础练习2
最新推荐文章于 2022-08-01 08:20:41 发布