一,自定義函數
Python有自帶的函數,而自己定義新的函數也是可以的。
函數定義要指定這個新函數的名字,還需要一系列語句放到這個函數里面,當調用這個函數的時候,就會運行這些語句了。
>>> def print_new():
... print('I am ok')
... print('I am very fine')
... #交互模式必須要多敲一行空格,Python才知道賦值結束。
>>>
這里的def就是一個關鍵詞,意思是這是在定義一個函數。
函數的名字就是print_new,函數的命名規則和變量命名規則基本差不多,都是字幕梳子或者下划線,但是不能用數字打頭。另外也不能用關鍵詞做函數名,還要注意盡量避免函數名和變量名發生重復。
函數名后面的括號是空的,意思是這個函數不需要參數。
語法:函數定義的第一行叫做頭部,剩下的叫做函數體。函數頭部的末尾必須有一個冒號,函數體必須是相對函數頭部有縮進的,
距離行首相對於函數頭要有四個空格的距離,留意上面的示例中print前面是有空格的。函數體可以有任意長度的語句。注意:縮進是Python最強制的要求,這個很重要。
在打印語句中,要打印的字符串需要用雙引號或單引號括着。單引號和雙引號效果一樣,除非是字符串中已經出現了單引號,一般都用單引號。
定義函數會創建一個函數類的對象,有type函數。
>>> type(print_new)
<class 'function'>
調用新函數的語法和調用內置函數是一樣的,直接打印函數名:
>>> print_new()
I am ok
I am very fine
一旦定義了一個函數,就可以在其它函數里面來調用這個函數,比如我們寫個repeat_new的函數來測試一下。
>>> def repeat_new():
... print_new()
...
>>> repeat_new() #調用
I am ok
I am very fine
二,定義並使用
整合一下前面的小塊代碼:
>>> def print_new():
... print('I am ok')
... print('I am very fine')
...
>>> def repeat_new():
... print_new()
...
>>> repeat_new()
I am ok
I am very fine
這個代碼塊包含兩個函數的定義:print_new以及repeat_new,函數定義的執行就和其他語句一樣,但是效果是創建函數對象。
函數定義中的語句直到函數被調用的時候才會運行,函數的定義本身不會有任何輸出。
三,運行流程
為了確保一個函數在首次被調用之前已經定義,我們必須要明白語句運行的順序,也就是所謂"運行流程"。
一個Python程序都是從第一個語句開始運行的。從首至尾,每次運行一個語句。函數的定義並不會改變程序的運行流程,但要注意,函數體內部的語句只有在函數被調用的時候才會運行。
函數調用就像是運行流程有了繞道的行為,沒有直接去執行下一個語句,運行流跳入到函數體內,運行里面的語句,然后再回來從離開的地方繼續執行。
簡要說,就是跳出跳入互相調用,完成整個程序的執行。
Python本身會實時追蹤應該執行的位置,所以每次一個函數執行完畢了,程序都會回到當時跳出的位置,然后繼續運行,等執行到了程序的末尾,就終止了。
有時候,我們要按照運行流程來讀代碼,才更好理解一些。
結束。