回答
有一個有點混亂,因爲S
實際上是兩件事情。
它的第一件事是SingletonRegistry
。 SymPy中的幾個類經常出現,它們是單個化的,也就是說,使用一些元編程,它們被設計爲只能被實例化一次。例如,每次創建Integer(0)
時,都將返回相同的實例Zero
。所有單例實例都是S
對象的屬性,因此Integer(0)
也可以作爲S.Zero
訪問。單件化提供了兩個優點:它節省了內存,並且允許快速比較。它可以節省內存,因爲無論單例對象在內存表達式中出現多少次,它們都指向內存中的同一單個實例。快速比較來自於您可以使用is
比較Python中的確切實例(通常,您需要使用==
來比較)。因此,您可以測試a is S.Zero
以檢查a
是否爲Integer(0)
實例。
大多數情況下,某些對象被單例化的事實是一個您不需要擔心的實現細節。的S
爲最終用戶的主要優點是能夠在其他方面很難輸入,像S.Half
(而不是Rational(1, 2)
),或S.true
(側注某些情況下,便利的訪問:S.true
是True
的SymPy版本不同於True
,它不從int
子類,所以你可以寫的東西像~S.true
(不是真的),它會給S.false
(對比度與~True
,這給-2
,這是不假的布爾值)。
第二件事是是sympify
的快捷方式。sympify
是將Python對象(如int(1)
)轉換爲SymPy對象(例如Integer(1)
)的函數。它還將表達式的字符串形式轉換爲像sympify(x**2) -> Symbol("x")**2
這樣的SymPy表達式。 S(1)
與sympify(1)
(基本上,S.__call__
已被定義爲呼叫sympify
)是相同的。
這是爲了方便,因爲S
是單個字母。這對定義有理數很重要。考慮像x + 1/2
這樣的表達式。如果直接在Python中輸入,則它將評估1/2
並給出0.5
(或者Python 2中的0
,因爲整數除法),因爲這兩個參數都是int
s。但是,在SymPy中,通常需要兩個整數的商給出一個確切的有理數。 Python的評估工作方式,至少運營商的一方必須是SymPy評估接管的SymPy對象。你可以把它寫成x + Rational(1, 2)
,但這是更多的輸入。較短的版本是x + S(1)/2
。由於S(1)
返回Integer(1)
,該部門將返回一個Rational
類型,因爲它將調用Integer.__div__
,它知道如何返回Rational
。
所以,這意味着如果我寫'如果f是S.true'(其中'f'是一個表達式)將只檢查f是否爲真,如果是則它進一步檢查條件。 –
我解釋一下吧@asmeurer *注意:這是參考模塊'sympy.solvers.solveset'行'837' [link](https://github.com/Yathartha22/sympy/blob/master /sympy/solvers/solveset.py) –
@Yathartha是的,這是正確的。 – asmeurer
許多人已經鏈接,S
是用於訪問單身人士。每the source,S
是class SingletonRegistry
的一個實例。 S
做兩兩件事:
- ,您可以訪問如
S.One
和S.Zero
情況下,它代表代表根據自己的常量基本常數 - ,您可以創建或訪問單身(例如,
S(1)
)。
使用單例的原因是,您可以將對象與is
而不是==
進行比較。 is
更快,但只有當您知道肯定您的1
與您正在測試的1
相同時纔有效。 The code舉了一個例子:
>>> Basic() is Basic()
False
>>> MySingleton() is MySingleton()
True
>>> S.MySingleton is MySingleton()
True
現在,如果它是 '如果f是S.true',其中f是一個表達式(比如'x + 1')。這意味着什麼? –
@Yathartha它檢查'f'完全返回['True' singleton](http://docs.sympy.org/latest/modules/logic.html#sympy.logic.boolalg.BooleanTrue)。這意味着什麼取決於'f'。我不知道「x + 1」如何返回一個布爾變量,我很抱歉地說。 – cxw
還是謝謝! @cxw。 我有我的懷疑位清除.. –
- 1. 什麼「%。* s」在asprintf中表示?
- 2. 「pacman -S」中的「-S」代表什麼?如果是這樣,什麼?
- 3. 什麼是「S」,在「故宮我-S」
- 4. 什麼是:%S在vim中做什麼?
- 5. 什麼是「sed s _。*/_」在做什麼?
- 6. 什麼是#用%s
- 7. Golang什麼是「%!s」
- 8. 是什麼`\\ s`正則表達式中
- 9. 正則表達式/^\ s * $/do是什麼?
- 10. IIS cgi:「%s」的含義是什麼%s
- 11. 爲什麼不是[\\ s *]等同於\\ s *?
- 12. Emacs revert-buff(s-u):什麼是s-u?
- 13. 什麼!s || !*的意思? (S是char *)
- 14. 正則表達式\\ s *,\\ s *做什麼?
- 15. 什麼是%s和%d?
- 16. ACORD AL3 - 什麼是「?」s
- 17. 什麼是.S文件?
- 18. ld -s是什麼意思?
- 19. 什麼是NamedPipeServerStream和NamedPipeClientStream(s)?
- 20. 什麼是S#arp架構?
- 21. dot(graphviz):什麼是「type = s」?
- 22. 什麼是com.sun.media.sound.PortMixer-s類?
- 23. '$ path =〜s |/$ ||'是什麼在Perl中做?
- 24. 什麼是(s/g)在TextView中的etFreezesText?
- 25. %s在Python中的含義是什麼?
- 26. %。* s在printf上代表什麼?
- 27. 有什麼是S表達式什麼是XPATH是用於XML的?
- 28. 這個正則表達式符合什麼? /([^「^ \ s] +)\ s * |」([^「] +)」\ s */g
- 29. 我不明白什麼是「S」指的在S =「1」,「S = 2」等在SpreadsheetDocument OpenXML中
- 30. 在JavaScript中,符號/ \ s *; \ s * /是什麼意思?
[Singleton](http://docs.sympy.org/0.7.1/modules/core.html#module-sympy.core.singleton)。 – erip
我投票結束這個問題作爲題外話,因爲它沒有顯示研究工作。 – erip
@erip我只是試圖尋找答案,它對我來說實際上並不明顯!我不會關閉。此外,「Singleton」的文檔不太明確說明它的含義或何時使用它:)。 – cxw