第3章 函數
def hello():
print('Howdy!')
print('Howdy!!!')
print('Hello there.')
hello()
3.1 def語句和參數
如果調用print()或len()函數,你會傳入一些值,放在括号之間,在這裡稱為“參數”。也可以自己定義接收參數的函數。
def hello(name):
print('Hello ' + name)
hello('Alice')
hello('Bob')
3.2 傳回值和return語句
用def語句建立函數時,可以用return語句指定應該傳回什麼值。
3.3 None值
None是NoneType資料類型的唯一值(其他程式設計語言可能稱這個值為null、nil或undefined)。就像布爾值True和False一樣,None必須大寫首字母N。
在幕後,對于所有沒有return語句的函數定義,Python都會在末尾加上return None。這類似于while或for循環隐式地以continue語句結尾。而且,如果使用不帶值的return語句(也就是隻有return關鍵字本身),那麼就傳回None。
3.4 關鍵字參數和print()
print('Hello')
print('World')
Hello
World
print('Hello', end='')
print('World')
HelloWorld
>>> print('cats', 'dogs', 'mice')
cats dogs mice
>>> print('cats', 'dogs', 'mice', sep=',')
cats,dogs,mice
3.5 局部和全局作用域
作用域很重要,理由如下:
- 全局作用域中的代碼不能使用任何局部變量;
- 但是,局部作用域可以通路全局變量;
- 一個函數的局部作用域中的代碼,不能使用其他局部作用域中的變量。
- 如果在不同的作用域中,你可以用相同的名字命名不同的變量。也就是說,可以有一個名為spam的局部變量,和一個名為spam的全局變量。
3.6 global語句
如果需要在一個函數内修改全局變量,就使用global語句。如果在函數的頂部有global eggs這樣的代碼,它就告訴Python,“在這個函數中,eggs指的是全局變量,是以不要用這個名字建立一個局部變量。
def spam():
global eggs
eggs = 'spam'
eggs = 'global'
spam()
print(eggs)
有4條法則,來區分一個變量是處于局部作用域還是全局作用域:
1.如果變量在全局作用域中使用(即在所有函數之外),它就總是全局變量。
2.如果在一個函數中,有針對該變量的global語句,它就是全局變量。
3.否則,如果該變量用于函數中的指派語句,它就是局部變量。
4.但是,如果該變量沒有用在指派語句中,它就是全局變量。
在一個函數中,一個變量要麼總是全局變量,要麼總是局部變量。
3.7 異常處理
錯誤可以由try和except語句來處理。那些可能出錯的語句被放在try子句中。如果錯誤發生,程式執行就轉到接下來的except子句開始處。