olarak değiştirin. Bazı Python işleçlerini, aritmetik ve boolean'ı aşırı yükledim. Python öncelik kuralları yürürlükte kalmıştır, bu aşırı yüklemeli operatörler için doğal değildir, bu da ifadelerde bol parantezlere yol açar. Python'un önceliklerini "aşırı yükleme" nin bir yolu var mı?Operatör önceliğini Python
cevap
Hayır. Bu, python dilinin kendisinin bir parçasıdır. Dil bu şekilde ayrıştırır.
Resmi alıntı: Evaluation order
Python soldan sağa ifadeleri değerlendirir. Bir ödevi değerlendiren iken, sağ taraf sol tarafından önce değerlendirilir.
diğer tırnak:
Python:Basics:Numbers and operators
karışık operatörleri ile matematiksel işlemleri, Python önceden belirlenmiş bir göre, ilk gerçekleştirmek için, hangi işlemleri belirler dikkat etmek önemlidir olan öncelik. Bu öncelik, çoğu programlama diline benzer bir önceliği izler. Python PEMDAS order of operations uyduğunu Python Programming/Operators
Not.
Asıl sorun, python kod ayrıştırılırken operatör önceliğini uygulamaktadır.Bu ilk noktada, python'un nesnelerin hangi tipte ifadeye dahil olduğunu (kod henüz yürütülmediğinden) bilmesi mümkün değildir. Bu nedenle, operatör önceliğini değiştirmek mümkün olsaydı, ortak matematik ifadeleri de dahil olmak üzere tüm ifadeler için bunu yaparsınız. Şimdi, eğer mümkün olsaydı, standart kütüphanede ve herhangi bir üçüncü parti kütüphanesinde ne tür bir kaosun olacağını hayal edin. – liori
@liori: Güzel ekleme! Aynı değiştirilmiş tercümanın altında sizinkilerle karıştırılmış herhangi bir 3. parti kodu kullanamazsınız. – jdi
Sadece Python'un ne yaptığını belirtmek için değil, yapmak istediğim şeyi yapmanın neden mümkün olmadığını açıklamak için teşekkür ederiz. –
Bu şekilde bu mekanizma hile:
- Geçersiz kıl hesaplamaları yapmamak bütün operatörler ama bazı nesne sarılmış talimatların listesini oluşturmak.
- Kendi parantez operatörünüzü ekleyin (örn.
_
işlevi olarak).
Örnek:
>>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3)
>>> a + b * c
MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)])
ayraçlar: _
Yani öncelikleri tersine eğer
(sırayla bunun içinde zorunlu olarak) ifade değerlendiren bir fonksiyonudur
>>> a + _(b * c)
Not bu alırsınız:
>>> _(a + b * c)
MyNumber(21)
PS. Django, Q
ve F
operatörleri ile benzer bir hile yapar.
- 1. Python iş parçacıklarının zamanlama önceliğini denetleme?
- 2. Kitaplık önceliğini ayarlama
- 3. Operatör önceliğini dikkate almak için Scala Ayrıştırıcı Kombinatorlerini kullanarak kod nasıl değiştirilir?
- 4. Bir işlemin önceliğini nasıl değiştiririm?
- 5. Operatör aşırı yüklerken python türleri mi değişir?
- 6. , iş parçacığı önceliğini veya işlem önceliğini değiştirmek için güzel() kullanılıyor mu? .? :
- 7. Python'da şartlı operatör mü?
- 8. Bir sınıfa bir kimliğin önceliğini nasıl verebilirim?
- 9. nasıl MSMQ'deki bir mesajın önceliğini değiştirebilir?
- 10. Üçlü Operatör Algoritması ile Ayrışan Üçlü Operatör
- 11. Operatör GİBİ
- 12. VB.NET operatör
- 13. Java + = operatör?
- 14. VB.NET: = Operatör
- 15. Scala, ilişkisel ve eşitlik operatörlerinin göreli önceliğini neden değiştirdi (Java ile karşılaştırıldığında)?
- 16. Garip operatör yükleme, "operatör T &() const noexcept {return * _ptr;}"
- 17. can koşullu operatör örtük ...
- 18. kullanma modülü operatör
- 19. Morfin sorgu veya operatör
- 20. Operatör Öncelik - Ekspresyon Değerlendirmesi
- 21. Kapalı operatör mü?
- 22. Operatör önceliği boost :: spirit?
- 23. Yeni operatör nasıl çalışır?
- 24. Yakasız üçlü operatör operatörü
- 25. CouchDB -gt: beklenmedik operatör
- 26. hascode() ve == operatör sözleşmesi?
- 27. Sorun Delphi operatör "in" ...
- 28. C++ aritmetik eğer operatör
- 29. Koşullu operatör Hız
- 30. Üçlü operatör (alternatifler)
Hayır. Bu, python dilinin kendisinin bir parçasıdır. Dil bu şekilde ayrıştırır. – jdi
@jdi Bu bir cevap, neden olmasın? – kojiro
@kojiro: Sadece resmi python dokümanlar için değiştirilemediğini belirten bir bağlantı bulamadığım için. Bununla birlikte tonlarca 3 parti bağlantı buldum. – jdi