【问题标题】:function pointers in pythonpython中的函数指针
【发布时间】:2008-11-21 01:09:28
【问题描述】:

我想做如下的事情:

def add(a, b):
    #some code

def subtract(a, b):
    #some code

operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)

在python中,是否可以分配函数指针之类的东西?

【问题讨论】:

  • 尝试在交互式环境中实际执行该代码,看看会发生什么。
  • 我很想删除愚蠢的 [function-pointer] 和 [anonymous-methods] 标签,因为它们在 Python 中没有意义。但是,这种问题表明 Python 缺乏这些复杂性。
  • 你很幸运,我的朋友,但他们既不是匿名的也不是不受约束的
  • 我认为“未绑定的函数”是指“函数,而不是方法”。
  • 不,“未绑定函数”在 C++ 中是一个令人毛骨悚然的问题,而“prothon”则用于解释(尚未)绑定到类但可能绑定的函数。 Java 开发人员必须给函数起一个听起来很花哨的名字。

标签: python function-pointers


【解决方案1】:

你试过了吗?你写的和写的完全一样。函数是 Python 中的一等对象。

【讨论】:

    【解决方案2】:

    Python 没有所谓的指针,但您的代码可以按照编写的方式运行。函数是一等对象,分配给名称,并用作任何其他值。

    您可以使用它来实现策略模式,例如:

    def the_simple_way(a, b):
        # blah blah
    
    def the_complicated_way(a, b):
        # blah blah
    
    def foo(way):
        if way == 'complicated':
            doit = the_complicated_way
        else:
            doit = the_simple_way
    
        doit(a, b)
    

    或查找表:

    def do_add(a, b):
        return a+b
    
    def do_sub(a, b):
        return a-b
    
    handlers = {
        'add': do_add,
        'sub': do_sub,
    }
    
    print handlers[op](a, b)
    

    您甚至可以获取绑定到对象的方法:

    o = MyObject()
    f = o.method
    f(1, 2) # same as o.method(1, 2)
    

    【讨论】:

    • 如果它们不叫“函数指针”,你怎么称呼它们?就像我认为的那样,函数是定义或包含括号的调用。但我不是专家。
    • 如果你这样做:def foo(): ...; bar = foo 那么 foo 和 bar 都是引用函数的名称。它们之间没有区别。那么如果 foo 是一个函数,那为什么 bar 不是一个函数呢?
    【解决方案3】:

    请注意,大多数 Python 运算符已经在 operator 模块中具有等效函数。

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多