1樓:逆鱗
2021.1
py3.8的海象運算子可以相當於讓這個語句有了返回值x=(y:=1)
就可以正確賦值了,y=1沒有返回值,但是y:=1返回了y
2樓:長頸鹿大俠
感謝當時各位的回答。提問時剛入CS專業不久,因為先學的C,所以學python的時候產生的這個賦值語句返回值的問題,有趣的是現在python(>=3.8)也有了類似的設計——海象操作符。
有朋友也已經在回答中提到過了,感興趣可以去看看相關資料。
3樓:
這個 feature 叫表示式賦值 or 賦值表示式 Assignment Expressions。
Python的表示式操作是不會像C語言一樣,產生返回值的,所以不能用式子來賦值。
但是!Python 3.8 中的 PEP 572 支援表示式賦值了!
>>> b = 1
>>> (a := b) == 1
True
具體用法可以看:PEP 572
和 https://
中的介紹。
我的專欄:
流浪漢仔:[Python]算數優先順序
4樓:木頭人
python的賦值是引用傳遞,只有值傳遞才能 x=(y=1) 這樣使用,所以 C 能用,Python 中不能用,涉及到他們對記憶體的管理方式,下面簡單說明。
x=y=1
Python 賦值的流程如下:
先在記憶體中建立'1'的物件,然後將記憶體位址指標傳遞給y, 在將y 引用的位址傳遞給x,在這中間賦值時不會產生返回值,python的賦值只是引用傳遞而已。
x=(y=1) 由於它傳遞的是引用位址,右邊 y=1將它賦值給 x 時該等式不成立,你是傳引用位址給y給x, 還是傳 1 物件給 x;再說python認為 y 和 1 是兩個物件,y 是1的引用指標物件,1 是記憶體實際存在的1物件。
C語言的賦值是值的傳遞, y=1 是個整體,他就是值1,所以他能將 y=1 傳遞給 x 。
5樓:那美克
x = (y=1)
先執行括號內計算,但 = 屬於賦值,不屬於運算子,所以會報錯
至於返回值,我在 Jupyter 裡面敲過,反正結果跟返回 None 沒什麼區別
C 的函式返回值是如何構造的?
你如果是想問為什麼少輸出乙個new的話,那是因為F在隱式建立返回值物件的過程中,呼叫的是複製建構函式A const A 而不是預設的無參建構函式A 所以你自定義的無參建構函式A 並沒有捕獲到這次構造。include using namespace std struct A A A const A o...
JS 建構函式返回值的問題
如果return的值是object,那麼就返回這個return的object,前面的this就都是無效的 如果return的值型別不是object,就還是返回this 搬運一下Annotated ES5 11.2.2 The new Operator The production NewExpres...
為什麼不把要返回元素直接當成函式的返回值返回呢?
phoenix bool get elem elem get throw elem get bool 回字的四種寫法 iter get tuple get 想到再加 ant 有些時候乙個返回不夠用啊,函式中好幾個值需要傳出時只能通過引數傳遞實現,而不能簡單的通過函式返回值。當然,你也可以設計乙個資料...