summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhang <zch921005@126.com>2020-02-23 13:49:12 +0800
committerzhang <zch921005@126.com>2020-02-23 13:49:12 +0800
commit920e07a6a7fe9c7982083900f08fbf4b23d2e66a (patch)
tree75a0020db90efde890218584f9e931a712b6667a
parent6cd95662a9f96438159b6b5245096f0e4d04c44a (diff)
可变参数,延迟板顶,yield 关键字与python 函数式闭包编程
-rw-r--r--learning_python/__init__.py0
-rw-r--r--learning_python/late_binding.py23
-rw-r--r--learning_python/mutable_params.py13
-rw-r--r--learning_python/yield_demo.py19
4 files changed, 55 insertions, 0 deletions
diff --git a/learning_python/__init__.py b/learning_python/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/learning_python/__init__.py
diff --git a/learning_python/late_binding.py b/learning_python/late_binding.py
new file mode 100644
index 0000000..775a6d7
--- /dev/null
+++ b/learning_python/late_binding.py
@@ -0,0 +1,23 @@
+
+def create_multipliers():
+ return [lambda x : i * x for i in range(5)]
+
+
+def create_multipliers_explicit():
+ return [lambda x, i=i: i * x for i in range(5)]
+
+
+def create_multipliers_yield():
+ for i in range(5):
+ yield lambda x: i*x
+
+
+for multiplier in create_multipliers():
+ print(multiplier.__closure__[0].cell_contents, multiplier(2))
+
+for multiplier in create_multipliers_explicit():
+ print(multiplier.__closure__, multiplier(2))
+
+for multiplier in create_multipliers_yield():
+ print(multiplier.__closure__[0].cell_contents, multiplier(2))
+
diff --git a/learning_python/mutable_params.py b/learning_python/mutable_params.py
new file mode 100644
index 0000000..6e2fdce
--- /dev/null
+++ b/learning_python/mutable_params.py
@@ -0,0 +1,13 @@
+
+def append_to(element, to=[]):
+ to.append(element)
+ return to
+
+
+if __name__ == '__main__':
+
+ my_list = append_to(12)
+ print(my_list, append_to)
+
+ my_other_list = append_to(42)
+ print(my_other_list, append_to)
diff --git a/learning_python/yield_demo.py b/learning_python/yield_demo.py
new file mode 100644
index 0000000..46480c3
--- /dev/null
+++ b/learning_python/yield_demo.py
@@ -0,0 +1,19 @@
+
+
+def generator():
+ for i in range(10):
+ yield i
+ print(i)
+
+
+def fun():
+ for i in range(10):
+ print(i)
+ print(i)
+
+
+if __name__ == '__main__':
+
+ # for i in generator():
+ # print(i)
+ fun()