py新手入门,有基础不会的地方请各位同学帮帮忙
在小甲鱼py零基础20讲的课后作业中,以下这题为什么返回 funIn后面可以不加括号呢?又为什么要用 funOut双括号来访问?5. 请问如何访问 funIn() 呢?
def funOut():
def funIn():
print('宾果!你成功访问到我啦!')
return funIn
区别于上一题,这里你就需要用 funOut()() 访问啦:
funOut()()
宾果!你成功访问到我啦!
当然你也可以“曲线救国”:
go = funOut()
go()
宾果!你成功访问到我啦!
本帖最后由 傻眼貓咪 于 2021-9-15 21:22 编辑
你的代碼其實可以寫成:(我將 funIn 拿出來,運行結果一樣,這樣你比較容易明白)
def funOut():
return funIn
def funIn():
print('宾果!你成功访问到我啦!')
funOut()() # 宾果!你成功访问到我啦!
go = funOut()
go() # 宾果!你成功访问到我啦!
函數帶有括號 () 表示 執行函數+返回值(如果有返回值,默認為 None),沒有括號 表示 返回內存地址
A 表示返回函數 A 內存地址
A() 表示執行函數+返回值(如果有返回值)
A()() 表示執行函數+返回值(如果有返回值)+返回值(如果有返回值) # 這邊你會發現重複 2 次返回值,那麼返回什麼值呢?請看以下示例:
def A():
return B
def B():
return 13
print(A)
print(A())
print(A()())
print("------------------------")
print(B)
print(B())<function A at 0x0000021053BEDF70>
<function B at 0x00000210540DBA60>
13
------------------------
<function B at 0x00000210540DBA60>
13以上打印 A,A() 和 A()() 都不同結果,但是你會發現答案了,打印 A 返回內存地址 A,A() 返回內存地址 B(這裡補充一下 B 的內存地址就是 A 的返回值),A()() 返回 B 值
結論:
A() 就是 B
A()() 就是 B()
至於為什麼會打印?只要有括號 () 就會執行函數 A()() 表示 B() 也就表示執行函數 B(打印) 因为返回时没有括号,所以再调用时需要把括号补上,第一个括号是从属于外函数,第二个括号才是内函数的调用 不加括号代表的是函数本身,在python中指向存储的地址
加括号代表的是函数的执行
比方说print是打印员这个身份
print()是打印员执行打印的动作
所以你返回值不加括号就是返回函数本身
返回值加括号就是返回函数的执行
funOut()是funIn本身
funOut()()是funIn()的执行 傻眼貓咪 发表于 2021-9-15 20:25
本帖最后由 傻眼貓咪 于 2021-9-15 21:22 编辑
你的代碼其實可以寫成:(我將 funIn 拿出來,運行結果一 ...
感谢大佬的耐心讲解~笔芯{:10_288:} 逃兵 发表于 2021-9-15 21:34
不加括号代表的是函数本身,在python中指向存储的地址
加括号代表的是函数的执行
我懂了,谢谢啦{:10_287:} wp231957 发表于 2021-9-15 21:21
因为返回时没有括号,所以再调用时需要把括号补上,第一个括号是从属于外函数,第二个括号才是内函数的调用
我懂了,谢谢啦{:10_287:} 带括号是函数,也就是方法,那就需要运行内部的东西。
不带括号是内存地址,直接返回内存地址,没有可运行的东西
页:
[1]