1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<code>一、内置函數</code>
<code>zip</code><code>函數: </code><code>zip</code><code>()是Python的一個内建函數,它接受一系列可疊代的對象作為參數,将對象中對應的</code>
<code>元素按順序組合成一個</code><code>tuple</code><code>,每個</code><code>tuple</code><code>中包含的是原有序列中對應序号位置的元素,然後傳回由</code>
<code>這些tuples組成的</code><code>list</code><code>。若傳入參數的長度不等,則傳回</code><code>list</code><code>的長度和參數中長度最短的對象相同。</code>
<code>在所有參數長度相同的情況下,</code><code>zip</code><code>()與</code><code>map</code><code>()類似,沒有參數的情況下</code><code>zip</code><code>()傳回一個空</code><code>list</code>
<code>例子:</code>
<code>l1 </code><code>=</code> <code>[</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>,</code><code>4</code><code>]</code>
<code>l2 </code><code>=</code> <code>[</code><code>'a'</code><code>,</code><code>'b'</code><code>,</code><code>'c'</code><code>,</code><code>'d'</code><code>]</code>
<code>for</code> <code>i </code><code>in</code> <code>zip</code><code>(l1,l2):</code>
<code> </code><code>print</code><code>(i)</code>
<code>傳回結果:[(</code><code>1</code><code>,</code><code>'a'</code><code>),(</code><code>2</code><code>,</code><code>'b'</code><code>),(</code><code>3</code><code>,</code><code>'c'</code><code>),(</code><code>4</code><code>,</code><code>'d'</code><code>)]</code>
<code>filter</code><code>函數: </code><code>filter</code><code>函數是 Python 内置的另一個有用的高階函數,</code><code>filter</code><code>()函數接收一個函數</code>
<code>f和一個</code><code>list</code><code>,這個函數 f 的作用是對每個元素進行判斷,傳回 </code><code>True</code><code>或 </code><code>False</code><code>,</code><code>filter</code><code>()</code>
<code>根據判斷結果自動過濾掉不符合條件的元素,傳回由符合條件元素組成的新</code><code>list</code><code>.</code>
<code>def</code> <code>add(n):</code><code>return</code> <code>n </code><code>/</code> <code>2</code> <code>=</code><code>=</code> <code>1</code>
<code>for</code> <code>i </code><code>in</code> <code>filter</code><code>(add, [</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>,</code><code>4</code><code>]):</code>
<code> </code><code>print</code><code>(i) </code><code>#列印2</code>
<code> </code>
<code>map</code><code>函數: </code><code>map</code><code>()是 Python 内置的高階函數,它接收一個函數 f 和一個 </code><code>list</code><code>,并通過把函數f依次</code>
<code>作用在 </code><code>list</code> <code>的每個元素上,得到一個新的 </code><code>list</code> <code>并傳回。</code>
<code>l </code><code>=</code> <code>[</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>,</code><code>4</code><code>]</code>
<code>def</code> <code>add(x):</code>
<code> </code><code>return</code> <code>x</code><code>+</code><code>1</code>
<code>for</code> <code>i </code><code>in</code> <code>map</code><code>(add,l):</code>
<code>reduce</code><code>函數: </code><code>reduce</code><code>()函數接收的參數和 </code><code>map</code><code>()類似,一個函數 f,一個</code><code>list</code><code>,但行為和 </code><code>map</code><code>()不同,</code>
<code>reduce</code><code>()傳入的函數 f 必須接收兩個參數,</code><code>reduce</code><code>()對</code><code>list</code><code>的每個元素反複調用函數f,</code>
<code>并傳回最終結果值</code>
<code>from</code> <code>functools </code><code>import</code> <code>reduce</code>
<code>l </code><code>=</code> <code>[</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>,</code><code>4</code><code>,</code><code>5</code><code>]</code>
<code>print</code><code>(</code><code>reduce</code><code>(</code><code>lambda</code> <code>x,y: x</code><code>+</code><code>y, l, </code><code>10</code><code>)) </code><code>#參數10是可選參數,作為初始值</code>
<code> </code>
<code>二、匿名函數</code><code>lambda</code>
<code> </code><code>1.lambda</code><code>隻是一個表達式,函數體比</code><code>def</code><code>簡單很多。</code>
<code> </code><code>2.lambda</code><code>的主體是一個表達式,而不是一個代碼塊。僅僅能在</code><code>lambda</code><code>表達式中封裝有限的邏輯進去。</code>
<code> </code><code>3.lambda</code><code>表達式是起到一個函數速寫的作用。允許在代碼内嵌入一個函數的定義。</code>
<code> </code><code>例子:</code>
<code> </code><code>f </code><code>=</code> <code>lambda</code> <code>x,y: x</code><code>+</code><code>y </code><code>#x,y是參數,x+y是表達式,然後指派給f</code>
<code> </code><code>print</code><code>(f) </code><code>#傳回f的記憶體位址</code>
<code> </code><code>print</code><code>(f(</code><code>1</code><code>,</code><code>2</code><code>)) </code><code>#傳回表達式的值</code>
<code> </code><code>l </code><code>=</code> <code>[</code><code>'alex'</code><code>, </code><code>'wupeiqi'</code><code>, </code><code>'yuanhao'</code><code>]</code>
<code> </code><code>res </code><code>=</code> <code>map</code><code>(</code><code>lambda</code> <code>x: x </code><code>+</code> <code>'_SB'</code><code>, l)</code>
<code> </code><code>print</code><code>(res)</code>
<code> </code><code>print</code><code>(</code><code>list</code><code>(res))</code>
<code> </code><code>nums </code><code>=</code> <code>[</code><code>2</code><code>,</code><code>4</code><code>,</code><code>6</code><code>,</code><code>9</code><code>]</code>
<code> </code><code>res1 </code><code>=</code> <code>map</code><code>(</code><code>lambda</code> <code>x: x</code><code>*</code><code>*</code><code>2</code><code>, nums)</code>
<code> </code><code>print</code><code>(</code><code>list</code><code>(res1))</code>
<code>三、遞歸調用</code>
<code> </code><code>在函數調用過程中,直接或間接調用函數本身,這就是函數的遞歸調用</code>
<code> </code><code>def</code> <code>age(n):</code>
<code> </code><code>if</code> <code>n </code><code>=</code><code>=</code> <code>1</code><code>:</code>
<code> </code><code>return</code> <code>18</code>
<code> </code><code>return</code> <code>age(n</code><code>-</code><code>1</code><code>) </code><code>+</code> <code>2</code>
<code> </code><code>print</code><code>(age(</code><code>5</code><code>))</code>
<code> </code><code>l </code><code>=</code> <code>[</code><code>1</code><code>, </code><code>2</code><code>, </code><code>10</code><code>,</code><code>33</code><code>,</code><code>53</code><code>,</code><code>71</code><code>,</code><code>73</code><code>,</code><code>75</code><code>,</code><code>77</code><code>,</code><code>85</code><code>,</code><code>101</code><code>,</code><code>201</code><code>,</code><code>202</code><code>,</code><code>999</code><code>,</code><code>11111</code><code>]</code>
<code> </code><code>def</code> <code>search(find_num,seq):</code>
<code> </code><code>if</code> <code>len</code><code>(seq) </code><code>=</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>'not exists'</code><code>)</code>
<code> </code><code>return</code>
<code> </code><code>mid_index</code><code>=</code><code>len</code><code>(seq)</code><code>/</code><code>/</code><code>2</code>
<code> </code><code>mid_num</code><code>=</code><code>seq[mid_index]</code>
<code> </code><code>print</code><code>(seq,mid_num)</code>
<code> </code><code>if</code> <code>find_num > mid_num:</code>
<code> </code><code>#in the right</code>
<code> </code><code>seq</code><code>=</code><code>seq[mid_index</code><code>+</code><code>1</code><code>:]</code>
<code> </code><code>search(find_num,seq)</code>
<code> </code><code>elif</code> <code>find_num < mid_num:</code>
<code> </code><code>#in the left</code>
<code> </code><code>seq</code><code>=</code><code>seq[:mid_index]</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>'find it'</code><code>)</code>
<code> </code><code>search(</code><code>77</code><code>,l)</code>
<code>四、包、子產品</code>
<code> </code><code>import</code> <code>spam</code>
<code> </code><code>import</code> <code>導入子產品做三件事</code>
<code> </code><code>1.</code><code>産生新的名稱空間</code>
<code> </code><code>2.</code><code>以建立的名稱空間為全局名稱空間,執行檔案代碼</code>
<code> </code><code>3.</code><code>拿到一個子產品名spam,指向spam.py産生的名稱空間</code>
<code> </code><code>import</code> <code>spam as x </code><code>#将spam用x代替,适合子產品名過長時使用</code>
<code> </code><code>from</code> <code>... </code><code>import</code> <code>...</code>
<code> </code><code>優點: 友善、不用加字首</code>
<code> </code><code>缺點: 容易跟目前的檔案名稱沖突</code>
<code> </code><code>包: 将有聯系的子產品組織到一起,有效避免子產品名稱沖突問題,讓組織結構更加清晰。</code>
<code> </code><code>一個标準的應用程式結構:</code>
<code> </code><code>app</code><code>/</code>
<code> </code><code>__init__.py </code><code>#__init__.py做一些初始化工作可以是空檔案,也可以寫一些初始配置</code>
<code> </code><code>a</code><code>/</code>
<code> </code><code>__init__.py</code>
<code> </code><code>a.py</code>
<code> </code><code>b</code><code>/</code>
<code> </code><code>b.py</code>
<code> </code><code>from</code> <code>app.a </code><code>import</code> <code>a</code>
<code> </code><code>from</code> <code>app.b.b </code><code>import</code> <code>test </code><code># "."左邊必須是包名</code>
<code> </code><code>a.test() </code>
<code> </code><code>test()</code>
<code> </code>
<code> </code><code>可以将包加入sys.path環境變量的位置,或者把包所在的位置加入到環境變量</code>
本文轉自小白的希望 51CTO部落格,原文連結:http://blog.51cto.com/haoyonghui/1930999,如需轉載請自行聯系原作者