use*_*142 18 python python-3.x
考虑以下:
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解释器允许这种语法而不是引发属性错误,这在我的情况下会节省我宝贵的时间.
roi*_*ppi 24
如上所述,函数和方法是一流的对象.你通过在末尾抛出一些括号(括号)来调用它们.但看起来你想要更多的动机,为什么python甚至让我们这样做.如果功能是一流的,我们为什么要关心?
有时您不想调用它们,您希望传递对callable本身的引用.
from multiprocessing import Process
t = Process(target=my_long_running_function)
如果你把括号放在上面,它会my_long_running_function在你的主线程中运行你的; 几乎没有你想要的!您希望为Process您的callable 提供一个引用它将在新进程中运行的引用.
有时你只想指定可调用的东西并让别的东西......
def do_something(s):
    return s[::-1].upper()
map(do_something,['hey','what up','yo'])
Out[3]: ['YEH', 'PU TAHW', 'OY']
(map在这种情况下)填写其参数.
也许你只想将一堆callables放入一些集合中,然后以动态的方式获取你想要的那个.
from operator import *
str_ops = {'<':lt,'>':gt,'==':eq} # etc
op = str_ops.get(my_operator)
if op:
    result = op(lhs,rhs)
以上是将运算符的字符串表示映射到其实际操作的一种方法.
Mar*_*som 18
Python中的函数和方法也是对象本身.因此,您可以像对待任何其他对象一样比较它们.
>>> type(a.get_value)
<type 'instancemethod'>
>>> type(a.get_value())
<type 'int'>
通常情况下,你不会将方法与其他方法或其他任何方法进行比较,因为它并不是非常有用.一个有用的地方是你想将一个函数传递给另一个函数.
def mul(a, b):
    return a * b
def add(a, b):
    return a + b
def do(op, a, b):
    return op(a, b)
do(add, 2, 3)  # return 5
print(a.get_value() == b.get_value)   # 1
print(a.get_value() == b.get_value()) # 2
print(a.get_value == b.get_value)     # 3
1)调用a.get_value()的返回值等于方法b.get_value吗?
2)a.get_value()是否返回与b.get_value()相同?
3)方法参考a.get_value是否等于方法参考b.get_value?
这是完全有效的Python :)
| 归档时间: | 
 | 
| 查看次数: | 24234 次 | 
| 最近记录: |