15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
08.10.2024

Her Geliştiricinin Ustalaşması Gereken Temel Python Komutları

Python, okunabilirlik ve ifade edici sözdizimi üzerine inşa edilmiş, yüksek seviyeli, yorumlanan bir programlama dilidir. G/Ç, tür dönüşümü, kontrol akışı, veri yapıları, dosya işleme ve modül içe aktarmayı kapsayan temel yerleşik komutları, geliştiricilerin karmaşık görevleri son derece az satır kodla gerçekleştirmesine olanak tanır.

Bu referans, giriş düzeyindeki eğitimlerin ötesine geçen uç durumlar, yaygın tuzaklar ve üretime yönelik nüanslar dahil olmak üzere en kritik Python komutlarını derinlemesine ele almaktadır. Bir VPS Hosting ortamında sunucu görevlerini otomatikleştiriyor, bir Django API’si oluşturuyor veya büyük veri kümelerini işliyor olun, bu temeller her Python iş akışının temelini oluşturur.

Giriş ve Çıkış Komutları

`print()` varsayılan olarak `stdout`’a çıktı yazar. Tam imzası şöyledir:

“`python

print(*objects, sep=' ', end='n', file=sys.stdout, flush=False)

“`

Çoğu geliştirici yalnızca konumsal argümanları kullanır, ancak anahtar kelime parametreleri üretimde önem taşır:

  • `sep` birden fazla nesne arasındaki ayırıcıyı kontrol eder (varsayılan: tek boşluk).
  • `end` sonlandırma karakterini kontrol eder (varsayılan: yeni satır). `end=''` ayarı, ilerleme göstergeleri ve satır içi çıktı için kritik öneme sahiptir.
  • `file` çıktıyı herhangi bir yazılabilir akışa yönlendirir — yapılandırılmış günlükleri doğrudan bir dosya nesnesine yazmak için kullanışlıdır.
  • `flush=True` tamponun hemen boşaltılmasını zorlar; bu, gerçek zamanlı olarak uzun süre çalışan süreçleri izlerken gereklidir.

“`python

Practical example: progress output without newlines

import time

for i in range(5):

print(f"Processing step {i+1}/5…", end='r', flush=True)

time.sleep(0.5)

print("Done. ")

“`

Tuzak: Üretim kodunda günlükleme için `print()` kullanmak bir anti-kalıptır. Bunun yerine `logging` modülünü kullanın — `stdout`’a dokunmadan günlük seviyeleri, zaman damgaları ve yapılandırılabilir işleyiciler sağlar.

`input()` Fonksiyonu

`input()`, `stdin`’dan bir satır okur, sondaki yeni satırı kaldırır ve bunu `str` olarak döndürür. İstem argümanı isteğe bağlıdır, ancak etkileşimli betikler için her zaman dahil edilmelidir.

“`python

name = input("Enter your name: ")

print(f"Hello, {name}")

“`

Kritik uç durum: `input()` yürütmeyi süresiz olarak engeller. Otomatik ardışık düzenlerde veya bir sunucuda çalışan betiklerde, beklenmedik bir `input()` çağrısı süreci askıya alır. Etkileşimli istemleri her zaman ortam kontrolleriyle koruyun veya etkileşimli olmayan girdi için `argparse` / `sys.argv` kullanın.

Sayısal girdi için tür dönüşümü zorunludur:

“`python

try:

age = int(input("Enter your age: "))

except ValueError:

print("Invalid input: please enter a whole number.")

“`

Kullanıcı tarafından sağlanan verilere dokunan herhangi bir kodda `input()` çıktısını `try/except` bloğu olmadan asla dönüştürmeyin.

Değişkenler, Veri Türleri ve Tür İncelemesi

`type()` ve `isinstance()`

`type()` bir nesnenin tam sınıfını döndürür. Ancak çoğu üretim kodunda, kalıtım hiyerarşilerine saygı gösterdiği için `isinstance()` tercih edilen araçtır.

“`python

num = 42

print(type(num)) # <class 'int'>

print(isinstance(num, int)) # True

print(isinstance(num, (int, float))) # True — checks multiple types at once

“`

Her birinin ne zaman kullanılacağı:

Kullanım DurumuÖnerilen Fonksiyon
Tam tür kontrolü (alt sınıf yok)`type(x) is SomeClass`
Polimorfik / kalıtım farkındalıklı kontrol`isinstance(x, SomeClass)`
Hata ayıklama ve inceleme`type(x)`
Duck-typing doğrulaması`hasattr(x, 'method_name')`

Tür Dönüşümü: `int()`, `float()`, `str()`, `bool()`

Bunlar, basit dönüştürme operatörleri değil, Python’ın yerleşik türleri için yapıcı fonksiyonlardır. Sınıfın `__init__` metodunu çağırır ve geniş bir girdi yelpazesini kabul edebilirler.

“`python

int() with a base argument — often overlooked

binary_str = "1010"

print(int(binary_str, 2)) # Output: 10 (binary to decimal)

print(int("0xFF", 16)) # Output: 255 (hex to decimal)

bool() truthiness rules

print(bool(0)) # False

print(bool("")) # False

print(bool([])) # False

print(bool("False")) # True — non-empty string is always truthy

“`

Tuzak: `bool("False")`, boş olmayan bir dize olduğu için `True` olarak değerlendirilir. Bu durum, yapılandırma değerlerini ayrıştırırken birçok geliştiricinin gafil avlanmasına neden olur.

`len()`

`len()`, nesnenin `__len__` metodunu çağırır ve bir tamsayı döndürür. Dizeler, listeler, demetler, sözlükler, kümeler ve `__len__` uygulayan herhangi bir özel sınıf üzerinde çalışır.

“`python

text = "Python"

print(len(text)) # 6

data = {"a": 1, "b": 2}

print(len(data)) # 2 — counts keys, not key-value pairs

“`

Uç durum: Bir üretece `len()` uygulamak, üreçlerin tanımlı bir uzunluğu olmadığı için `TypeError` hatası fırlatır. Üreteci tüketmesine rağmen üretec öğelerini saymak için `sum(1 for _ in generator)` kullanın.

Kontrol Akışı Komutları

Koşullu İfadeler: `if`, `elif`, `else`

Python, koşulları katı boolean karşılaştırması yerine doğruluk değeri kullanarak değerlendirir. Yanlış değerleri anlamak çok önemlidir:

  • Yanlış: `None`, `0`, `0.0`, `""`, `[]`, `{}`, `set()`, `False`
  • Diğer her şey doğrudur

“`python

user_input = ""

if user_input:

print("Input received.")

else:

print("No input provided.") # This branch executes

“`

Üçlü ifade (satır içi koşul):

“`python

status = "adult" if age >= 18 else "minor"

“`

Yapısal örüntü eşleştirme (Python 3.10+): Karmaşık dallanma mantığı için `match/case`, uzun `elif` zincirlerinden daha okunabilirdir:

“`python

command = "start"

match command:

case "start":

print("Starting service…")

case "stop":

print("Stopping service…")

case _:

print("Unknown command.")

“`

Döngüler: `for` ve `while`

`for` döngüleri herhangi bir yinelenebilir üzerinde yineleme yapar. `range()` fonksiyonu, büyük aralıklar için bile bellek açısından verimli olmasını sağlayan tamsayı dizilerini tembel olarak üretir.

“`python

range(start, stop, step)

for i in range(0, 10, 2):

print(i) # 0, 2, 4, 6, 8

“`

`enumerate()`, hem dizin hem de değeri almanın doğru yoludur — `range(len(iterable))` kullanmaktan kaçının:

“`python

fruits = ["apple", "banana", "cherry"]

for index, fruit in enumerate(fruits, start=1):

print(f"{index}. {fruit}")

“`

`while` döngüleri açık sonlandırma mantığı gerektirir. Döngü koşulunun `False` olabileceğinden her zaman emin olun veya bir `break` ifadesi ekleyin:

“`python

attempts = 0

max_attempts = 3

while attempts < max_attempts:

response = input("Enter password: ")

if response == "secret":

print("Access granted.")

break

attempts += 1

else:

The 'else' clause on a while loop executes if the condition

becomes False without hitting 'break' — a rarely used but powerful feature

print("Too many failed attempts.")

“`

Döngü kontrol anahtar kelimeleri:

  • `break` — döngüden hemen çıkar
  • `continue` — mevcut yinelemenin geri kalanını atlar
  • `pass` — boş bloklarda yer tutucu olarak kullanılan null ifadesi

Yerleşik Veri Yapıları

Python’ın dört temel yerleşik veri yapısının her birinin farklı performans özellikleri ve uygun kullanım durumları vardır.

Python Veri Yapılarının Karşılaştırması

YapıSıralıDeğiştirilebilirYinelemelerAnahtar-DeğerArama Süresi
`list`EvetEvetEvetHayırO(n)
`tuple`EvetHayırEvetHayırO(n)
`dict`Evet (3.7+)EvetAnahtarlar: HayırEvetO(1) ort.
`set`HayırEvetHayırHayırO(1) ort.
`frozenset`HayırHayırHayırHayırO(1) ort.

Listeler

Listeler dinamik dizilerdir. Temel işlemler ve zaman karmaşıklıkları:

“`python

fruits = ["apple", "banana", "cherry"]

fruits.append("orange") # O(1) amortized — adds to end

fruits.insert(1, "mango") # O(n) — shifts elements right

fruits.remove("banana") # O(n) — searches then removes

popped = fruits.pop() # O(1) — removes from end

popped_idx = fruits.pop(0) # O(n) — removes from beginning, avoid in hot loops

List comprehension — faster than equivalent for loop

squares = [x**2 for x in range(10)]

“`

Tuzak: `list.insert(0, item)` veya `list.pop(0)` işlemini tekrar tekrar kullanmak, işlem başına O(n) maliyetlidir. Kuyruk davranışı için, her iki uçtan O(1) ekleme ve çıkarma sağlayan `collections.deque` kullanın.

Sözlükler

Python 3.7’den itibaren sözlükler, ekleme sırasını bir dil garantisi olarak korur (yalnızca bir uygulama ayrıntısı değil).

“`python

person = {"name": "Alice", "age": 30, "role": "engineer"}

Safe key access — avoids KeyError

city = person.get("city", "Unknown") # Returns "Unknown" if key absent

Iterating

for key, value in person.items():

print(f"{key}: {value}")

Dictionary comprehension

squared = {x: x**2 for x in range(5)}

Merging dicts (Python 3.9+)

defaults = {"timeout": 30, "retries": 3}

config = {"timeout": 60}

merged = defaults | config # config values override defaults

“`

Kümeler

Kümeler dahili olarak hash tabloları kullanır ve büyük koleksiyonlar için listelerden çok daha hızlı olan O(1) ortalama durum üyelik testi sağlar.

“`python

unique_ids = {101, 202, 303, 101} # Duplicate 101 is silently dropped

print(unique_ids) # {101, 202, 303}

Set operations — extremely useful for data deduplication

a = {1, 2, 3, 4}

b = {3, 4, 5, 6}

print(a & b) # Intersection: {3, 4}

print(a | b) # Union: {1, 2, 3, 4, 5, 6}

print(a – b) # Difference: {1, 2}

print(a ^ b) # Symmetric difference: {1, 2, 5, 6}

“`

Fonksiyonlar: `def`, `return` ve `lambda`

`def` ile Fonksiyon Tanımlama

“`python

def calculate_discount(price, discount=0.10):

"""

Returns the discounted price.

Args:

price (float): Original price.

discount (float): Discount rate as a decimal. Default is 10%.

Returns:

float: Price after discount.

"""

return price * (1 – discount)

print(calculate_discount(100)) # 90.0

print(calculate_discount(100, 0.25)) # 75.0

“`

`*args` ve `kwargs`, fonksiyonların değişken sayıda argüman kabul etmesine olanak tanır:

“`python

def log_event(event_type, *messages, **metadata):

print(f"[{event_type}]", " | ".join(messages))

for key, value in metadata.items():

print(f" {key}: {value}")

log_event("ERROR", "Connection failed", "Retrying…", host="db01", port=5432)

“`

Tuzak — değiştirilebilir varsayılan argümanlar: Varsayılan argüman değeri olarak asla değiştirilebilir bir nesne (liste, sözlük) kullanmayın. Her çağrıda değil, fonksiyon tanımı sırasında bir kez oluşturulur:

“`python

WRONG — the list persists between calls

def add_item(item, items=[]):

items.append(item)

return items

CORRECT

def add_item(item, items=None):

if items is None:

items = []

items.append(item)

return items

“`

Lambda Fonksiyonları

Lambda ifadeleri, anonim tek ifadeli fonksiyonlar oluşturur. En çok `sorted()`, `map()` ve `filter()` gibi yüksek dereceli fonksiyonlara argüman olarak kullanışlıdır.

“`python

Sorting a list of dicts by a specific key

users = [{"name": "Charlie", "age": 25}, {"name": "Alice", "age": 30}]

sorted_users = sorted(users, key=lambda u: u["age"])

filter() with lambda

even_numbers = list(filter(lambda x: x % 2 == 0, range(10)))

[0, 2, 4, 6, 8]

map() with lambda

doubled = list(map(lambda x: x * 2, [1, 2, 3]))

[2, 4, 6]

“`

Lambda ne zaman kullanılmamalı: Fonksiyon gövdesi karmaşıksa veya bir docstring gerektiriyorsa, `def` kullanın. PEP 8, bir lambda’yı değişken adına atamayı açıkça önerir — bunun için `def` vardır.

Dosya İşleme

`open()`, `read()`, `write()` ve `with` İfadesi

`open()` fonksiyonu bir dosya nesnesi döndürür. Tam imzası bir `mode` ve `encoding` parametresi içerir:

“`python

Always specify encoding explicitly — avoids platform-dependent behavior

with open("data.txt", "r", encoding="utf-8") as f:

content = f.read()

“`

Dosya modları:

ModAçıklama
`"r"`Okuma (varsayılan). Dosya yoksa `FileNotFoundError` hatası fırlatır.
`"w"`Yazma. Dosya oluşturur veya mevcut içeriği keser.
`"a"`Ekleme. Dosya yoksa oluşturur, varsa sonuna ekler.
`"x"`Özel oluşturma. Dosya mevcutsa `FileExistsError` hatası fırlatır.
`"b"`İkili mod (diğerleriyle birleştirin: `"rb"`, `"wb"`).
`"+"`Okuma ve yazma (diğerleriyle birleştirin: `"r+"`, `"w+"`).

Okuma stratejileri:

“`python

Read entire file into memory — fine for small files

with open("config.txt", "r", encoding="utf-8") as f:

content = f.read()

Read line by line — memory-efficient for large files (logs, datasets)

with open("server.log", "r", encoding="utf-8") as f:

for line in f:

process(line.strip())

Read all lines into a list

with open("hosts.txt", "r", encoding="utf-8") as f:

lines = f.readlines()

“`

Üretimde `with` neden zorunludur: `with` ifadesi, blok içinde bir istisna oluşsa bile dosyanın kapatılmasını garanti etmek için bağlam yöneticisi protokolünü (`__enter__` / `__exit__`) kullanır. `f.close()`’ı manuel olarak çağırmak hataya açıktır — `close()`’dan önce bir istisna oluşursa, dosya tanımlayıcısı sızar.

Tuzak: Bir dosyayı `"w"` modunda açmak, herhangi bir şey yazmadan önce bile dosyayı hemen sıfır bayta keser. Yazma mantığınız başarısız olursa, orijinal içerik zaten kaybolmuştur. `"x"` modunu kullanın veya geçici bir dosyaya yazıp atomik olarak yeniden adlandırın:

“`python

import os

import tempfile

with tempfile.NamedTemporaryFile("w", delete=False, encoding="utf-8") as tmp:

tmp.write(new_content)

tmp_path = tmp.name

os.replace(tmp_path, "config.txt") # Atomic on POSIX systems

“`

Modül İçe Aktarma

`import`, `from … import` ve `as`

Python’ın modül sistemi en büyük güçlerinden biridir. Standart kütüphane kriptografi, ağ iletişimi, eşzamanlılık, veri serileştirme ve çok daha fazlasını kapsar.

“`python

import math

print(math.sqrt(144)) # 12.0

print(math.ceil(4.2)) # 5

print(math.floor(4.9)) # 4

Import specific names into the current namespace

from os.path import join, exists, dirname

Alias long module names

import numpy as np

import pandas as pd

“`

Sunucu taraflı Python için kullanışlı standart kütüphane modülleri:

ModülAmaç
`os` / `pathlib`Dosya sistemi işlemleri, yol düzenleme
`sys`Yorumlayıcı durumu, `argv`, `stdin`/`stdout`/`stderr`
`subprocess`Sistem süreçlerini başlatma ve iletişim kurma
`logging`Seviyeler ve işleyicilerle üretim kalitesinde günlükleme
`json`JSON verilerini serileştirme/seri çözme
`re`Düzenli ifadeler
`datetime`Tarih ve saat aritmetiği
`collections``deque`, `Counter`, `defaultdict`, `OrderedDict`
`itertools`Bellek açısından verimli yineleme birleştiricileri
`functools``lru_cache`, `partial`, `reduce`
`threading` / `multiprocessing`Eşzamanlılık ve paralellik
`socket`Düşük seviyeli ağ iletişimi
`hashlib`Kriptografik karma (SHA-256, MD5, vb.)

Üçüncü Taraf Paketlerin Yönetimi

Standart kütüphanenin ötesinde, Python Paket Dizini (PyPI) 500.000’den fazla paket barındırır. Bunları yüklemek için `pip` kullanın ve her zaman sanal ortam içinde çalışın:

“`bash

Create and activate a virtual environment

python3 -m venv .venv

source .venv/bin/activate # Linux/macOS

.venvScriptsactivate.bat # Windows

Install packages

pip install requests flask gunicorn

Freeze dependencies for reproducible deployments

pip freeze > requirements.txt

Recreate environment on another machine

pip install -r requirements.txt

“`

Tuzak: Paketleri global olarak (sanal ortam olmadan) yüklemek, sistem Python’ını kirletir ve projeler arasında bağımlılık çakışmalarına neden olur. Bir üretim VPS Hosting sunucusunda her zaman proje başına sanal ortamlar veya konteynerleştirme kullanın.

Bir Sunucuda Python Uygulamalarını Dağıtma

Python komutlarını anlamak resmin yalnızca yarısıdır. Python kodunu bir sunucu ortamında güvenilir biçimde çalıştırmak ek değerlendirmeler gerektirir.

Bir cPanel ile VPS veya çıplak bir Linux VPS üzerinde Flask ya da Django uygulaması dağıtırken standart iş akışı şunları içerir:

  1. Bir WSGI sunucusu (Gunicorn, uWSGI) Python uygulamasını sunmak için
  2. Bir ters proxy (Nginx, Apache) SSL sonlandırma ve statik dosyaları işlemek için
  3. Bir süreç yöneticisi (systemd, Supervisor) uygulamanın çökmeler ve yeniden başlatmalar sonrasında çalışmaya devam etmesini sağlamak için
  4. Gizli bilgiler için ortam değişkeni yönetimi (kimlik bilgilerini asla sabit kodlamayın)

“`bash

Example: running a Flask app with Gunicorn

gunicorn –workers 4 –bind 0.0.0.0:8000 wsgi:app

Example: systemd service unit for auto-restart

/etc/systemd/system/myapp.service

[Unit]

Description=My Python App

After=network.target

[Service]

User=deploy

WorkingDirectory=/var/www/myapp

ExecStart=/var/www/myapp/.venv/bin/gunicorn –workers 4 –bind 0.0.0.0:8000 wsgi:app

Restart=always

[Install]

WantedBy=multi-user.target

“`

Makine öğrenmesi çıkarımı veya büyük ölçekli veri işleme gibi kaynak yoğun iş yükleri için GPU Hosting, NumPy, TensorFlow ve PyTorch işlemlerini önemli ölçüde hızlandıran CUDA destekli donanım sağlar.

Python uygulamanız işlemsel e-postalar gönderiyorsa veya posta listelerini yönetiyorsa, bunu özel bir E-posta Hosting hizmetiyle eşleştirmek, yerel bir `sendmail` kurulumuna güvenmek yerine güvenilir teslimat ve uygun SPF/DKIM yapılandırması sağlar.

Temel Kontrol Listesi

Bunu dağıtım öncesi ve kod inceleme referansı olarak kullanın:

  • G/Ç: Gözetimsiz çalışan herhangi bir kodda `print()`’ı `logging` modülüyle değiştirin. `input()`’ı her zaman `try/except ValueError` içine alın.
  • Tür kontrolü: Doğrulama mantığı için `isinstance()`’ı `type()` yerine tercih edin. `bool("False")`’ın `True` olduğunu unutmayın.
  • Veri yapıları: O(1) aramalar için `dict` veya `set` kullanın. Kuyruk gerektiğinde `collections.deque`’ı `list` yerine kullanın.
  • Fonksiyonlar: Varsayılan argüman değerleri olarak asla değiştirilebilir nesneler kullanmayın. Tüm genel fonksiyonları docstring ile belgeleyin.
  • Dosya işleme: Her zaman `with open(…)` kullanın ve `encoding="utf-8"`’ı her zaman açıkça belirtin. Kritik dosyalar için atomik yazma kullanın.
  • Modüller: Her zaman sanal ortam içinde çalışın. Bağımlılıkları `pip freeze > requirements.txt` ile sabitleyin.
  • Kontrol akışı: Döngü sonrası mantık için `else` / `for` döngülerindeki `while` yan tümcesinden yararlanın. Karmaşık dallanma için `match/case` (Python 3.10+) kullanın.
  • Dağıtım: Gizli bilgiler için bir WSGI sunucusu, süreç yöneticisi ve ortam değişkenleri kullanın. Flask geliştirme sunucusunu asla üretimde çalıştırmayın.

Sıkça Sorulan Sorular

Python’da `print()` ile `logging` arasındaki fark nedir?

`print()` doğrudan `stdout`’a meta veri olmadan yazar. `logging` modülü, `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` gibi önem seviyeleri, zaman damgaları, modül adları ve yapılandırılabilir çıktı hedefleri sağlar. Üretimde veya arka plan hizmeti olarak çalışan herhangi bir betik için `logging` doğru araçtır.

Python’ın `input()`’ı neden her zaman bir dize döndürür?

`input()`, `stdin`’dan ham baytları okur ve bunları metin olarak çözer. Python, kullanıcının bir sayı, tarih veya dize sağlamayı amaçlayıp amaçlamadığını bilemez; bu nedenle en genel türü (`str`) döndürür ve tür dönüşümünü geliştiriciye bırakır. Bu tasarım, örtük zorlamadan daha güvenli olan açık doğrulamayı zorunlu kılar.

Üyelik testi için `list` ile `set` arasındaki performans farkı nedir?

`x in my_list` kontrolü O(n)’dir — Python her öğeyi tarar. `x in my_set` kontrolü, kümeler hash tablosu kullandığından ortalamada O(1)’dir. Üyeliği sık sık test ettiğiniz birkaç düzineden fazla öğe içeren koleksiyonlar için `set`’e dönüştürmek büyük bir hız iyileştirmesi sağlar.

`lambda` yerine ne zaman `def` fonksiyonu kullanmalıyım?

`lambda`’ı yalnızca kısa, tek ifadeli bir fonksiyonu başka bir fonksiyona argüman olarak geçirirken kullanın (örn. `sorted()`, `map()`, `filter()`). Mantık birden fazla ifade gerektiriyorsa, hata işleme ihtiyacı varsa veya başka yerlerde yeniden kullanılacaksa `def` ile tanımlayın. Bir `lambda`’yı değişken adına atamak PEP 8 tarafından açıkça önerilmez.

Bir Linux sunucusunda yeniden başlatmanın ardından Python betiğini otomatik olarak nasıl çalıştırabilirim?

En sağlam yöntem, `Restart=always` ve `WantedBy=multi-user.target` ile bir `systemd` servis birimi kullanmaktır. Alternatif olarak, betiği `@reboot /path/to/venv/bin/python /path/to/script.py` ile `crontab`’a ekleyin. `systemd` yaklaşımı tercih edilir çünkü `journalctl` aracılığıyla günlükleme, bağımlılık sıralaması ve ayrıntılı yeniden başlatma politikaları sağlar.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın