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.

Three labels pointing at three boxed values; reassigning a label moves the arrow, not the value.

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.