Pytho基礎 第三章

2021-10-06 23:34:36 字數 3687 閱讀 3179

3.1.1 def語句和引數:

在呼叫print()或 len()等函式時,會傳入一些值放於括號中間,在此稱為引數。也可以自行定義接收引數的函式。

def

hello

(name)

:print

('hello + name'

)hello(

'yang'

)

在此函式定義中,name為乙個「變元」,即可以存放引數以及賦值。值得注意的是,儲存在「變元」中的值,在函式返回以後就丟失了。(類似程式結束後,內部的變數會丟棄。)

3.1.2 返回值與return語句:

若呼叫len()函式,並向它傳入』hello』這樣的引數,函式呼叫求值為5。一般來說,函式呼叫求值的結果稱為函式的「返回值」。

return語句包含以下部分:

1.return關鍵字;

2.函式應返回的值或表示式;

若return中使用了表示式,那麼返回的值即為表示式求值的結果。

3.1.3 none值:

none是 nonetype 資料型別的唯一值,首字母必須大寫。

由於print()函式沒有返回值,是簡單的輸出函式,故print()返回none。

關鍵字引數和print()

關鍵字引數是由函式呼叫時加在它們前面的關鍵字來識別的,關鍵字引數通常用於可選變元。

3.1.4 區域性和全域性作用域

在被呼叫函式內賦值的變元和變數,處於該函式的「區域性作用域」。在所有函式以外賦值的變數,屬於「全域性作用域」。

乙個函式被呼叫時,就建立了乙個區域性域,該函式返回值時,區域性作用域就丟失了。

作用域注意點:

1.全域性作用域中的**不能使用任何區域性變數;

2.區域性作用域可以訪問全域性變數;

3.乙個函式的區域性作用域中的**,不能使用其他區域性作用域中的變數。

4.如果在不同的作用域中,可以用相同的名字命名不同變數,即spam可作為區域性變數和整體變數。

注意:

1.區域性變數不能在全域性作用域中使用;

2.區域性作用域不能使用其他區域性變數;

3.全域性變數可在區域性作用域中使用;

4.名稱相同的區域性變數和全域性變數(示例)

def

spam()

: eggs =

"spam local"

print

(eggs)

defbacon()

: eggs =

"bacon local"

print

(eggs)

spam(

)print

(eggs)

eggs =

"global"

bacon(

)print

(eggs)

執行結果如下:

bacon local

spam local

bacon local

global

3.1.5 global語句

如果乙個函式需要在全域性對變數進行修改,那麼就要使用global語句,例如global eggs,就是指eggs為全域性變數。

若要區分乙個變數是否為全域性變數,有三條法則:

1.若變數在全域性作用域中使用,那就是全域性變數;

2.若有global語句,那就是全域性變數;

3.若該變數用於函式中賦值語句,則為區域性變數;

3.1.6 異常處理

對於乙個函式,需要確定的即為輸入值與輸出值,錯誤可由try(可能出錯的)與except函式(處理錯誤)進行處理。

def

spam

(divideby)

:try

:return

42/divideby

except zerodivisionerror:

print

('error:invalid argument'

)

輸出如下:

21.0

3.5error:invalid argument

none

注:try語句中,所有發生的錯誤都會**捉,將spam放於語句塊中:

def

spam

(divideby)

:return

42/divideby

try:

print

(spam(2)

)print

(spam(12)

)print

(spam(0)

)print

(spam(1)

)except zerodivisionerror:

print

('error:invalid argument.'

)

執行結果:

21.0

3.5error:invalid argument.

其中print(spam(1))未被執行,是因為一旦執行跳到except子句的**,就不會回到try語句,會繼續照常向下執行。

2、函式中的**何時執行: 在函式被定義時,還是在函式被呼叫時?

答:函式中的**在函式被呼叫時執行,而不是在函式定義時。

3、什麼語句建立乙個函式?

答:def語句定義了(建立了)乙個函式。

4、乙個函式和一次函式呼叫有什麼區別?

答:函式包含def語句和在def子句中的**。函式呼叫讓程式執行轉到函式內,函式呼叫求值為該函式的返回值。

5、python程式中有多少全域性作用域?有多少區域性作用域?

答:在呼叫乙個函式時,建立了乙個全域性函式和乙個區域性作用域。

6、當函式呼叫返回時,區域性作用域中的變數發生了什麼?

答:函式返回時,區域性作用域被銷毀,其中所有的變數都被遺忘了。

7、什麼是返回值?返回值可以作為表示式的一部分嗎?

答:返回值時函式呼叫求值的結果。像所有值一樣,返回值可以作為表示式的一部分。

8、如果函式沒有返回語句,對它呼叫的返回值是什麼?

答:如果函式沒有return語句,它的返回值就是none。

9、如何強制函式中的乙個變數指的是全域性變數?

答:global語句強制函式中的乙個變數引用該全域性變數。

10、none的資料型別是什麼?

答: none的資料型別是none type。

11、import areallyourpetsnamederic語句做了什麼?

答:import語句匯入了areallyourpetsnamederic模組(順便說一句,這不是乙個真正的python模組)。

12、如果在名為spam的模組中,有乙個名為bacon()的函式,在引入span後,如何呼叫它?

答:該函式可以通過spam.bacon()呼叫。

13、如何防止程式在遇到錯誤時崩潰?

答:將可能導致錯誤的**行放在乙個try子句中。

14、try子句中發生了什麼?except子句中發生了什麼?

答:可能導致錯誤的**放在try子句中。發生錯誤時,要執行的**放在except子句中。

第三章 語言基礎

它是操作符,不是函式,所以不需要引數 也可以使用引數 let message x console.log typeof message string 以下是乙個特殊情況 console.log typeof null object 因為null被認為是乙個對空物件的引用。0.這個型別只有乙個值 un...

第三章 網頁基礎篇

建立乙個顯示當前日期和時間的網頁。這是乙個不錯的 動態 網頁範例,因為該頁面的內容不是靜態的。相反,其內容是隨著計算 本例中是對當前時間的計算 的結果而變化的。這個簡單的範例既不涉及資料庫,也不需要任何使用者輸入,僅輸出伺服器的內部時鐘。實現 1 描述 urlconf 就像是 django 所支撐 ...

第三章 堆疊

1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...