Python對指針做了良好封裝,一切都是“對象”,一切對象都有一個“變量”指向它。這個“變量”就是“指針”。和Java一樣,它不可以隨機移動,不可以運算。包括函數也是一個“對象”,用一個變量指向它,就是指向函數的入口地址。
C++中指向函數入口地址的指針,叫做函數指針。所以,這一名詞我們也借用到Python中。
比如,我寫一個排序的代碼段,用STL里的sort:
intarr[10]={5,8,4,7,6,5,7,4,2,9};
std::sort(arr,arr+10);
默認是升序排序。如果我想要特殊的排序標準,那就要提供第三個參數。第三個參數就是一個函數指針。sort的原則就是,假設原序列中b在a之前,當函數指針pf(a,b)調用的函數的返回值為true時發生交換。返回false時,和排序的算法有關,比如sort是不穩定排序,所以兩數相等時仍有可能交換位置。
我們寫一個降序排序。那就需要先寫一個比較函數cmp:
boolcmp(inta,intb)
{
returna>b;//當后面的數大于前面時交換
}
然后,函數名就是它的入口地址,所以我們把它傳進去:
std::sort(a,a+10,cmp);
Python中也類似,假設有一個列表的排序函數Sort(list,cmp)
那么,cmp也是一個“對象”,它可以傳入函數入口地址。調用語句如下:
defcmp(a,b):returna>b
li=[5,8,4,7,6,5,7,4,2,9]
Sort(li,cmp)
也就類似于函數指針的功能。
以上內容為大家介紹了Python培訓之python中有指針嗎,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。