Python中的括号';s方法调用

Python中的括号';s方法调用,python,python-3.x,Python,Python 3.x,下面是一个简单的Python代码 for item in sorted(frequency, key=frequency.get, reverse=True)[:20]: print(item, frequency[item]) 但是,如果调用frequency.get()而不是frequency.get,它将给我一个错误“get预期至少1个参数,get 0” 我来自鲁比。在Ruby中,get和get()。它在Python中不一样吗 例如,下面是对get()和非get的描述。什么是get?

下面是一个简单的Python代码

for item in sorted(frequency, key=frequency.get, reverse=True)[:20]:
  print(item, frequency[item])
但是,如果调用
frequency.get()
而不是
frequency.get
,它将给我一个错误
“get预期至少1个参数,get 0”

我来自鲁比。在Ruby中,
get
get()。它在Python中不一样吗


例如,下面是对
get()
和非
get
的描述。什么是
get

frequency.get
描述方法本身,而
frequency.get()
实际调用该方法(并且错误地没有给它任何参数)。你是对的,这与Ruby不同

例如,考虑:

frequency = {"a": 1, "b": 2}
x = frequency.get("a")
在这种情况下,
x
等于
1
。但是,如果我们这样做了:

x = frequency.get
x
现在将成为一个函数。例如:

print x("a")
# 1
print x("b")
# 2

这个函数就是要传递给排序后的

嗯,语法和操作都不同。。所以,不,它们不一样。从一个教程开始,接受该语言的本来面目。Ruby方法通过消息传递工作-必须做额外的工作才能得到
方法,但是Python方法通过直接的函数求值工作。粗略的Python->Ruby等价物是:
get
->
:get
frequency.get
->
frequency.Method(:get)
frequency.get()
->
频率。获取
。Ruby进行隐式调用,因此它需要一些其他语法来引用方法本身;Python进行显式调用,这意味着调用需要括号,但因此不需要任何特殊语法来引用函数。这是一个折衷,所以不同的语言会有不同的做法。我知道有人会评论说,这不是真正的折衷,如果你只是把所有的函数,比如说Haskell,这是真的,这只是一个不同的折衷,使得这个不相关。