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 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...