想问问,21讲,内嵌和闭包这一讲,内嵌函数返回带不带()问题
想问问,这一讲中,为什么闭包一个例子 def FunX(x):
def FunY(y):
return x*y
return FunY
内嵌函数 return funY,这里FunY不带()??
而另外例子:
def Fun1():
x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2()
内嵌函数Fun2(),要带上()??? 带括号的代表返回这个函数的返回值(一定返回),不带括号的返回这个函数对象(可以选择是否调用) return FunY 是返回一个函数对象,而不是返回函数返回值 函数中小括号很重要,无论何时都会带上(就算没有参数) 1、不带括号时,调用的是这个函数本身,是整个函数体,是一个函数对象,不需等该函数执行完成
2、带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果
要注意的是:如果函数本身带有参数的时候,带括号就就必须带参数,同理函数本身不带参数,带括号就不能带参数
如果对你有帮助,记得给个最佳答案~{:10_287:}
pyrhon萌新# 发表于 2020-5-18 17:10
函数中小括号很重要,无论何时都会带上(就算没有参数)
返回函数加括号干什么? 永恒的蓝色梦想 发表于 2020-5-18 17:25
返回函数加括号干什么?
没考虑到诶 qiuyouzhi 发表于 2020-5-18 16:56
带括号的代表返回这个函数的返回值(一定返回),不带括号的返回这个函数对象(可以选择是否调用)
那为啥第一个例子返回的不是对象,而是值。把函数改了
def FunX(x):
def FunY():
return x*x
return FunY
>>> FunX(2)
<function FunX.<locals>.FunY at 0x02046C00>就返回对象,不是值了。两个例子究竟差别在哪? wymanl 发表于 2020-5-18 17:57
那为啥第一个例子返回的不是对象,而是值。把函数改了
def FunX(x):
def FunY():
第一个带了括号呀
带了括号就是调用函数了 永恒的蓝色梦想 发表于 2020-5-18 16:56
return FunY 是返回一个函数对象,而不是返回函数返回值
那为啥第一个例子返回的不是对象,而是值。把函数改了
def FunX(x):
def FunY():
return x*x
return FunY
>>> FunX(2)
<function FunX.<locals>.FunY at 0x02046C00>就返回对象,不是值了。两个例子究竟差别在哪? Twilight6 发表于 2020-5-18 17:14
1、不带括号时,调用的是这个函数本身,是整个函数体,是一个函数对象,不需等该函数执行完成
2、带括号( ...
我主要是搞不明白内嵌函数,为啥里面内嵌的函数返回,不带(),但返回的是值而不是对象 wymanl 发表于 2020-5-18 18:00
我主要是搞不明白内嵌函数,为啥里面内嵌的函数返回,不带(),但返回的是值而不是对象
带括号就是返回函数值
不带括号返回地址(指针,对象指针)
python游戏规则就是如此,没有为什么 wymanl 发表于 2020-5-18 17:58
那为啥第一个例子返回的不是对象,而是值。把函数改了
def FunX(x):
def FunY():
没加括号,没有调用 wymanl 发表于 2020-5-18 18:00
我主要是搞不明白内嵌函数,为啥里面内嵌的函数返回,不带(),但返回的是值而不是对象
因为这个是闭包的部分概念吧
1,需要传递函数本身这个对象时,不要加括号。
而在执行这个函数的时候,需要加括号。
2,函数在 python 中是对象,可以直接像变量一样赋值的,加上括号为 函数调用表达式,注意 python 中的官方说法,不是加不加括号的问题,而是函数执行的语法就是这样。
这样解释能懂吗?
Twilight6 发表于 2020-5-18 18:32
因为这个是闭包的部分概念吧
这样解释能懂吗?
感谢回答,不明白,我再重温一下教程 wymanl 发表于 2020-5-18 20:02
感谢回答,不明白,我再重温一下教程
嗯,知乎和简书上也可以去查查,那边大佬非常多 {:10_266:}
页:
[1]