考虑以下:
class objectTest(): def __init__(self, a): self.value = a def get_value(self): return self.value class execute(): def __init__(self): a = objectTest(1) b = objectTest(1) print(a == b) print(a.get_value() == b.get_value) print(a.get_value() == b.get_value()) print(a.get_value == b.get_value) if __name__ == '__main__': execute = execute()
此代码返回
>>> False False True False
鉴于get_value是一个函数,我希望执行停止并返回错误,但事实并非如此。有人可以解释为什么python解释器允许这种语法而不是引发属性错误,在我看来,这可以节省我宝贵的时间。
如前所述,函数和方法是一流的对象。您通过在末尾加上一些括号(括号)来 称呼 它们。但是看来您想要更多的动机来解释为什么python甚至允许我们这样做。我们为什么要关心函数是否一流?
有时您不想调用它们,而是想传递对可调用对象本身的引用。
from multiprocessing import Process t = Process(target=my_long_running_function)
如果在上述内容后面加上方括号,它将my_long_running_function在主线程中运行;几乎没有你想要的!您想Process引用可调用对象,它将在新进程中运行。
my_long_running_function
Process
有时您只想指定可调用对象,然后再做其他事情…
def do_something(s): return s[::-1].upper() map(do_something,['hey','what up','yo']) Out[3]: ['YEH', 'PU TAHW', 'OY']
(map在这种情况下)填写其参数。
map
也许您只想将一堆可调用对象放入某个集合中,并以动态方式获取您想要的那些。
from operator import * str_ops = {'<':lt,'>':gt,'==':eq} # etc op = str_ops.get(my_operator) if op: result = op(lhs,rhs)
以上是将运算符的字符串表示形式映射到其实际动作的一种方法。