codecamp

Python函数的常见问题

python的函数调用开销有那些?

一般函数调用都涉及到 返回栈的压栈 参数的压栈或者放入寄存器 函数返回时恢复相应的寄存器和栈

什么是python的偏函数?


简而言之,是一种对函数的公共部分的“美化”。


如何查看Python内建函数的实现代码?


三种方法可以查看内建模块的代码,以random模块为例:

  1. 使用help(random),如下图:

  2. 利用random.__file__查看位置,然后打开后缀名为.py的文件。

  3. 命令行输入python -v,然后倒入模块时,会自动显示位置。

注:从图中可以看到file后边有random模块的存储位置,去该文件夹打开random.py文件,注意,后缀名为.pyc的文件是编译后的文件,打开是看不懂的。


找到random模块位置 C:\Anaconda\lib\random.py,然后编辑器打开,可以查看相关方法的定义了:



Python中什么情况下应该使用匿名函数lambda


lambda函数一般是在函数式编程中使用的。通常学习的C/C++/Java等等都是过程式编程,所以不常接触lambda函数。

其实这货在C++中已经有所运用了,如果对stl的迭代器比较熟悉的话,就会知道里头的foreach等函数,需要给一个函数,这对于C/C++这种古老的语言来说比较痛苦,一般是在主函数外再写一个函数,然后传入函数指针,看起来非常不直观。boosts用一些特殊的语法技巧实现了C++的lambda。

举个栗子,对于这样一个list L,求L中大于3的元素集合

L = [1, 2, 3, 4, 5]

对于过程式编程,通常会这么写

L3 = []
for i in L:
    if i > 3:
        L3.append(i)

而对于函数式变成,只需要给filter函数一个判断函数就行了

def greater_than_3(x):
    return x > 3
L3 = filter(greater_than_3, L)

由于这个判断函数非常简单,用def写起来太累赘了,所以用lambda来实现就非常简洁、易懂

L3 = filter(lambda x: x > 3, L)

这是个很简单的例子,可以看出lambda的好处。lambda函数更常用在map和reduce两个函数中。




Python函数中的作用域规则
Python模块基础
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }