redaiconglin 发表于 2021-1-27 17:25:49

python中函数名后加括号和不加括号的区别

麻烦老师这个函数中
def funOut():
    def funIn():
      print('宾果!你成功访问到我啦!')
    return funIn
funOut()()
和这个函数
def funOut():
    def funIn():
      print('宾果!你成功访问到我啦!')
    return funIn()
funOut()
这两个函数中最后面return返回函数名一个有括号和一个没有括号这两个有什么区别。谢谢


sunrise085 发表于 2021-1-27 17:36:53

有括号得到的是函数执行的返回值,
没有括号得到的是函数句柄,是一个可执行函数

冬雪雪冬 发表于 2021-1-27 17:38:33

return funIn是返回函数本身,return funIn()是返回函数的返回值。
例如
a = abs(-8),返回的是8
a= abs,返回的是abs函数本身,可以再a(-8),这时得到的是8

Peteryo01223 发表于 2021-1-27 17:38:45

本帖最后由 Peteryo01223 于 2021-1-27 18:12 编辑

两个函数,结果一致。
1. return funIn,对应后面的 funOut()()。
2. return funIn(),对应后面的 funOut()。

其实可以这么简化地理解:一共就2个括号(),给谁不给谁,反正就两个(),总量不能变。

不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成。
带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果。

hhjdsd 发表于 2021-1-27 17:40:17

第一个函数中的返回值为funIn,所以最后要用funOut()(),也就是说“funOut()()”中,第一个括号是调用funOut函数,然后返回funIn,接着第二个括号再调用funIn。()
第二个函数中的返回值为funIn(),也就是finOut函数就是用来调用funIn的,所以就只需要一个括号来调用funOut。

redaiconglin 发表于 2021-1-28 08:49:25

冬雪雪冬 发表于 2021-1-27 17:38
return funIn是返回函数本身,return funIn()是返回函数的返回值。
例如
a = abs(-8),返回的是8


感谢老师的讲解
页: [1]
查看完整版本: python中函数名后加括号和不加括号的区别