好像沒有特別的叫法吧,也沒注意手冊上有什么特別的叫法,至于區(qū)別,舉個例子你就清楚了,如下:

在成都網(wǎng)站設計、成都網(wǎng)站制作中從網(wǎng)站色彩、結構布局、欄目設置、關鍵詞群組等細微處著手,突出企業(yè)的產(chǎn)品/服務/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉化,使成都網(wǎng)站營銷成為有效果、有回報的無錫營銷推廣。成都創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設十載了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。
假如有個列表aa=[1,4,3,5],對這個列表用sort()進行排序,如果第一種方式aa.sort()后aa=[1,3,4,5];
而第二種方式sort(aa)排序后雖然得到了新列表[1,3,4,5],但是aa還是=[1,4,3,5]。
也就是說第一種方式會改變原列表,而第二種不會改變,只是得到了一個新的副本。
GOT IT?!^^
補充一下,如果非要說叫法上的區(qū)別的話,第一種叫做方法調(diào)用,第二種叫做函數(shù)調(diào)用。至于方法和函數(shù)的些微區(qū)別,方法是基于對象的,函數(shù)是基于本身的。如果再詳細……方法一般不可以單獨使用,因為大部分方法是基于對象的,調(diào)用也必須基于對象,像上面第一種;而函數(shù)則可以單獨使用,你可以理解成它是數(shù)據(jù)系統(tǒng)本身的,而不是對象專有的。
PS:至于為什么我換了用sort()而沒有用LZ給的例子函數(shù),是因為..…^o^……LZ第一種方式和第二種方式寫的都不是一個函數(shù)……
python中函數(shù)和方法的區(qū)別:
首先,從分類的角度來分析。
(1)函數(shù)的分類:
內(nèi)置函數(shù):python內(nèi)嵌的一些函數(shù)。
匿名函數(shù):一行代碼實現(xiàn)一個函數(shù)功能。
遞歸函數(shù)
自定義函數(shù):根據(jù)自己的需求,來進行定義函數(shù)。
(2)方法的分類:
普通方法:直接用self調(diào)用的方法。
私有方法:__函數(shù)名,只能在類中被調(diào)用的方法。
屬性方法:@property,將方法偽裝成為屬性,讓代碼看起來更合理。
特殊方法(雙下劃線方法):以__init__為例,是用來封裝實例化對象的屬性,只要是實例化對象就一定會執(zhí)行__init方法,如果對象子類中沒有則會尋找父類(超類),如果父類(超類)也沒有,則直接繼承object(python 3.x)類,執(zhí)行類中的__init__方法。
類方法:通過類名的調(diào)用去操作公共模板中的屬性和方法。
靜態(tài)方法:不用傳入類空間、對象的方法, 作用是保證代碼的一致性,規(guī)范性,可以完全獨立類外的一個方法,但是為了代碼的一致性統(tǒng)一的放到某個模塊(py文件)中。
其次,從作用域的角度來分析:
(1)函數(shù)作用域:從函數(shù)調(diào)用開始至函數(shù)執(zhí)行完成,返回給調(diào)用者后,在執(zhí)行過程中開辟的空間會自動釋放,也就是說函數(shù)執(zhí)行完成后,函數(shù)體內(nèi)部通過賦值等方式修改變量的值不會保留,會隨著返回給調(diào)用者后,開辟的空間會自動釋放。
(2)方法作用域:通過實例化的對象進行方法的調(diào)用,調(diào)用后開辟的空間不會釋放,也就是說調(diào)用方法中對變量的修改值會一直保留。
最后,調(diào)用的方式不同。
(1)函數(shù):通過“函數(shù)名()”的方式進行調(diào)用。
(2)方法:通過“對象.方法名”的方式進行調(diào)用。
class Foo(object): ? ?def func(self): ? ? ? ?pass#實例化obj = Foo()# 執(zhí)行方式一:調(diào)用的func是方法obj.func() #func 方法# 執(zhí)行方式二:調(diào)用的func是函數(shù)Foo.func(123) # 函數(shù)
定義一個函數(shù)就是定義一個方法,self是自身,調(diào)用的時候如果需要傳入魔法方法__init__(初始定義的值【也就是參數(shù)】)時就需要帶self,不需要則可以在函數(shù)(即方法)前加修飾@staticmethod,就不用帶self參數(shù)了。
4.6. 定義函數(shù)
我們可以創(chuàng)建一個用來生成指定邊界的斐波那契數(shù)列的函數(shù):
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 引入了一個函數(shù) 定義。在其后必須跟有函數(shù)名和包括形式參數(shù)的圓括號。函數(shù)體語句從下一行開始,必須是縮進的。
函數(shù)體的第一行語句可以是可選的字符串文本,這個字符串是函數(shù)的文檔字符串,或者稱為 docstring。(更多關于 docstrings 的信息請參考 文檔字符串) 有些工具通過 docstrings 自動生成在線的或可打印的文檔,或者讓用戶通過代碼交互瀏覽;在你的代碼中包含 docstrings 是一個好的實踐,讓它成為習慣吧。
函數(shù) 調(diào)用 會為函數(shù)局部變量生成一個新的符號表。確切的說,所有函數(shù)中的變量賦值都是將值存儲在局部符號表。變量引用首先在局部符號表中查找,然后是包含函數(shù)的局部符號表,然后是全局符號表,最后是內(nèi)置名字表。因此,全局變量不能在函數(shù)中直接賦值(除非用 global 語句命名),盡管他們可以被引用。
函數(shù)引用的實際參數(shù)在函數(shù)調(diào)用時引入局部符號表,因此,實參總是 傳值調(diào)用 (這里的 值 總是一個對象 引用 ,而不是該對象的值)。[1] 一個函數(shù)被另一個函數(shù)調(diào)用時,一個新的局部符號表在調(diào)用過程中被創(chuàng)建。
一個函數(shù)定義會在當前符號表內(nèi)引入函數(shù)名。函數(shù)名指代的值(即函數(shù)體)有一個被 Python 解釋器認定為 用戶自定義函數(shù) 的類型。 這個值可以賦予其他的名字(即變量名),然后它也可以被當作函數(shù)使用。這可以作為通用的重命名機制:
fib
f = fib
f(100)
0 1 1 2 3 5 8 13 21 34 55 89
如果你使用過其他語言,你可能會反對說:fib 不是一個函數(shù),而是一個方法,因為它并不返回任何值。事實上,沒有 return 語句的函數(shù)確實會返回一個值,雖然是一個相當令人厭煩的值(指 None )。這個值被稱為 None (這是一個內(nèi)建名稱)。如果 None 值是唯一被書寫的值,那么在寫的時候通常會被解釋器忽略(即不輸出任何內(nèi)容)。如果你確實想看到這個值的輸出內(nèi)容,請使用 print() 函數(shù):
內(nèi)置函數(shù)就是Python給你提供的,拿來直接用的函數(shù),比如print.,input等。
截止到python版本3.6.2 ,python一共提供了68個內(nèi)置函數(shù),具體如下
本文將這68個內(nèi)置函數(shù)綜合整理為12大類,正在學習Python基礎的讀者一定不要錯過,建議收藏學習!
(1)列表和元組
(2)相關內(nèi)置函數(shù)
(3)字符串
frozenset 創(chuàng)建一個凍結的集合,凍結的集合不能進行添加和刪除操作。
語法:sorted(Iterable, key=函數(shù)(排序規(guī)則), reverse=False)
語法:fiter(function. Iterable)
function: 用來篩選的函數(shù). 在?lter中會自動的把iterable中的元素傳遞給function. 然后根據(jù)function返回的True或者False來判斷是否保留留此項數(shù)據(jù) , Iterable: 可迭代對象
搜索公眾號頂級架構師后臺回復“面試”,送你一份驚喜禮包。
語法 : map(function, iterable)
可以對可迭代對象中的每一個元素進行映射. 分別去執(zhí)行 function
hash : 獲取到對象的哈希值(int, str, bool, tuple). hash算法:(1) 目的是唯一性 (2) dict 查找效率非常高, hash表.用空間換的時間 比較耗費內(nèi)存
在Python中,對這兩個東西有明確的規(guī)定:
函數(shù)function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
從定義的角度上看,我們知道函數(shù)(function)就相當于一個數(shù)學公式,它理論上不與其它東西關系,它只需要相關的參數(shù)就可以。所以普通的在module中定義的稱謂函數(shù)是很有道理的。
那么方法的意思就很明確了,它是與某個對象相互關聯(lián)的,也就是說它的實現(xiàn)與某個對象有關聯(lián)關系。這就是方法。雖然它的定義方式和函數(shù)是一樣的。也就是說,在Class定義的函數(shù)就是方法。
從上面的角度看似乎很有道理。
def fun():
pass
type(fun)
class 'function' #沒有問題
class Cla():
def fun():
pass
@classmethod
def fun1(cls):
pass
@staticmethod
def fun2():
pass
i=Cla()
Cla.fun.__class__
class 'function' #為什么還是函數(shù)
i.fun.__class__ #這個還像話
class 'method'
type(Cla.fun1)
class 'method' #這里又是方法
type(i.fun1)
class 'method'#這里仍然是方法
type(Cla.fun2)
class 'function' #這里卻是函數(shù)
type(i.fun2)
class 'function'#這里卻是函數(shù)
事實上,上面的結果是可以解釋的:
1,普通方法(老版中直接就是"instancemethod")在module中與在Class中定義的普通函數(shù),從其本身而言是沒有什么區(qū)別的,他們都是對象函數(shù)屬性。 之所以會被說在Class中的定義的函數(shù)被稱為方法,是因為它本來就是面向?qū)淼膶嵗龑ο蟮模鋵嵥麄兙褪菍嵗椒ǎ@些方法是與實例相聯(lián)系的(從實例出發(fā)訪問該函數(shù)會自動賦值)。所以你從Class訪問仍然是一個函數(shù)
2,類方法("classmethod"),因為類同樣是對象,所以如果函數(shù)與類進行聯(lián)系了話(與實例方法一樣的模式)那么就能夠這么說了!
3,靜態(tài)方法,雖然定義在內(nèi)部,并且也較方法,但是卻不與任何對象聯(lián)系,與從類訪問方法是一樣的,他們?nèi)匀皇呛瘮?shù)。
這樣看來上面的定義可以改改了:
函數(shù)的定義自然不變。
方法的定義可以是這樣的,與某個對象進行綁定使用的函數(shù)。注意哦。綁定不是指" . "這個符號,這個符號說實在的只有域名的作用。綁定在這里是指,會默認賦值該綁定的對象。
網(wǎng)頁題目:方法函數(shù)python,什么是方法什么是函數(shù)
文章起源:http://chinadenli.net/article2/dsggjic.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、Google、響應式網(wǎng)站、自適應網(wǎng)站、網(wǎng)站制作、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)