詳細說一下 什么是 Python 函數(shù)?

本文內(nèi)容是介紹什么是函數(shù)?
如何創(chuàng)建屬于自己的函數(shù),完成想要的功能。
01
什么是? 函數(shù)?
函數(shù)是一個獨立且封閉完成特定功能的代碼塊,可以在任何地方被調(diào)用。
比如 print()函數(shù),無論你在程序中的任何地方調(diào)用,都是輸出()中的內(nèi)容。
這種獨立的封閉代碼塊又稱為封裝,
也可以把函數(shù)理解為一個盒子。盒子里面的代碼就是封裝好的,完成特定的功能,外面的代碼不屬于函數(shù)。
有了封裝以后,我們就可以把代碼塊用一個個函數(shù)表示,然后通過一個個的調(diào)用就可以把復雜的功能拆解,簡單化。
這個過程就是面向過程的程序設計,與之對應的是面向對象的程序設計在面向過程的程序設計里面,函數(shù)是基本單元。
在Python中,函數(shù)分為內(nèi)建函數(shù)和用戶自定義函數(shù)。內(nèi)建函數(shù)是Python程序語言已經(jīng)給我們創(chuàng)建好了,直接可以使用。這一類的函數(shù)很多,我們不需要每一個都記住名字,常用的記住即可。
官方文檔https://docs.python.org/3/library/functions.html給出了很多內(nèi)建函數(shù),如下表所示。
表? Python內(nèi)建函數(shù)
Built-in ?Functions | ||||
abs() | delattr() | hash() | memoryview() | set() |
all() | dict() | help() | min() | setattr() |
any() | dir() | hex() | next() | slice() |
ascii() | divmod() | id() | object() | sorted() |
bin() | enumerate() | input() | oct() | staticmethod() |
bool() | eval() | int() | open() | str() |
breakpoint() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() | |
用戶自定義函數(shù)就是自己根據(jù)需要實現(xiàn)的功能設計代碼塊。

02
為什么需要用函數(shù)?
無論任何編程語言,函數(shù)的作用都是一樣的,概括起來主要有以下幾個作用:
01:解決代碼重復問題
在實際項目中,我們經(jīng)常會遇到代碼功能一樣,但是參數(shù)不同。也就是給定不同的參數(shù),得出不同的結果,
比如print(‘你好’) 與print('吃飯了嗎?'),功能都是打印信息。我們不需要為“你好”,“吃飯了嗎”編寫同樣的打印功能代碼,也就是實現(xiàn)print函數(shù)。只需要用同一個函數(shù)(print)就可以完成同樣的任務。
在代碼中多次執(zhí)行同一項任務時,無需反復編寫該任務的代碼,只需要調(diào)用該任務名稱的代碼塊,也就是函數(shù)即可完成任務。
2:代碼結構與思維結構一致
實際生活中,解決問題的方法一般是分步驟:
比如考大學,先從小學開始讀,然后初中、高中。但是每一個階段學的內(nèi)容不同。我們只需要把每一個階段編寫為一個函數(shù),然后按照我們思考的步驟組織在一起。有人認為從高中開始,再到小學;也有認為從小學到高中,按照自然規(guī)律。
這個就是思維方式的不同。在編程中,這些都是正確的,沒有對錯之分,能組合在一起完成功能即可。
例子'''使用函數(shù)描述:考上大學之前,我們需要經(jīng)歷的階段有'''# 小學primary_school()# 初中junior_middle_school()# 高中senior_middle_school()
3:利于分工合作
在實際項目中,要實現(xiàn)的功能往往比較復雜。我們只需要按照功能拆解的方法思考問題。
把一個大問題,拆解為幾個小問題,每一個小問題就是一個函數(shù)。然后再把所有函數(shù)按照思考的過程組織在一起即可。
拆解問題的事情一般是公司架構師做的事情,定義好每一個函數(shù)的功能以及函數(shù)的接口,然后分配給不同的程序員去完成。
這個就是多人協(xié)作完成一個大的功能。
4:代碼清晰、易讀、易修改
代碼被函數(shù)組織起來以后,整個程序文件變得有調(diào)理、有章法。
我們只需要按照函數(shù)的結構閱讀代碼即可,非常清晰明了。
每一個函數(shù)完成特定的功能。如果某一個函數(shù)出錯了,我們只需要調(diào)整該函數(shù)即可,方便快捷。
尤其是在代碼行數(shù)比較多的時候能快速定位到錯誤所在的位置。

03
如何定義函數(shù)?
在Python語言中,函數(shù)的定義語法是:
?
定義函數(shù)語法# 定義函數(shù)語法def funtion_name(parameter1, parameter2, xxxxx):語句1語句2returnxxxx
def:為關鍵字,告訴python這是一個函數(shù)
funtion_name:是函數(shù)名字。函數(shù)是完成特定功能的代碼塊,給這個代碼塊取一個名字就是函數(shù)名,通常用具有描述性的單詞表示,比如check_events(),檢查事件。函數(shù)名命名規(guī)則與變量的一樣。
parameter1、paramter2 、xxxx:等是函數(shù)的參數(shù),也就是函數(shù)可以加工處理的數(shù)據(jù)。參數(shù)可以有0到多個,但是名字不能重名。所有的參數(shù)用括號括起來(),即使0個參數(shù)也需要。
冒號(:):函數(shù)定義需要冒號結尾,此為python語法要求
語句1、語句2、return:函數(shù)的代碼塊,說明函數(shù)具體需要做什么事情,也就是需要實現(xiàn)什么樣的功能。
(1)函數(shù)代碼塊必須縮進,使用tab建即可,不是空格鍵。這是Python語法要求。具有同樣縮進的代碼塊才是一個完整的代碼塊
(2)例子:沒有合理縮進,引發(fā)的常見錯誤之一
?
例子:沒有縮進引起的錯誤# 定義函數(shù)語法def funtion_name(parameter1,parameter):語句1語句2return xxxxFile"/Users/yoni.ma/PycharmProjects/seven_days_python/Sixth_day/define_fun.py",line 18語句1^IndentationError: expected an indented block
(3)語句1、語句2為函數(shù)具體執(zhí)行內(nèi)容,可以有1到多個語句。但是不能沒有任何語句。否則代碼錯誤。
(4)return:函數(shù)返回值,可有可無。根據(jù)自己設計的函數(shù)功能而決定。
①函數(shù)運行完成以后,如果需要返回一個值給調(diào)用該函數(shù)的地方,則使用return。否則不需要。
②return還表示函數(shù)的結束。尤其當代碼比較多,各種while、if、 for等都有的函數(shù)。

04
如何調(diào)用函數(shù)?
調(diào)用函數(shù)就是讓Python執(zhí)行函數(shù)的代碼,也就是喊出函數(shù)的名字。
只有當函數(shù)被調(diào)用時,函數(shù)內(nèi)部的代碼段才會被執(zhí)行。
這點也是新手容易犯的錯誤之一:忘記調(diào)用函數(shù)就運行程序而得不到結果,調(diào)試此類錯誤需要耐心。
函數(shù)調(diào)用結束時,這個函數(shù)內(nèi)部生成的所有數(shù)據(jù)都會被銷毀。
根據(jù)程序設計要求,同一個函數(shù)可以被調(diào)用多次或1次。調(diào)用函數(shù)也可以用來測試函數(shù)功能是否正確,比如每次寫完一個函數(shù)的功能,然后調(diào)用并運行以查看是否出錯或期望的結果。
如果錯誤,則調(diào)試代碼(查找哪里出錯);否則進行下一個函數(shù)的編寫。運用此方法雖然有一點繁瑣,但是可以大大縮減代碼調(diào)試,
因為我們把錯誤提前解決了。
調(diào)用函數(shù)語法為:funtion_name()注意:funtion_name()前面沒有縮進,否則不能正確調(diào)用函數(shù)。

05
函數(shù)用定義和調(diào)用的例子
例子"""函數(shù)的例子:知識點:1。定義函數(shù)2。函數(shù)調(diào)用"""# 定義函數(shù)def welcome_python():print('歡迎加入Python實戰(zhàn)圈!')# 調(diào)用函數(shù)。為了方便閱讀代碼,與定義函數(shù)最好空兩行。welcome_python()welcome_python()歡迎加入Python實戰(zhàn)圈!歡迎加入Python實戰(zhàn)圈!無論是定義還是調(diào)用函數(shù),常見錯誤有以下幾個情況:1) 函數(shù)定義中缺少冒號或者是中文冒號2) 函數(shù)體沒有縮進3) 調(diào)用函數(shù)的時候縮進了,提示函數(shù)錯誤例子:如過welcome_python()縮進了,運行函數(shù)沒有錯誤,但是運行結果是空。def welcome_python():print('歡迎加入Python實戰(zhàn)圈!')???welcome_python()Process finished with exit code 0
?以上內(nèi)容摘自《零基礎輕松學 Python》
【提高】40多個項目實戰(zhàn),老手可以從真實場景中學習python;
【直播】不定期直播項目案例講解,手把手教你如何分析項目;
【分享】優(yōu)質python學習資料分享,讓你在最短時間獲得有價值的學習資源;圈友優(yōu)質資料或學習分享,會不時給予贊賞支持,希望每個優(yōu)質圈友既能賺回加入費用,也能快速成長,并享受分享與幫助他人的樂趣。
【人脈】收獲一群志同道合的朋友,并且都是python從業(yè)者
【價格】本著布道思想,只需 69元 加入一個能保證學習效果的良心圈子。
