2.2. Değişkenler ve temel tipler

Bir değişken, = operatörüyle bir değere bağladığınız bir addır. Atamadan sonra ad, değerin kullanılabileceği her yerde kullanılabilir:

width = 320
height = 240
pixels = width * height
print(pixels)               # prints 76800

Önce = işaretinin sağ tarafı değerlendirilir, ardından sonuç soldaki ada bağlanır. Hiç atanmamış bir adı okumak NameError hatası verir.

Bir değişken yalnızca bir etikettir. Bir değere işaret eder – değer başka bir yerde bulunur ve aynı değerin herhangi bir sayıda etiketi olabilir.

Kutulanmış üç değere işaret eden üç etiket; bir etiketi yeniden atamak değeri değil, oku taşır.

Değişkenler değerlere işaret eden etiketlerdir. Bir değişkeni yeniden atamak etiketi taşır; etiketin daha önce işaret ettiği değeri değiştirmez.

2.2.1. Adlandırma kuralları

  • Adlar bir harf veya alt çizgi ile başlar ve harfler, rakamlar ve alt çizgiler içerebilir. frame_count ve _internal uygundur; 1st_frame ise bir sözdizimi hatasıdır.

  • Adlar büyük/küçük harfe duyarlıdır: Width ve width iki farklı değişkendir.

  • list, str, id() veya print() gibi yerleşik adları yeniden kullanmaktan kaçının – bunları gölgelemek bir hata vermez, ancak özgün yerleşik öğe betiğin geri kalanı için erişilemez hale gelir.

  • Yaygın kullanım: değişkenler ve fonksiyonlar için snake_case, değiştirmeyi düşünmediğiniz sabitler için ALL_CAPS, sınıf adları için CamelCase.

2.2.2. Temel tipler

Python’daki her değerin, hangi işlemleri desteklediğini belirleyen bir tipi vardır. En çok yazacağınız dört tip şunlardır:

  • int – pozitif veya negatif tam sayılar. MicroPython tam sayıları bellek izin verdiği kadar büyür. Sabitler düz rakamlar olarak yazılır: 0, 42, -7. Onaltılık (0x1A), sekizlik (0o17) ve ikili (0b1010) sabitler de geçerlidir ve yazmaçlar ile bit maskeleri için kullanışlıdır.

  • float – ondalık noktalı veya üslü sayılar: 3.14, 1.0, -0.5, 2e6 (= 2.000.000,0). Kameradaki tüm float değerleri IEEE 754 32-bit’tir – yaklaşık yedi anlamlı basamağa kadar kesindir.

  • boolTrue veya False iki sabitinden biri (büyük harf kullanımına dikkat edin).

  • str – tek veya çift tırnak arasındaki karakterler olarak yazılan metin: "hello", 'OpenMV'. Her iki tırnak stili de eşdeğerdir; dizge içinde geçen tırnak karakterlerini kaçırmaktan (escape) kurtulmanızı sağlayan hangisiyse onu seçin.

Hemen bilmeye değer beşinci bir değer daha vardır:

  • NoneNoneType tipinin tek değeridir. “değer yok” veya “henüz ayarlanmadı” anlamında kullanılır. Açıkça bir şey döndürmeyen fonksiyonlar örtük olarak None döndürür.

2.2.3. Tipleri kontrol etme ve dönüştürme

Yerleşik type() fonksiyonu herhangi bir değerin tipini döndürür:

>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>

Her tip aynı zamanda bir dönüştürme fonksiyonu görevi de görür. Ona farklı bir tipte bir değer verirseniz, dönüşüm iyi tanımlı olduğunda, yeni tipin eşdeğer değerini geri alırsınız:

>>> int("42")
42
>>> int(3.9)
3                           # truncates toward zero, not rounds
>>> float("1.5")
1.5
>>> str(255)
'255'
>>> bool(0), bool(1), bool("")
(False, True, False)

İyi tanımlı olmayan dönüşümler ValueError hatası verir:

>>> int("hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10

2.2.4. Yeniden atama ve dinamik tipleme

Bir ad, herhangi bir zamanda herhangi bir tipteki bir değere yeniden atanabilir. Aşağıdaki kod geçerlidir:

x = 42
x = "now I'm a string"
x = 3.14

Python bir değişkeni bir tipe bağlamaz. x değerinin bir tam sayı olmasına bağlı olan kod, onu kullandığı noktada yalnızca bir tam sayı bekler; başka bir şey alırsa, çalışma zamanında bir TypeError alırsınız.

Not

x değişkenini yeniden atamak, eski bağlamanın işaret ettiği değeri değiştirmez. İki ad aynı değeri paylaşıyorsa, birini yeniden atamak diğerini etkilemez:

a = [1, 2, 3]
b = a                       # both point at the same list
a = "different now"
print(b)                    # still [1, 2, 3]

Paylaşılan bir değeri değiştirmek (mutate) farklıdır: list.append gibi bir metot, bağlamanın işaret ettiği değeri değiştirir, böylece aynı değere işaret eden diğer her ad bu değişikliği görür.