##map-reduce
#
print('-----map/reduce----')
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(r))
print(list(map(str, [1, 2, 3, 4, 5, 6, 7])))
from functools import reduce
def add(x, y):
return x + y
r = reduce(add, [1, 3, 5, 7, 9])
print(r)
def fn(x, y):
return x * 10 + y
print(reduce(fn, [1, 3, 5, 7, 9]))
def char2num(i):
digits = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
return digits[i]
def fn(x, y):
return x * 10 + y
print('map-reduce:', reduce(fn, map(char2num, '13579')))
DIGITS = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(i):
return DIGITS[i]
return reduce(fn, map(char2num, s))
print('str2int:', str2int('13579'))
##lambda
#我还不会写/🙂/
##练习
def normalize(name):
return name[:1].upper()+name[1:].lower()
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)
##filter
print('-----filter-----')
def is_odd(n):
return n % 2 == 1
print(list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
def not_empty(s):
return s and s.strip()
print(list(filter(not_empty, ['A', '', 'B', None, 'C', ' '])))
#构造一个从3开始的奇数系列
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
#筛选函数 返回的是一个函数 x % 5 > 0
def _not_divisible(n):
return lambda x: x % n > 0
#生成器,不断返回下一个素数
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it)
yield n
it = filter(_not_divisible(n), it)
for n in primes():
if n < 20:
print(n)
else:
break
##回数练习
def is_palindrome(n):
s = str(n)
for i in range(0, len(s)//2):
if(s[i] != s[len(s) - i - 1]):
return False
return True
print(list(filter(is_palindrome, range(1, 1000))))
##sorted
#
print('---sorted---')
print(sorted([36, 5, -12, 9, -21]))
print(sorted([36, 5, -12, 9, -21], key = abs))
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key = str.lower))
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key = str.lower, reverse = True))
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(l):
return l[1]
def by_name(l):
return l[0].lower()
print(sorted(L, key=by_score, reverse=True))
print(sorted(L, key=by_name))
chapter6 高阶函数
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 函数式编程与面向对象编程[1]: Lambda表达式 函数柯里化 高阶函数.md 之剑 2016.5.2 11:1...
- 在函数式编程中,允许采用变量保存函数,也可以将函数作为参数值或者返回值。因此,必然存在一种函数,它以另一个函数作为...
- 构造一层又一层的抽象来处理(并隐藏)琐碎的细节。随着硬件能力的提高,将越来越多的任务转嫁给语言和运行时。 函数式思...