From 3df5ac19585ea68eaeb8019e363d10d73602289a Mon Sep 17 00:00:00 2001 From: xianhu Date: Thu, 3 Nov 2016 00:25:35 +0800 Subject: [PATCH] add python_functional --- README.md | 2 ++ python_functional.py | 74 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 python_functional.py diff --git a/README.md b/README.md index af1c0ff..f92b045 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ ### python_oneline.py: 几个小例子告诉你, 一行Python代码能干哪些事 ### python_requests.py: Python中最好用的爬虫库Requests代码实例 + +### python_functional.py: Python进阶: 函数式编程实例(附代码) ============================================================ ### 您可以fork该项目,并在修改后提交Pull request diff --git a/python_functional.py b/python_functional.py new file mode 100644 index 0000000..17fcef0 --- /dev/null +++ b/python_functional.py @@ -0,0 +1,74 @@ +# _*_ coding: utf-8 _*_ + +from fn import _ +from operator import add +from functools import partial, reduce + +# 列表解析 +a_list = [item**2 for item in range(5)] +print(a_list) + +# 字典解析 +a_dict = {"%d^2" % item: item**2 for item in range(5)} +print(a_dict) + +# 生成器 +a_generator = (item**2 for item in range(5)) +print(a_generator) +print(next(a_generator)) +print(next(a_generator)) + +# iter函数和next函数 +a_list_generator = iter(a_list) +print(next(a_list_generator)) +print(next(a_list_generator)) +print(type(a_list), type(a_list_generator)) + +# lambda表达式 +a_func = lambda x, y: x**y +print(a_func(2, 3)) + +# map函数 +print(map(abs, range(-4, 5))) +print(list(map(abs, range(-4, 5)))) +print(list(map(lambda x: x**2, range(5)))) +print(list(map(lambda x, y: x**y, range(1, 5), range(1, 5)))) + +# reduce函数 +print(reduce(lambda x, y: x+y, range(10))) +print(reduce(lambda x, y: x+y, range(10), 100)) +print(reduce(lambda x, y: x+y, [[1, 2], [3, 4]], [0])) + +# filter函数 +print(filter(None, range(-4, 5))) +print(list(filter(None, range(-4, 5)))) +print(list(filter(lambda x: x > 0, range(-4, 5)))) + +# all、any函数 +print(all([0, 1, 2])) +print(any([0, 1, 2])) + +# enumerate函数 +for index, item in enumerate(range(5)): + print("%d: %d" % (index, item)) + +# zip函数 +for a, b in zip([1, 2, 3], ["a", "b", "c"]): + print(a, b) +a_dict = dict(zip([1, 2, 3], ["a", "b", "c"])) +print(a_dict) + +# partial函数 +print(int("10010", base=2)) +int_base_2 = partial(int, base=2) +print(int_base_2("10010")) + +# operator.add函数 +print(reduce(lambda x, y: x+y, range(10))) +print(reduce(add, range(10))) + +# fn的使用 +add_func_1 = (_ + 2) +print(add_func_1(1)) +add_func_2 = (_ + _ * _) +print(add_func_2(1, 2, 3))