## 內建函式
示意圖:
!(通過觀察規律其實不難發現,python中所謂的使用函式就是把你要處理的物件放到乙個名字後面的括號裡就可以了。簡單的來說,函式就是這麼使用,可以往裡面塞東西就得到處理結果。這樣的函式在python中還有很多。
以最新的3.50版本為例,一共存在68個這樣的函式,它們被統稱為內建函式 (built-in functions)。之所以被稱之為內建函式,並不是因為還有「外建函式」這個概念,內建的意思是這些函式在3.50版本安裝完成後你就可以使用它們,是「自帶」的而已。
現在你並不必急著把這些函式是怎麼用的都搞明白,其中一些內建函式很實用, 但是另外一些就不常用,比如涉及字元編碼的函式ascii(),bin(),chr()等等,這些都是相對底層的程式設計設計中才會使用到的函式,在你深入到一定程度的時候才會派的上用場。
## 定義函式
在python中可以使用def關鍵字來定義函式,和變數一樣每個函式也有乙個名字,而且命名規則跟變數的命名規則是一致的。在函式名後面的圓括號中可以放置傳遞給函式的引數,函式執行完成後我們可以通過return關鍵字來返回乙個值。
你可以定義乙個由自己想要功能的函式,以下是簡單的規則:
* arg (即argument,引數)有時你還能見到這種寫法:parameter,二者都是引數的,意思但是稍有不同,這裡不展開說了。任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。
* 函式內容以冒號起始,並且縮排。函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。
* return即返回結果。return \[表示式\] 結束函式,選擇性地返回乙個值給呼叫方。不帶表示式的return相當於返回 none。
* def和return是關鍵字(keyword),python就是靠識別這些特定的關鍵字來明白使用者的意圖,實現更為複雜的程式設計。
現在總結一下:define a function named 『function』 which has two arguments : arg1 and arg2,returns the result 『something』 是不是很易讀很順暢?**的表達比英文句子更簡潔一點:
!(語法python 定義函式使用 def 關鍵字,一般格式如下:
def 函式名(引數列表):
函式體下面是乙個列印問候語的簡單函式,名為greet\_user():
def greet_user():
"""顯示簡單的問候語"""
print("hello!")
greet_user()
hello!
這個示例演示了最簡單的函式結構。使用關鍵字def來告訴python你要定義乙個函式。這是函式定義,向python指出了函式名,還可能在括號內指出函式為完成其任務需要什麼樣的資訊。在這裡,函式名為greet\_user(),它不需要任何資訊就能完成其工作,因此括號是空的(即便如此,括號也必不可少)。最後,定義以冒號結尾。
緊跟在def greet\_user():後面的所有縮進行構成了函式體。第二行文字是被稱為文件字串(docstring)的注釋,描述了函式是做什麼的。文件字串用三引號括起, python使用它們來生成有關程式中函式的文件。
**行print("hello!")是函式體內的唯一一行**, greet\_user()只做一項工作:列印hello!。
要使用這個函式,可呼叫它。 函式呼叫讓python執行函式的**。要呼叫函式,可依次指定函式名以及用括號括起的必要資訊,如最後一行處所示。由於這個函式不需要任何資訊,因此呼叫它時只需輸入greet\_user()即可。和預期的一樣,它列印hello!:
## 函式的引數
只需稍作修改,就可以讓函式greet\_user()不僅向使用者顯示hello!,還將使用者的名字用作抬頭。為此,可在函式定義def greet\_user()的括號內新增username。通過在這裡新增username,就可讓函式接受你給username指定的任何值。現在,這個函式要求你呼叫它時給username指定乙個值。呼叫greet\_user()時,可將乙個名字傳遞給它,如下所示:
def greet_user(username):
print("hello, " + username.title() + "!")
greet_user('jesse')
greet_user('sarah')
hello, jesse!
hello, sarah!
**greet\_user('jesse')呼叫函式greet\_user(),並向它提供執行print語句所需的資訊。這個函式接受你傳遞給它的名字,並向這個人發出問候。
同樣, greet\_user('sarah')呼叫函式greet\_user()並向它傳遞'sarah',列印hello, sarah!。你可以根據需要呼叫函式greet\_user()任意次,呼叫時無論傳入什麼樣的名字,都會生成相應的輸出。
## 實參和形參
前面定義函式greet\_user()時,要求給變數username指定乙個值。呼叫這個函式並提供這種資訊(人名)時,它將列印相應的問候語。
在函式greet\_user()的定義中,變數username是乙個形參——函式完成其工作所需的一項資訊。在**greet\_user('jesse')中,值'jesse'是乙個實參。實參是呼叫函式時傳遞給函式的資訊。我們呼叫函式時,將要讓函式使用的資訊放在括號內。在greet\_user('jesse')中,將實參'jesse'傳遞給了函式greet\_user(),這個值被儲存在形參username中。
注意 大家有時候會形參、實參不分,因此如果你看到有人將函式定義中的變數稱為實參或將函式呼叫中的變數稱為形參,不要大驚小怪。
Python中帶yield關鍵字的函式
函式中包含yield關鍵字,該函式不再是普通函式,而是乙個生成器 generator 首次呼叫該函式即建立乙個生成器。最簡單的建立生成器的方式是把列表推導式的換成 其次則是函式中帶yield關鍵字。生成器是python中一邊迴圈一邊計算的機制,無需建立完整的list。i 上述兩行 中列表range ...
js函式中的this關鍵字
關於這個this關鍵字,也是很多專案中常常被用到的,那麼,有人也許會問,幹嘛要用this呢,在函式被呼叫時,直接指明是什麼物件在呼叫不就行了?還整那麼個模模糊糊的概念出來幹嘛?不過嘛,存在即真理,既然有這麼個東西,那也就有他存在的意義,下面來看看吧。首先,我們要先回憶一下js函式都有哪幾種呼叫的場合...
python中yield關鍵字
mylist是乙個可迭代的物件。當你使用乙個列表生成式來建立乙個列表的時候,就建立了乙個可迭代的物件 mylist x x for x in range 3 for i in mylist print i 01 4在這裡,所有的值都存在記憶體當中,所以並不適合大量資料 def creategener...