簡體   English   中英

如何修改python復數

[英]how to modify python complex number

創建后,Python復數是只讀的。

>>> x = complex(1,1)
>>> x
(1+1j)
>>> x.real=2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: readonly attribute

如何在不構建新復合體的情況下修改Python中的復數? 這似乎是不必要的限制。 為什么復雜的想法是這樣實現的?

Python中的所有數字(以及字符串)都是不可變的。 這使得計算在幾個方面變得更容易(即它使Python解釋器更具性能)並且通常不會造成太多麻煩。

要重用其他值的值,您可以這樣做,當然:

x = complex(2, x.imag)

Python的不可變數字有幾個原因:

1)通過允許多個變量指向同一對象來節省內存:

>>> x = 3 + 4j
>>> y = x
>>> x is y
True

2)不變性與可持續性密切相關。 它使數字適合用作字典鍵和集合元素:

>>> d = {}
>>> d[3 + 4j] = 'red'
>>> d[3 + 4j]
'red'

3)使用Python的自定義內存管理,這些對象往往會被重用而不是被重復分配和釋放。 這減輕了“創建新對象”的成本。

簡單來說:

如何在不構建新復合體的情況下修改Python中的復數?

你沒有。 您可以使用舊復數的元素(如果發現自己經常這樣做,則可以編寫函數來這樣做),也可以創建自己的復數類。

為什么復雜的想法是這樣實現的?

復數是數字類型,並且像所有python數字類型一樣,是不可變的。

更長的解釋:

您不能修改的int ,一float ,一個namedtuplefrozenset任何比你更可以修改的復數。 復數是不可變的,具有優點(其中最重要的一個就是可以將復數用作字典鍵)。 您將使用復數執行的大多數操作仍然是數學的,因此使其具有不變性(就像所有其他數字類型一樣)。 如果不是這種情況,請考慮創建自己的類,可能使用__slots__屬性。

我的建議:一些開發人員努力實現其數據結構的不變性。 它使編程和調試大大減少了復雜性。 python中的復數經過精心設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM