Python在封装指针方面做得很好,一切都是“对象”,每个对象都有一个“变量”指向它。这个“变量”就是“指针”。像Java一样,它不能随机移动,也不能进行计算。包含一个函数也是一个“对象”,用变量指向它就是指向函数的入口地址。
C++中指向函数入口地址的指针称为函数指针。因此,我们也从 Python 中借用了这个术语。
比如,我写一个排序的代码段,用STL里的sort:
int arr[10]={5,8,4,7,6,5,7,4,2,9};
std::sort(arr,arr+10);
默认是按升序排序。如果我想要一个特殊的排序标准,我需要提供第三个参数。第三个参数是函数指针。排序的原理是,假设原序列中的b在a之前,当函数指针pf(a,b)调用的函数的返回值为真时发生交换。返回false时,与排序算法有关。比如 sort 是一种不稳定的排序,所以当两个数相等时还是可以交换位置的。
让我们写一个降序排序。那么需要先写一个比较函数cmp:
bool cmp(int a,int b)
{
return a>b;//当后面的数大于前面时交换
}
那么,函数名就是它的入口地址,所以我们传入:
std::sort(a,a+10,cmp);
Python中也类似,假设有一个列表的排序函数Sort(list, cmp)
那么,cmp也是一个“对象”,可以传入函数入口地址。调用语句如下:
def cmp(a,b):return a>b
li=[5,8,4,7,6,5,7,4,2,9]
Sort(li,cmp)
也就类似于函数指针的功能。
python学习网,免费的在线学习
,欢迎关注!
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python使用append添加数据11/04
- ♥ 如何结合语句使用python range()01/05
- ♥ 最简洁的python条件判断语句写法12/07
- ♥ python如何使用def关键字08/17
- ♥ 零基础学习python读什么书11/12
- ♥ python中常用的数据库有哪些08/26
内容反馈