python Note higher-order functions

来源:互联网 发布:程序员怎么面试 编辑:程序博客网 时间:2024/06/08 04:47
def not_empty(s):    return s and s.strip()list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))# 结果: ['A', 'B', 'C']

eval()

可以将string转成list,tuple,dict

a = "[1,2,3]"b = eval(a)print(type(b))
<class 'list'>

注意 repr() 输出对 Python比较友好,而str()的输出对用户比较友好
repr()绝大多数情况下可以通过求值运算(使用内建函数eval())重新得到该对象。

例子:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
m = map(str,L)n = sorted(m,key=str.upper)for i in n:    print(i)

注意

str.upper()          # 把所有字符中的小写字母转换成大写字母str.lower()          # 把所有字符中的大写字母转换成小写字母str.capitalize()     # 把第一个字母转化为大写字母,其余小写str.title()          # 把每个单词的第一个字母转化为大写,其余小写 

或者 倒序:

def by_name(l):    return l[0]res = sorted(L,key=by_name,reverse=True)for i in res:    print(i)

闭包

用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。

偏函数

创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数

*args 用来[解包list]将参数打包成tuple给函数体调用
**kw 打包关键字参数成dict给函数体调用

functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单

import functoolsint2 = functools.partial(int,base=2)print(int2('1111'))15

kw = { ‘base’: 2 }
int(‘1111’, **kw)

当传入:

max2 = functools.partial(max, 10)
实际上会把10作为*args的一部分自动加到左边,也就是:

max2(5, 6, 7)
相当于:

args = (10, 5, 6, 7)
max(*args)
结果为10。

列表生成器

除filter 还可以

L1 = ['Hello', 'World', 18, 'Apple', None]L2 = [m for m in L1 if isinstance(m,str)]