<分区>
我有一个问题。假设我们有函数 hello()。带括号和不带括号的调用有什么区别?当我调用 hello() 时,它指的是一个值等于此函数的对象。或者我错了吗?当我不带括号调用它时会发生什么?
我想知道为什么
def hello():
pass
print(id(hello))
print(id(hello()))
返回不同的结果
4400606744
4398942536
标签 python
<分区>
我有一个问题。假设我们有函数 hello()。带括号和不带括号的调用有什么区别?当我调用 hello() 时,它指的是一个值等于此函数的对象。或者我错了吗?当我不带括号调用它时会发生什么?
我想知道为什么
def hello():
pass
print(id(hello))
print(id(hello()))
返回不同的结果
4400606744
4398942536
最佳答案
简答:参见 https://nedbatchelder.com/text/names.html更好地理解对象和用于指代对象的名称之间的区别。
当且仅您使用括号时,函数才会被调用。 hello()
调用函数; hello
只是一个绑定(bind)到函数的名称,例如,可以用来将函数对象作为参数传递给另一个函数。
def caller(f):
f()
def hello():
print("hi")
def goodbye():
print("bye")
caller(hello) # Prints "hi"
caller(goodbye) # Prints "bye"
关于您的更新,id
返回不同的值,因为每次调用 id
都会收到一个完全独立的对象作为其参数。使用 id(hello)
,id
获取函数对象本身。使用 id(hello())
,id
通过调用 hello
获取对象返回;和
x = hello()
print(id(x))
关于python - 在python中调用带括号和不带括号的函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46001292/