天天看點

《Python程式設計快速上手——讓繁瑣工作自動化》第三章第3章 函數

第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子句開始處。

3.8 一個小程式:猜數字