180202—【Python 初识 D9】Python的内建函数 & 工厂函数

按:看书的时候一直被这两个东西搞的头大,虽然学一门语言一直死抠概念不算什么好习惯,但如果全世界都在围着某个概念做文章,强调一个函数看上去像这个但实际是那个,这个内建函数在X.X版本之后变成了工厂函数……云云。你就会很难受了。
难受,作此篇,兼难受:

内建函数

内建函数,就是由语法规定存在的函数。
是 各家编译器,如果支持该语法规则,则必须为使用者提供的函数。
这些函数,包含在编译器的运行时库当中,程序员不必单独书写代码实现它,只需要调用既可,他们的实现,由编译器厂商完成。
比如print()函数,随意拉出来就可以用

跟库函数是什么关系?

库函数(Library function)是把函数放到库里,供别人使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。调用时要先import进来先。
(犹忆C中 #include < > …)

【区别】:
标准库函数都需要import xxx才能取得。
内建函数都在 _ builtins_ 里面,在global里直接就能用。
在试图区分此篇试图区分的几个概念时,搜索发现大量与此有关的文章都在谈论常用的内建函数,概念说明并不是很多。。这里也放几个去处,有需自取:
Python 标准库系列之内建函数
Python 内建函数

工厂函数

工厂函数看上去有点像函数,实质上他们是类,当你调用它们时,实际上是生成了该类型的一个实例,就像工厂生产货物一样.
Python核心编程 第二版(p71)

啥意思呢? 其实把书翻了好久,也查了不少地方,都不如下面这段代码来的直接:

定义一个外部函数,这个函数简单地生成并且返回了一个被嵌套的函数,却并不调用这个内嵌函数。如果调用外部函数就得到一个生成的内嵌函数的一个引用。
如果再调用外部得到的那个函数,它将调用内嵌函数,也就是说,maker函数内部的名为action的函数。

>>> def maker(N):
    def action(X):
        return X**N
    return action

>>> f = maker(2)  
>>> f(3) #结果是9  
9
>>> g = maker(3)  
>>> g(3) #结果是27
27  

工厂函数:一个能够记住嵌套作用域的变量值的函数,尽管那个作用域已经不存在了。。

函数maker里面嵌套了一个函数action,首先用户传给maker函数一个参数,这个参数传给了action函数,使得action函数可以形成具体的函数
比如说第一次参数N为2,此时,action(x)函数得以具体化了,也就是:

def action(X): return X**2

然后将action(x)返回给顶层,并赋值给f,也就是现在f是action(x),
然后用户再传递参数到f中,也就是传给了action(x)。
神奇之处在于,内嵌的函数存住了2,即maker函数内部的变量N的值,尽管在调用执行f时maker已经返回了值并且退出。实际上,在本地作用域的N被作为执行的状态信息保留了下来。

总结一下,之所以称之为工厂函数,是因为,可以自由更改嵌套函数的参数,譬如书中说的,将N=2,则f可以是平方函数,如果N=3,则f可以是3次方函数,N=4,则f可以是4次方函数。等等……

参考:
Python中的工厂函数
python(第一天): 工厂函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值