2012-08-04 21 views
9

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

+5

Hayır. Bu, python dilinin kendisinin bir parçasıdır. Dil bu şekilde ayrıştırır. – jdi

+1

@jdi Bu bir cevap, neden olmasın? – kojiro

+0

@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

cevap

8

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.

+6

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

+0

@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

+0

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. –

6

Bu şekilde bu mekanizma hile:

  1. Geçersiz kıl hesaplamaları yapmamak bütün operatörler ama bazı nesne sarılmış talimatların listesini oluşturmak.
  2. 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.

İlgili konular