Python使用函数赋值与创建新函数返回原本函数执行结果的区别

如题。
请问以下两种写法有何区别?

def a(self, abc):
   return abc

b = a

def a(self, abc):
   return abc

def b(self, def):
   return a(def)
阅读 2.7k
2 个回答

没有区别,都是语法不正确的 ?

(修正语法后,)你这样得到的两个函数的元数据不一样,比如 b.__name__ 之类的。另外后者多了一次函数调用,会慢一些。


>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance

从函数的调用次数来看, 第二种调用次数 会比第一种的多
其次, 我看到self, 所以如果这是类方法的话, 那么差别会更大一些:

class A(object):
    def a(self, abc):
       return abc
  
test = A()
test.a()      # 每调用一次, 都会绑定一次method

b = test.a    
b()           # 不管调用多少次, method都已经是绑定好的, 直接使用

光第一种的不同用法, 都能产生比较大的差别, 就更别说第二种了..第二种还涉及到更多的 LOAD ATTR 和 'method 绑定'.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题