Discuss / Python / 关于函数对象的疑问

关于函数对象的疑问

Topic source

Paranoid_Qian

#1 Created at ... [Delete] [Delete and Lock User]

您在文中说,每次调用都会创建一个新的函数对象,这里我有两个疑问:

  1. python中的==比较的是内容,那对于函数对象使用==,比较的是什么?什么情况下,函数对象内容是一样的,也就是==返回True?

  2. 既然每次都产生新的函数对象,那python的这种实现机制是不是不够高效,如果我调用了1w次,那产生了1w个函数对象,内存占用了很多,但是函数都是一样的功能。请问底层是这种实现方式么?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

函数如果是一样的功能,就不需要每次都返回一个新函数了:

def f():
    return 1

这个函数在内存只有1份,调1万次也是同一个函数

def g(x):
    def foo():
        return x * x
    return foo

但是你每次调用g返回的就是新函数了,因为根据传入的参数不同,返回的函数执行逻辑不同

nishno_s45

#3 Created at ... [Delete] [Delete and Lock User]

我的理解是对于x=1,确定了一个函数x^2,但是这个函数的定义域是1这个点。所以实际上是一个函数集合[x^2(1≤x≤1),x^2(3≤x≤3),……]但是这个函数的特殊的地方是你赋予了它的值同时也确定了它的定义域,而这里定义域是x是未知的。 不知道这样理解对不对。


  • 1

Reply