Beginning Python 抽象(未完)

2022-01-19 02:37:25 字數 2694 閱讀 2744

【懶惰即是美德】

抽象意味著良好的可讀性:說明你在努力做什麼,而不是給出你正在如何做的細節。

【抽象和結構】

page =download_page()

freqs =compute_frequencies(page)

for word.freq in

freqs:

print word.freq

【建立函式】

def

hello(name):

return

'hello,

' + name + '

!'

>>> print (hello('

world'))

hello,world!

記錄函式

1、例項:

def

hello(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、為什麼要改變引數?- 抽象化程式的好方式。

可以利用這個特點編寫函式來改變資料結構。

乙個簡單的例子:

def

init(data):

data[

'first

'] ={}

data[

'middle

'] ={}

data[

'last

'] = {}

之後可以利用這個函式來初始化變數的資料結構。如下:

>>> from test import

init

>>> 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):

print

(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中的機器學習啊,圖計算啊,流處理啊,都有具...