Hunter的大杂烩 技术学习笔记

May 23, 2020

python 函数化编程例子

Filed under: 技术话题 — hunter @ 12:46 am

参考https://www.liaoxuefeng.com/wiki/1016959663602400/1017328525009056

一、map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回,范例:


list_a=[1,3,5,1,2,3]
map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
map(str, [item for item in list_a])   #循环将每个元素转换为字符串
[str(item) for item in list_a]             # 也可以简化成左边格式


二、reduce把结果继续和序列的下一个元素做累积计算,类似reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4),范例:


from functools import reduce

def fn(x, y):
return x * 10 + y
def char2num(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]

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 char2num(s):
return DIGITS[s]
def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))
def prod(L):
def fn(x, y):
return x * y
return reduce(fn, L)
def str2float(s):
def fn(x, y):
return x+y/1000
return reduce( fn, map(float, s.split('.')) )

if prod([3, 5, 7, 9]) == 945:
print('测试成功!')
str2float("123.456")

三、filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素,范例:


def not_empty(s):
return s and s.strip()
list(filter(not_empty, ['A', '', 'B', None, 'C', ' ']))

def is_palindrome(n):
s = str(n)
for i in range(0, int(round(float(len(s))/2))):
if s[i] != s[len(s)-i -1]:
return False
return True
if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]:
print('测试成功!')

v2_detail_array=[{"ps":"CN"}, {"ps":"CN2"}, {"ps":"US"}, ]
[ elm for elm in v2_detail_array if elm['ps'].find('CN')>=0 ]

四、关键字lambda表示匿名函数,冒号前面的x表示函数参数,lambda x: x * x,实际上就是


def f(x):
return x * x

范例:


ip2int = lambda ip_str: reduce(lambda a, b: (a << 8) + b, [int(i) for i in ip_str.split('.')])
ip2int("202.96.134.133")

五、sorted() 函数对所有可迭代的对象进行排序操作, sorted(iterable, cmp=None, key=None, reverse=False),范例


L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
return t[0]
def by_score(t):
return t[1]
L2 = sorted(L, key=by_score)
L2 = sorted(L, key=by_name)
rank_list=[{"sort_value":11, "name":"b"}, {"sort_value":2, "name":"a"}]
sorted(rank_list, key=lambda i: i['sort_value'])

六、其他例子:


sum([item for item in list_a])
dict_a={ "key1": 1, "key2": 2 }
sum([obj for obj in dict_a.values()])

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress