2.3. Matematik işlemleri¶
Python kutudan çıktığı haliyle bir hesap makinesi gibi çalışır. Bu sayfa en sık kullanacağınız operatörleri kapsar: sayılar üzerinde aritmetik, boolean üreten karşılaştırmalar, koşulları birleştiren mantıksal operatörler ve donanım düzeyindeki işler için bit düzeyinde operatörler.
2.3.1. Aritmetik¶
int ve float değerleri üzerindeki standart aritmetik operatörler:
+– toplama-– çıkarma (veya ön ek olarak negatif alma:-x)*– çarpma/– bölme. Her iki işlenen tam sayı olsa bile her zaman birfloatdöndürür.//– taban bölme. Eksi sonsuza doğru yuvarlanmış tam sayı bölümünü döndürür.%– mod (kalan).**– üs alma (2 ** 10değeri 1024’tür).
>>> 7 / 2
3.5
>>> 7 // 2
3
>>> -7 // 2
-4
>>> 7 % 2
1
>>> 2 ** 16
65536
Karışık tipli aritmetik, tam sayıları otomatik olarak float’a yükseltir:
>>> 3 + 0.5
3.5
Bileşik atama, kompakt bir yerinde güncelleme için operatörü = ile birleştirir:
counter = 0
counter += 1 # equivalent to counter = counter + 1
counter *= 2 # works for *= /= //= %= **= too
Operatör önceliği geleneksel sırayı izler: önce **, sonra tekli -, sonra *, /, // ve %, ardından + ve -. Emin olmadığınızda parantez kullanın – çalışma zamanında hiçbir maliyetleri yoktur.
2.3.2. Karşılaştırma¶
Karşılaştırma operatörleri bir bool (True veya False) döndürür:
==ve!=– eşit / eşit değil.<,<=,>,>=– sıralama.
>>> 3 == 3
True
>>> 3 == 3.0
True
>>> 3 < 5 <= 5
True
Son örnek bir zincirleme karşılaştırmadır ve tam olarak 3 < 5 and 5 <= 5 ifadesine eşdeğerdir.
Uyarı
= atama yapar; == karşılaştırır. if x = 5: ifadesi tam olarak bir sözdizimi hatasıdır çünkü Python bu ikisini sessizce karıştırmayı reddeder.
2.3.3. Boolean mantığı¶
Üç operatör boolean değerleri birleştirir:
and– yalnızca her iki taraf da doğru olduğundaTrue.or– taraflardan biri doğru olduğundaTrue.not– tek bir boolean değeri tersine çevirir.
and ve or operatörleri kısa devre yapar: sonuç bilinir bilinmez değerlendirmeyi durdururlar. False and slow_check() ifadesi asla slow_check fonksiyonunu çağırmaz.
and ve or ayrıca düz bir True veya False yerine işlenenlerinden birini döndürür; bu da varsayılan değerleri kompakt biçimde yazmanıza olanak tanır:
name = user_name or "anonymous" # "" / 0 / None are falsy
2.3.4. Bit düzeyinde operatörler¶
Donanım işleri için – yazmaç alanlarını paketleme, bitleri maskeleme, protokol başlıklarını ayrıştırma – bit düzeyinde operatörlere başvuracaksınız. Bunlar bir int değerinin ikili gösterimi üzerinde çalışır:
&– bit düzeyinde AND|– bit düzeyinde OR^– bit düzeyinde XOR~– bit düzeyinde NOT (birin tümleyeni)<<– sola kaydırma>>– sağa kaydırma
Bunları okurken ve yazarken onaltılık ve ikili sabit biçimleri uygundur:
>>> 0b1100 & 0b1010
8 # 0b1000
>>> 0b1100 | 0b1010
14 # 0b1110
>>> 0xFF ^ 0x0F
240 # 0xF0
>>> 1 << 8
256
>>> (0xABCD >> 8) & 0xFF
171 # extract the high byte
Her biri için bileşik biçimler vardır: |=, &=, ^=, <<=, >>=.
Not
and / or boolean değerler (veya doğruluk değerleri) üzerinde çalışır; & / | ise bitler üzerinde çalışır. Bunları karıştırmayın. 0b1100 and 0b1010 ifadesi 0b1010 olarak değerlendirilir çünkü her iki işlenen de doğrudur – bitleri işlerken genellikle istediğiniz şey bu değildir.
2.3.5. Kullanışlı sayı yerleşikleri¶
Bir avuç yerleşik fonksiyon, operatörlerin tek başına kapsamadığı yaygın sayısal işlemleri kapsar:
round()– en yakın tam sayı veya ikinci bir bağımsız değişken verildiğinde en yakınndigitsondalık basamak.round(x)için birint,round(x, n)için birfloatdöndürür. Eşitlikler (0.5,1.5, …) her zaman yukarıya değil, en yakın çift sayıya yuvarlanır.divmod()– tek bir çağrıda(quotient, remainder)döndürür. Bir niceliği birimlere bölmek için kullanışlıdır (saniyeleri dakika ve saniyeye, baytları sayfa ve ofsete).pow()– iki bağımsız değişkenli biçimde**ile aynıdır. Üç bağımsız değişkenli biçimpow(base, exp, mod), devasa ara değeri hiç gerçekleştirmeden(base ** exp) % modhesaplar; bu da büyük üsler için modüler üs almanın tek pratik yoludur.
>>> round(3.7)
4
>>> round(3.14159, 2)
3.14
>>> round(0.5) # ties go to even, not always up
0
>>> round(1.5)
2
>>> divmod(125, 60) # 125 seconds = 2 min, 5 sec
(2, 5)
>>> minutes, seconds = divmod(125, 60)
>>> pow(3, 4) # same as 3 ** 4
81
>>> pow(3, 100, 7) # (3 ** 100) mod 7, efficient
4
Tam sayıdan dizgeye taban dönüşümleri (bin, oct, hex) String methods and formatting bölümünde ele alınmıştır.
2.3.6. math modülü¶
Yaygın matematiksel fonksiyonlar math modülünde bulunur. Onu bir kez içe aktarın ve fonksiyonlarını noktalı bir ad aracılığıyla çağırın:
import math
print(math.sqrt(2)) # 1.4142135
print(math.sin(math.pi / 2)) # 1.0
print(math.floor(3.7)) # 3
print(math.log(100, 10)) # 2.0
MicroPython math modülü her zamanki olağan adayları kapsar (sqrt, exp, log, sin, cos, tan, atan2, floor, ceil, pi, e, …). Rastgele sayılar için random modülüne bakın; sabit noktalı bit işlemleri için yukarıdaki operatörler genellikle yeterlidir.
2.3.7. Karmaşık sayılar¶
Sanal bileşenler gerektiren sayısal işler için Python’da j son ekli sabitlerle (1 + 2j) bir complex tipi bulunur. cmath modülü, karmaşık girdiler için math modülünü yansıtır. Her ikisi de çoğu MicroPython derlemesinde mevcuttur ancak kamera işleri için nadiren gerekir; bunları kullanan kodu taşırsanız sizi şaşırtmasınlar diye esasen değiniyoruz.