函數
Python不但能非常靈活地定義函數,而且本身內置了很多有用的函數,可以直接調用。而函數是我們抽象出來的,藉助抽象,我們才能不關心底層的具體計算過程,而直接在更高的層次上思考問題。寫計算機程序也是一樣,函數就是最基本的一種代碼抽象的方式。
調用函數
要調用一個函數,需要知道函數的名稱和參數,比如求絕對值的函數abs
,只有一個參數。可以直接從Python的官方網站查看文檔:http://docs.python.org/3/library/functions.html#abs。也可以在交互式命令行通過help(abs)
查看abs
函數的幫助信息。調用函數的時候,如果傳入的參數數量不對,會報TypeError
的錯誤,並且Python會明確地告訴你問題出在了哪裏。如果傳入的參數數量是對的,但參數類型不能被函數所接受,也會報TypeError
的錯誤,並且給出錯誤信息:str
是錯誤的參數類型。Python中有很多函數,可以在官方文檔中調閱。另外,Python內置的常用函數還包括數據類型轉換函數,比如int()
函數可以把其他數據類型轉換爲整數。而且,函數名其實就是指向一個函數對象的引用,完全可以把函數名賦給一個變量,相當於給這個函數起了一個“別名”:
>>> a = abs # 變量a指向abs函數
>>> a(-1) # 所以也可以通過a調用abs函數
1
我的作業是利用Python內置的hex()
函數把一個整數轉換成十六進制表示的字符串,交作業如下
a=int(input('請輸入一個整數:'))print('它的十六進制數爲:',hex(a))
運行正確。
可是這個只能運行一次,如何只運行一次就輸出多個十六進制數呢?
while True:
number = input('請輸入數字...');
print(hex(int(number)));
在Python中,定義一個函數要使用def
語句,依次寫出函數名、括號、括號中的參數和冒號:
,然後,在縮進塊中編寫函數體,函數的返回值用return
語句返回。我們以自定義一個求絕對值的my_abs
函數爲例:
def my_abs(x):
if x >= 0:
return x
else:
return -x
注意,函數體內部的語句在執行時,一旦執行到return
時,函數就執行完畢,並將結果返回。因此,函數內部通過條件判斷和循環可以實現非常複雜的邏輯。如果沒有return
語句,函數執行完畢後也會返回結果,只是結果爲None
。return
None
可以簡寫爲return
。在Python交互環境中定義函數時,注意Python會出現...
的提示。函數定義結束後需要按兩次回車重新回到>>>
提示符下。
如果把my_abs()
的函數定義保存爲abstest.py
文件了,那麼,可以在該文件的當前目錄下啓動Python解釋器,用from
abstest import my_abs
來導入my_abs()
函數,注意abstest
是文件名(不含.py
擴展名)
空函數
空函數什麼事也不做,想定義它,可以使用pass語句。
def nop():
pass
實際上pass
可以用來作爲佔位符,比如現在還沒想好怎麼寫函數的代碼,就可以先放一個pass
,讓代碼能跑起來。
pass
還可以用在其他語句裏,比如:
if age >= 18:
pass
缺少了pass
,代碼運行就會有語法錯誤。