python - 在python中调用带括号和不带括号的函数有什么区别?

标签 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/

相关文章:

python - Pandas 嵌套 for 循环在创建的不同数据帧上插入多个数据

python - 在Python中使用正则表达式解析电子邮件 header

python - 如何删除 numpy.ndarray 中包含非数字值的所有行

python - 列表是按值传递还是按引用传递?

python - 导入错误: No module named SQLAlchemy with Anaconda

python - 使用 Python 将十六进制文本转换为阿拉伯文本

python - 将 31-Jul-03 样式更改为 mysql 的日期对象

python - 在 Python 中标记代码块

python - 函数可以在 for 循环语句中返回两次吗

python - 在 pandas/numpy 中运行应用函数时访问元素的 2D 索引?