『壹』 python方法注釋
#注釋
or
'''
多行注釋
'''
『貳』 python中方法對象的理解總結
9.3.4. 方法對象
通常,方法通過右綁定方式調用:
x.f()
在 MyClass 示例中,這會返回字元串 'hello world'。然而,也不是一定要直接調用方法。 x.f 是一個方法對象,它可以存儲起來以後調用。例如:
xf = x.f
while True:
print(xf())
會不斷的列印 hello world。
調用方法時發生了什麼?你可能注意到調用 x.f() 時沒有引用前面標出的變數,盡管在 f() 的函數定義中指明了一個參數。這個參數怎麼了?事實上如果函數調用中缺少參數,Python 會拋出異常--甚至這個參數實際上沒什麼用……
實際上,你可能已經猜到了答案:方法的特別之處在於實例對象作為函數的第一個參數傳給了函數。在我們的例子中,調用 x.f() 相當於 MyClass.f(x) 。通常,以 n 個參數的列表去調用一個方法就相當於將方法的對象插入到參數列表的最前面後,以這個列表去調用相應的函數。
如果你還是不理解方法的工作原理,了解一下它的實現也許有幫助。引用非數據屬性的實例屬性時,會搜索它的類。如果這個命名確認為一個有效的函數對象類屬性,就會將實例對象和函數對象封裝進一個抽象對象:這就是方法對象。以一個參數列表調用方法對象時,它被重新拆封,用實例對象和原始的參數列表構造一個新的參數列表,然後函數對象調用這個新的參數列表。
『叄』 python靜態方法和類方法的區別
classA:deffun_i(self,x):print(x)@classmethoddeffun_c(cls,x):print(x)@staticmethoddeffun_s(x):print(x)a=A()a.fun_i(1)a.fun_s(1)A.fun_c(1)A.fun_s(1)調用方式不同:類方法:應該通過類調用實例方法:應該通過實例調用靜態方法:既可以通過類調用,也可以通過實例調用實參和形參的定義和傳遞不同:靜態方法:聲明和調用時,都沒有隱含參數。實例方法:聲明時,要定義一個隱含參數:self。調用時,實例本身被隱含地傳遞給這個參數。類方法:聲明時,要定義一個隱含參數:cls。調用時,類本身被隱含地傳遞給這個參數。
『肆』 python魔法方法是什麼
魔法方法是python內置方法,不需要主動調用,存在的目的是為了給python的解釋器進行調用,幾乎每個魔法方法都有一個對應的內置函數,或者運算符,當我們對這個對象使用這些函數或者運算符時就會調用類中的對應魔法方法,可以理解為重寫這些python的內置函數。
python學習網,大量的免費python視頻教程,歡迎在線學習!
我們在調用python類中的某個方法時,通常會看到某些特殊的方法,它們總被雙下劃線所包圍,像這種格式:"__方法名__",這些方法很強大,充滿魔力,可以讓你實現很多功能。如果你的對象實現(重載)了這些方法中的某一個,那麼這個方法就會在特殊的情況下被 Python 所調用,你可以定義自己想要的行為,而這一切都是自動發生的。
相關推薦:《Python教程》
因此了解這類方法的作用及用法很有必要,以下對基本魔法方法做出總結,請看錶格:
『伍』 python 方法和函數的區別
在Python中,對這兩個東西有明確的規定:
函數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).
從定義的角度上看,我們知道函數(function)就相當於一個數學公式,它理論上不與其它東西關系,它只需要相關的參數就可以。所以普通的在mole中定義的稱謂函數是很有道理的。
那麼方法的意思就很明確了,它是與某個對象相互關聯的,也就是說它的實現與某個對象有關聯關系。這就是方法。雖然它的定義方式和函數是一樣的。也就是說,在Class定義的函數就是方法。
從上面的角度看似乎很有道理。
>>> 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'> #為什麼還是函數
>>> i.fun.__class__ #這個還像話
<class 'method'>
>>> type(Cla.fun1)
<class 'method'>#這里又是方法
>>> type(i.fun1)
<class 'method'>#這里仍然是方法
>>> type(Cla.fun2)
<class 'function'>#這里卻是函數
>>> type(i.fun2)
<class 'function'>#這里卻是函數
事實上,上面的結果是可以解釋的:
1,普通方法(老版中直接就是"instancemethod")在mole中與在Class中定義的普通函數,從其本身而言是沒有什麼區別的,他們都是對象函數屬性。 之所以會被說在Class中的定義的函數被稱為方法,是因為它本來就是面向將來的實例對象的,其實他們就是實例方法,這些方法是與實例相聯系的(從實例出發訪問該函數會自動賦值)。所以你從Class訪問仍然是一個函數
2,類方法("classmethod"),因為類同樣是對象,所以如果函數與類進行聯系了話(與實例方法一樣的模式)那麼就能夠這么說了!
3,靜態方法,雖然定義在內部,並且也較方法,但是卻不與任何對象聯系,與從類訪問方法是一樣的,他們仍然是函數。
這樣看來上面的定義可以改改了:
函數的定義自然不變。
方法的定義可以是這樣的,與某個對象進行綁定使用的函數。注意哦。綁定不是指" . "這個符號,這個符號說實在的只有域名的作用。綁定在這里是指,會默認賦值該綁定的對象。
『陸』 python中怎麼調用自己的方法
C/C++對Python的調用層次可以分為三個層次, (1) 高層次的調用, (2)純Python調用, (3) Python方法的擴展(也就使向Python輸出調用函數). 這里我主要討論(1)和(2)兩種方法.
1 高層次的調用
這是最簡單的一種在C/C++中調用Python的方法. 它直接的調用Python提供的C調用介面函數, 這些函數主要有: PyRun_SimpleString(), PyRun_SimpleStringFlags(), PyRun_SimpleFile(), PyRun_SimpleFileEx()和PyRun_SimpleFileExFlags()幾個. 函數的具體用法參考Python的文檔.
這里舉個例子來說明這種層次的用法:
由這個例子可見, 在C/C++中調用Python的內容非常簡單, 只要構造一個簡單的Python調用字元串.這里要注意的就是, Python調用串語句之間要用'/n'來分開, 且語句之間不能有空格, 如上面的Python字元串不能寫成: "import sys/n print sys.path" , 否則要出錯的.
// c/c++ 中 Python 調用必須的頭文件
#include <Python.h>
//
int main(int argc, char* argv[])
{
// 初始化Python解析環境
Py_Initialize();
// 構造Python執行腳本
char szPyScript[128];
sprintf(szPyScript, "import sys/nprint sys.path");
if(PyRun_SimpleString(szPyScript) != 0)
{
sprintf(stderr, "execute /'%s/'failed!", szPyScript);
return -1;
}
// 清除Python解析環境
Py_Finalize();
}
//
//
以上的例子也表明了在C/C++中調用Python的基本結構, 就是
(1) 先初始化Python環境然: Py_Initialize()
(2) 具體對Python的操作
(3) 清除Python環境
更復雜的一個使用高層調用的例子, 這個例子用PyRun_SimpleFile的例子.
這里值得注意是, 在Window中:
(1) 鏈接debug版本的時候會自動鏈接PythonXX(_d).lib庫, PythonXX_d安裝時是沒有安裝的, 所以要顯示的指定鏈接PythonXX.lib庫, 不知道VC6.0為什麼還會去找PythonXX_d.lib, 在vs7.0不會.
(2) 編譯時要以 /MD(多線程DLL) 選項編譯(不論時debug版本還時release版本都一樣).
以上我在VC7.0中可以正確的運行, 在VC6.0這樣還不行, 可能和我使用的版本有關系(我用的版本是:Python24.lib). 有知道的請賜教!!
// c/c++ 中 Python 調用必須的頭文件
#include <Python.h>
//
int main(int argc, char* argv[])
{
// 初始化Python解析環境
Py_Initialize();
//
char szFile[] = "PyFile.py";
//sprintf(szPathFile, "%s//%s", szPath, szFile);
FILE* fp = fopen(szFile, "r");
if(PyRun_SimpleFile(fp, szFile) != 0)
{
fclose(fp);
sprintf(stderr, "PyRun_SimpleFile(%s) failed!", saFile);
return -1;
}
fclose(fp);
// 清除Python解析環境
Py_Finalize();
}
2 純Python調用
『柒』 python列表方法
一個基本概念,你程序中的
reverse=True
是參數,不是語句,它不存在先執行的問題,就是給sort傳遞的一個參數(看下教程上函數的定義及使用)
對於列表的sort,reverse=True表示減序,而預設為增序