用python做些事:高效做事的函数
stevezhou 2015.11.08
#------命名规则------
类名:单词首字母大写
函数名:首个单词字母小写,其后单词首字母大写
变量名:以'_'连接各单词
常量:单词字母全部大写
#--------------------
基本语法
变量作用域
参数
*arg #一个元组,元素为未命名的单个变量的
**kargs #一个字典,包含命名的参数,以变量名为Key值
举例:
def test(a,*args,**kargs):
print a,args,kargs
调用:test(1,2,3,4,name='bobo',age=28,city='shanghai')
输出 :1 (2, 3, 4) {'city': 'shanghai', 'age': 28, 'name': 'bobo'}
调用:test(1,2,name='bobo',age=28,3,4)
输出:SyntaxError: non-keyword arg after keyword arg
#要注意实参顺序要对应形参的顺序
求一个数的平方根
二分法的例子
牛顿法的例子
函数式编程——函数做参数
高阶函数 #形参中用函数作参数
自带高阶函数
filter # filter(str.isdigit,'csv1987zb34'), 结果为:198734; filter(str.isalpha,'csv1987zb34'),结果为 'csvzb'
map # map(<function object>,<list>),如 map(f,[1,2,3,4]),将列表中的元素都通过函数f处理一次
reduce #递归归纳
#multiprocessing的用法(很简单好用,多进程任务)
# Github----- wordsworth项目,统计词频
函数式编程——lambda
#返回的是一个函数
举例:
lst=[x for x in range(-50,50)]
zs=filter(lambda x:x>0,lst)
c=sorted(lst,cam=lambda x,y:x-y)
lst.sort(lambda x,y:1 if x>y else -1) #sort要改变列表本身,sorted不改变列表本身
回调Callback
#函数作为参数
----------
def test(callback):
print 'test func begin'
callback()
print 'test func end'
def cb1():
print 'callback 1'
def cb2():
print 'callback2'
test(cb1)
test(cb2)
----------
闭包
#绑定外部变量的函数
特征:
1、嵌套函数
2、内部函数使用外部函数变量(通常是外部函数的参数)
3、外部函数返回内部函数
注意:
1、内部函数不能‘改变’外部变量 (即内部函数不产生新的,与外部变量同名的变量)
2、内部函数用到了外部变量为list,则可以能从外部或内部改变值,并且即使外部没有引用也不会回收
装饰器
无嵌套装饰器 #会存在三个问题
两层嵌套装饰器
三层嵌套装饰器
:装饰模式
递归
函数自己调用自己
:快速排序算法的实现
生成器和yield
Iterable,Iterator,Generator
迭代器库:itertools
itertools.permutations(<列表>)
itertools.product(<列表1>,<列表2>)
itertools.repeat(<列表1>,<次数>)
itertools.chain
#人机井字棋的实现