【懶惰即是美德】
抽象意味著良好的可讀性:說明你在努力做什麼,而不是給出你正在如何做的細節。
【抽象和結構】
page =download_page()freqs =compute_frequencies(page)
for word.freq in
freqs:
print word.freq
【建立函式】
defhello(name):
return
'hello,
' + name + '
!'
>>> print (hello('world'))
hello,world!
記錄函式
1、例項:
defhello(name):
'this is a hello world program!
'return
'hello,
' + name + '
!'
訪問方式1:內建的help函式。
>>>help(hello)help on function hello
inmodule test:
hello(name)
this
is a hello world program!
訪問方式2:用hello._doc_訪問失敗。
>>>hello._doc_traceback (most recent call last):
file
"", line 1, in
attributeerror:
'function
' object has no attribute '
_doc_
'
已解決:doc兩邊的下劃線有兩個!!!即__doc__
並非真正函式的函式=返回none的函式
【parameter magic(引數魔法)】
值從**來?
我能改變引數嗎(指改變實參)? - 在函式內為引數賦予新值不會改變任何外部變數的值,將可變的資料結構比如列表作為引數時實際是傳遞引用!
1、為什麼要改變引數?- 抽象化程式的好方式。
可以利用這個特點編寫函式來改變資料結構。
乙個簡單的例子:
definit(data):
data[
'first
'] ={}
data[
'middle
'] ={}
data[
'last
'] = {}
之後可以利用這個函式來初始化變數的資料結構。如下:
>>> from test importinit
>>> lovepython ={}
>>> lovepython #
變數原始結構
{}>>>init(lovepython)
>>> lovepython #
通過函式改變後的結構
, 'last
': {}, '
middle
': {}}
2、如果我的引數不可變呢?- 考慮傳入陣列。
關鍵字引數和預設引數
1、之前所用的引數都叫做「位置引數」,因為它們的位置很重要——甚至比它們的名字還要重要!
2、程式規模越大,關鍵字引數和預設引數的作用越大!
3、例如在下面的程式中,能辨別出誰是誰嗎?
hi(1, 2, 4, 5)
但是如果使用關鍵字引數,就一目了然。(當然只是舉例)
hi(name=1, age=2, city=4, born=5)
4、關鍵字引數更厲害地方在於可以給函式提供預設值。
5、混用位置引數和關鍵字引數的注意點:位置引數一定要放在前面!(盡量避免出現混用的情況)
收集引數
def f(k, *params);星號的意思就是「收集其餘的位置引數,放進乙個元組中(在這裡這個元組叫做params)」。
但是有個問題是*params並不能收集關鍵字引數,那麼如何收集關鍵字引數呢?答案是使用**params將關鍵字引數收集成字典:
def f(*collec_pospar, **collec_keypar):(collec_pospar)
print(collec_keypar)
>>> f(1, 2, 3, a=1, b=2, c=3)(1, 2, 3)
反轉過程
這個標題指的是「將引數收集為tuple和dict」的逆過程,也就是將dict和tuple分解成關鍵字引數和單個的引數。
例如,假設params = (1, 2, 4):
在作為函式引數的時候*params的結果是1, 2, 4
對於dict也是同樣的道理,只不過前置符號改為**罷了。
練習使用引數
【作用域】
【遞迴】
【小結】
未執行問題
在專案中需要在主頁面上呼叫另外乙個 塊,由action 生成。最開始使用結果,直接報錯 shopping cart.action is not a page.後面改用,沒有報錯,html也顯示出來了。問題是action對應的方法沒被執行。得到的資料全是空的。在action的方法中加了斷點除錯的時候,...
oninstack fileinfo未配置未安裝
由於php開啟fileinfo php引數 enable fileinfo 需要大量系統資源才能編譯通過,考慮到小記憶體機器,因此預設oneinstack fileinfo不支援,需額外再安裝 2016 06 19之後安裝oneinstack 執行.addons.sh 選擇4 安裝fileinfo即...
13 抽象類 抽象字段 抽象方法
抽象類在scala中很重要。spark中的rdd是抽象的,可以有很多具體實現的rdd。eg 運算元據庫的rdd,jdbc的rdd,hadoop的rdd 雖然scala中也有介面trait,但物件導向的面向介面程式設計中,絕大多數用的是抽象類。eg spark中的機器學習啊,圖計算啊,流處理啊,都有具...