[問題] 新手f-string問題

看板Python作者 ( 完。整)時間3年前 (2021/06/18 13:19), 編輯推噓12(12025)
留言37則, 10人參與, 最新討論串1/1
大家好 小弟新手 最近看O'relly自學python 做到一個練習題想請教大家 >>> class Laser: def does(self): return 'disintegrate' >>> class Claw: def does(self): return'crush' >>> class SmartPhone: def does(self): return 'ring' >>> class Robot: def __init__(self): self.Laser=Laser() self.Claw=Claw() self.SmartPhone=SmartPhone() def does(self): return ''' My laser, to %s. My claw, to %s. My smartphone, to %s.'''% ( self.Laser.does(), self.Claw.does(), self.SmartPhone.does() ) >>> robbie = Robot() >>> print(robbie.does()) 結果是 My laser, to disintegrate. My claw, to crush. My smartphone, to ring. 請問我把它改成f-string後,最後面寫成 >>> def does(self): return f''' I have many functions. My laser can {self.Laser.does()} My claw can {self.Claw.does()} My smartphone can {self.SmartPhone.does()} ''' 卻出現 My laser can <__main__.Laser object at 0x000001D36C7C7A30> My claw can <__main__.Claw object at 0x000001D36C7C7A90> My smartphone can <__main__.SmartPhone object at 0x000001D36C7C7310> 想請教大家,問題是出在哪裡? 在此先謝謝了! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.22.165.64 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1623993567.A.C0A.html

06/18 13:47, 3年前 , 1F
f’{self.xxx}’
06/18 13:47, 1F

06/18 15:02, 3年前 , 2F
請問是改成f'''...{self.Laser.does}...'''這樣寫法嗎?還是
06/18 15:02, 2F

06/18 15:02, 3年前 , 3F
會出現一樣的情況
06/18 15:02, 3F

06/18 16:35, 3年前 , 4F
是不是忘記call self.xxx.does() ? 至少3.8沒問題
06/18 16:35, 4F

06/18 16:38, 3年前 , 5F
看起來應該沒問題 你試看看print(self.Laser.does())
06/18 16:38, 5F

06/18 16:40, 3年前 , 6F
回4樓 這樣是可以的 會出現'disintegrate'
06/18 16:40, 6F

06/18 16:45, 3年前 , 7F
Python版本?
06/18 16:45, 7F

06/18 16:48, 3年前 , 8F
至少要大於>=3.6 才有f""
06/18 16:48, 8F

06/19 09:04, 3年前 , 9F
樓上正解
06/19 09:04, 9F

06/19 21:24, 3年前 , 10F
謝謝各位大大的建議!我的版本是3.9
06/19 21:24, 10F

06/20 01:01, 3年前 , 11F
f-string裡面放的是變數不是函式
06/20 01:01, 11F

06/20 03:24, 3年前 , 12F
f-string是runtime evaluation 放function是沒問題的
06/20 03:24, 12F

06/20 14:53, 3年前 , 13F
一切都是物件
06/20 14:53, 13F

06/21 11:41, 3年前 , 14F
我測這個沒有發生問題啊
06/21 11:41, 14F

06/21 11:43, 3年前 , 15F
而且原po那個結果很明顯是直接印到了 self.Laser 這些物件
06/21 11:43, 15F

06/21 11:44, 3年前 , 16F
本身而沒有印到 self.Laser.does() 的傳回值
06/21 11:44, 16F

06/21 11:45, 3年前 , 17F
印得出那個東西,首先就排除了版本不具備f-string的問題
06/21 11:45, 17F

06/21 11:46, 3年前 , 18F
其次,如果是少了括號打成 self.Laser.does,輸出會是
06/21 11:46, 18F

06/21 11:46, 3年前 , 19F
My laser can <bound method Laser.does of <__main__.Las
06/21 11:46, 19F

06/21 11:46, 3年前 , 20F
er object at 0x000001F0BA383DF0>>
06/21 11:46, 20F

06/21 11:47, 3年前 , 21F
印到的東西會很明確說他印到了Laser裡面的does這個method
06/21 11:47, 21F

06/21 11:47, 3年前 , 22F
,所以也可以排除
06/21 11:47, 22F

06/21 11:47, 3年前 , 23F
那個結果完全就是印到 self.Laser 本身,但原Po又打出來說
06/21 11:47, 23F

06/21 11:48, 3年前 , 24F
他的Code就是 {self.Laser.does()} ,我重現不出來這個錯
06/21 11:48, 24F

06/21 11:49, 3年前 , 25F
我只能懷疑要嘛其實實際Code是 {self.Laser} ,不然另一個
06/21 11:49, 25F

06/21 11:50, 3年前 , 26F
可能是其他class的does()不知為何內部改成return self
06/21 11:50, 26F

06/22 08:46, 3年前 , 27F
試試看把每個does的return都改成f string
06/22 08:46, 27F

06/24 04:26, 3年前 , 28F
謝謝上面兩位大大的講解!手邊現在沒電腦,後天來試試看!
06/24 04:26, 28F

06/25 01:25, 3年前 , 29F
印到記憶體位置了,但code本身看起來沒問題應該會回傳字
06/25 01:25, 29F

06/25 01:25, 3年前 , 30F
串,怪哉
06/25 01:25, 30F

06/26 04:54, 3年前 , 31F
今天把python更新到3.9.5,莫名其妙就可以了。還是十分感謝
06/26 04:54, 31F

06/26 04:54, 3年前 , 32F
各位先進的講解!
06/26 04:54, 32F

06/26 06:55, 3年前 , 33F
原先版本是3.9.幾?
06/26 06:55, 33F

06/26 20:33, 3年前 , 34F
可是我測的時候只用3.8.10也是沒問題
06/26 20:33, 34F

06/29 02:14, , 35F
原先是3.9.0,但真的跟上面某些留言講的一樣,實在不懂為什
06/29 02:14, 35F

06/29 02:14, , 36F
麼本來不行
06/29 02:14, 36F

06/29 07:49, , 37F
3.9.0我測試也沒問題 所以可能原本的環境出了啥問題
06/29 07:49, 37F
文章代碼(AID): #1Wp2pVmA (Python)
文章代碼(AID): #1Wp2pVmA (Python)