-
变量可以指向函数
查看全部 -
要实现带参数的@performance,就需要实现:my_func = performance('ms')(my_func)需要3层嵌套的decorator来实现。
import time def performance(unit): def perf_decorator(f): def wrapper(*args, **kw): t1 = time.time() r = f(*args, **kw) t2 = time.time() t = (t2 - t1) * 1000 if unit=='ms' else (t2 - t1) print 'call %s() in %f %s' % (f.__name__, t, unit) return r return wrapper return perf_decorator @performance('ms') def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10)
查看全部 -
__future__(双下划线)
>>> from __future__ import division
>>> print 10 / 3
3.3333333333333335
2.7版本中调用3.x的除法规则
查看全部 -
复杂,回头看
查看全部 -
自定义排序函数:
内置的sorted()函数可对list进行排序
>>>sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。
查看全部 -
得到初始化函数中的关键字变量的方法为:(使用setattr())
for k,v in kw.iteritems():
setattr(self,k,v)
切记!!!!!
查看全部 -
def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r=f(i)
fs.append(r)
return fs
f1, f2, f3 = count()
print f1(),f2(),f3()
查看全部 -
reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:
reduce(f, [1, 3, 5, 7, 9], 100)
查看全部 -
高阶函数map():
接收一个函数f和一个list, 并通过把函数f一次作用在list的每个元素上得到并返回一个新的list
查看全部 -
高阶函数:
把函数作为参数
查看全部 -
函数名是指向函数的变量,可以指向其他函数
查看全部 -
def count():#定义一个计算函数
fs = []#创建一个空的列表
for i in range(1, 4):#循环条件i从1到3
def f():#本来想创建一个闭包的错误函数
return i*i#返回值是i的平方
fs.append(f)#往空列表依次增加刚刚定义的函数
return fs#返回空的列表
f1, f2, f3 = count()#依次把count里面的三个函数赋给f1, f2, f3
print f1(),f2(),f3()#之所以三个函数的返回值均为9,是因为f1()的调用时基于i等于3,故产生了错误的值。
def count():
fs = []
for i in range(1, 4):#以下是正确的闭包
def f(j):#定义函数f(j) j为形参
def g():#定义函数g
return j*j#返回值为j的平方
return g #返回值为函数g
fs.append(f(i))#i每变化一次都往list里面放入一个函数g,且里面的形参至关重要为外函数的i,故每次调用f1()不会因为i已经变为3而出错
return fs
f1, f2, f3 = count()
print f1(),f2(), f3()
另外应该需要注意fs.append(f())与fs.append(f)的区别
查看全部 -
像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。
查看全部 -
map()函数不改变原有的 list,而是返回一个新的 list。
查看全部 -
import functools
sorted_ignore_case = functools.partial(sorted, cmp=lambda s1,s2 : cmp(s1.upper(),s2.upper()))
print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])
查看全部
举报