這里來給大家演示一下,函數的定義或構造,并調用函數來實現封裝后的效果。

新密ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
首先我們來看看想實現下面的這個效果,如果不使用函數應該怎么實現。
以上兩種返回結果都是1-9這幾個數字。
以上兩種方法,第一種代碼重復率太高,代碼美觀效果太差,雖然能實現效果,但是因為數量比較少,還能手工打出來這幾行代碼,如果是打印1-100000就很難實現了。這時候for循環(huán)還是可以實現的,但是for循環(huán)只能實現類似的數字和變量循環(huán),無法進行復雜的功能開發(fā)。鑒于此,函數這個概念就被python引入了,下面先來看看函數是怎么實現上面的效果的,還是兩種方法。
這時候如果想實現上面的打印結果就直接使用函數名+小括號調用函數就可以了,這種類型的語法,不僅可以反復使用,而且封裝后的代碼更美觀。
1、定義函數
函數是可重用的程序。本書中已經使用了許多內建函數,如len()函數和range()函數,但是還沒自定義過函數。定義函數的語法格式如下:
def 函數名(參數):
函數體
定義函數的規(guī)則如下:
①關鍵字def用來定義一個函數,它是define的縮寫。
②函數名是函數的唯一標識,函數名的命名規(guī)則遵循標識符的命名規(guī)則。
③函數名后面一定要緊跟著一個括號,括號內的參數是可選的,括號后面要有冒號。
④函數體(statement)為一個或一組Python語句,注意要有縮進。
⑤函數體的第一行可以有文檔字符串,用于描述函數的功能,用三引號括起來。
按照定義規(guī)則,可以定義第一個函數了:
def?hello_world():
...?????print('Hello,world!')???#?注意函數體要有縮進
...
hello_world()
Hello,world!
這個函數不帶任何參數,它的功能是打印出“Hello,world!”。最后一行代碼hello_world()是調用函數,即讓Python執(zhí)行函數的代碼。
2、全局變量和局部變量
全局變量是定義在所有函數外的變量。例如,定義一個全局變量a,分別在函數test1()和test2()使用變量a:
a?=?100???#?全局變量
def?test1():
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
100
test2()
100
定義了全局變量a之后,在函數test1()和test2()內都可以使用變量a,由此可知,全局變量的作用范圍是全局。
局部變量是在函數內定義的變量,除了用關鍵字global修飾的變量以外。例如,在函數test1()內定義一個局部變量a,分別在函數外和另一個函數test2()內使用變量a:
def?test1():
...?????a?=?100???#?局部變量
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
100
print(a)
Traceback?(most?recent?call?last):
File?"stdin",?line?1,?in?module
NameError:?name?'a'?is?not?defined
test2()
Traceback?(most?recent?call?last):
File?"stdin",?line?1,?in?module
File?"stdin",?line?2,?in?test2
NameError:?name?'a'?is?not?defined
Python解釋器提示出錯了。由于局部變量a定義在函數test1()內,因此,在函數test1()內可以使用變量a,但是在函數外或者另一個函數test2()內使用變量a,都會報錯,由此可見,局部變量的作用范圍是定義它的函數內部。
一般情況下,在函數內聲明的變量都是局部變量,但是采用關鍵字global修飾的變量卻是全局變量:
def?test1():
...?????global?a???#?全局變量
...?????a?=?100
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
100
print(a)
100
test2()
100
這個程序與上個程序相比,只是在函數test1()中多了一行代碼“global a”,程序便可以正確運行了。在函數test1()中,采用關鍵字global修飾了變量a之后,變量a就變成了全局變量,不僅可以在該函數內使用,還可以在函數外或者其他函數內使用。
如果在某個函數內局部變量與全局變量同名,那么在該函數中局部變量會覆蓋全局變量:
a?=?100???#?全局變量
def?test1():
...?????a?=?200???#?同名局部變量
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
200
test2()
100
由于在函數test1()中定義了一個與全局變量同名的局部變量a,因此,在函數test1()中全局變量a的值被局部變量覆蓋了,但是在函數test2()中全局變量a的值沒有被覆蓋。
綜上所述,在Python中,全局變量保存的數據供整個腳本文件使用;而局部變量只用于臨時保存數據,變量僅供局部代碼塊使用。
Python 有很多有用的內置函數, 但還是不能滿足程序員的需求, 所以需要 自定義函數 。
如何編寫 自定義函數 , 需要用到 def語句, 函數名, 括號及參數, 冒號, 函數說明,內置縮進編碼模塊,return 語句 , 其中有一些也可省略不寫,后面會慢慢介紹。
編寫函數不可或缺的元素, 一定都要寫。函數名盡量寫得簡單易懂。
一般是對函數的描述說明。
這是編寫具體的 操作命令 的地方, 如果還未想好如何編寫, 可以使用 pass 來占位,讓程序可以運行起來,防止調試出錯。
參數放在最后講, 是因為這里面的東西還是很多的。首先看個例子。
如上的案例都是限制了參數個數的, 最多傳三個參數 name/age/city , 但是如果有一些特例,需要傳多個參數怎么辦呢。 參數前面加個 * , 變成 可變參數 。
那如果想要傳多個包含名稱的參數,例如a=1,b=2,c=3......,那該怎么寫呢。參數前面加個 ** , 變成 關鍵字參數 。
通過關鍵字def來創(chuàng)建函數,def的作用是實現python中函數的創(chuàng)建
函數定義過程:
函數名+()小括號執(zhí)行函數
函數體內對全局變量只能讀取,不能修改
局部變量,無法在函數體外使用
python 使用 lambda 來創(chuàng)建匿名函數。
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。
4.6. 定義函數
我們可以創(chuàng)建一個用來生成指定邊界的斐波那契數列的函數:
def fib(n): # write Fibonacci series up to n
... """Print a Fibonacci series up to n."""
... a, b = 0, 1
... while a n:
... print(a, end=' ')
... a, b = b, a+b
... print()
...
# Now call the function we just defined:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
關鍵字 def 引入了一個函數 定義。在其后必須跟有函數名和包括形式參數的圓括號。函數體語句從下一行開始,必須是縮進的。
函數體的第一行語句可以是可選的字符串文本,這個字符串是函數的文檔字符串,或者稱為 docstring。(更多關于 docstrings 的信息請參考 文檔字符串) 有些工具通過 docstrings 自動生成在線的或可打印的文檔,或者讓用戶通過代碼交互瀏覽;在你的代碼中包含 docstrings 是一個好的實踐,讓它成為習慣吧。
函數 調用 會為函數局部變量生成一個新的符號表。確切的說,所有函數中的變量賦值都是將值存儲在局部符號表。變量引用首先在局部符號表中查找,然后是包含函數的局部符號表,然后是全局符號表,最后是內置名字表。因此,全局變量不能在函數中直接賦值(除非用 global 語句命名),盡管他們可以被引用。
函數引用的實際參數在函數調用時引入局部符號表,因此,實參總是 傳值調用 (這里的 值 總是一個對象 引用 ,而不是該對象的值)。[1] 一個函數被另一個函數調用時,一個新的局部符號表在調用過程中被創(chuàng)建。
一個函數定義會在當前符號表內引入函數名。函數名指代的值(即函數體)有一個被 Python 解釋器認定為 用戶自定義函數 的類型。 這個值可以賦予其他的名字(即變量名),然后它也可以被當作函數使用。這可以作為通用的重命名機制:
fib
f = fib
f(100)
0 1 1 2 3 5 8 13 21 34 55 89
如果你使用過其他語言,你可能會反對說:fib 不是一個函數,而是一個方法,因為它并不返回任何值。事實上,沒有 return 語句的函數確實會返回一個值,雖然是一個相當令人厭煩的值(指 None )。這個值被稱為 None (這是一個內建名稱)。如果 None 值是唯一被書寫的值,那么在寫的時候通常會被解釋器忽略(即不輸出任何內容)。如果你確實想看到這個值的輸出內容,請使用 print() 函數:
python中定義函數的關鍵字是def。
Python使用def關鍵字開始函數定義,緊接著是函數名,括號內部為函數的參數,內部為函數的具體功能實現代碼,如果想要函數有返回值, 在expressions中的邏輯代碼中用return返回。
上面我們定義了一個名字為 function 的函數,函數沒有不接受參數,所以括號內部為空,緊接著就是 函數的功能代碼。
如果執(zhí)行該腳本,發(fā)現并沒有輸出任何輸出,因為我們只定義了函數,而并沒有執(zhí)行函數。 這時我們在Python命令提示符中輸入函數調用 function(), 注意這里調用函數的括號不能省略。
python的學習
如果我們用代碼實現了一個小功能,但想要在程序代碼中重復使用,不能在代碼中到處粘貼這些代碼,因為這樣做違反了軟件工程中DRY原則。 Python提供了函數功能,可以將我們這部分功能抽象成一個函數以方便程序調用,或者提供給其他模塊使用。
函數是組織好的,可重復使用的,用來實現單一,或相關聯(lián)功能的代碼段。(推薦學習:Python視頻教程)函數必須先定義,才能調用,否則會報錯,無參數時函數的調用函數名()。
有參數時函數的調,不要在定義函數的時候在函數體里面調用本身,否則會出不來,陷入循環(huán)調用,函數需要調用函數體才會被執(zhí)行,單純的只是定義函數是不會被執(zhí)行的。
本文題目:python定義函數講解,python里面定義函數
文章轉載:http://chinadenli.net/article7/dsigjij.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網站制作、網站策劃、用戶體驗、網站導航、網站制作、App設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)