Serimizin ilk bölümünde (https://www.ongsec.com/python-ile-siber-guvenlik-uygulamalari-bolum-1/) temel python bilgisini elde etmiştik. Bu bölümde öğrendiklerimizin üzerine koyarak daha ileri seviye işlemler yapacağız ve son bölüme yani etik hack’ leme araçlarımızı yazmaya hazır hale geleceğiz.
O zaman hadi ikinci bölümümüze başlayalım.
Fonksiyonlar
1. Hazır tanımlı fonksiyonlar
my_string = "berat"
print(my_string.upper())
print(my_string)
upper python’ da tanımlanmış bir method orneğidir. Mesela bu ornekte birinci print içindeki çıktımız BERAT olacaktır ama ikinci print’ de my_string’ i yazdırınca kucuk harfle yazacaktır (Daha önceden stringler’ in böyle olduğunu ilk bölümde incelemiştik).
2. Yardım alma fonksiyonu
help(my_string.split())
Python dökümantasyonuna web sitesinden ulaşmak yerine bu şekilde programın içinden de ulaşabilirim.
Burada acaba bu split ne işe yarıyor detaylı öğrenmek istiyorsak bu şekilde help yazarak öğrenebiliriz.
3. Kendi fonksiyonumuzu yazalım
def hello_world():
print("hello")
print("world")
hello_world()
def anahtar sözcüğünü kullanarak hello_world() diye kendi fonksiyonumu tanımladım ve içine print ile hello ve world kelimelerini yazdım.
Yazdığım fonksiyonu çağırmak için hello_world() diyorum ve ekrana çıktı olarak hello world yazdırıyorum.
Girdi-Çıktı İşlemleri
1. Parametre alan fonksiyon tanımlama
def hello_programming(name):
print("hello")
print(name)
hello_programming("Python")
hello python yazdırmış olduk.
Burada parametre alacak şekilde fonksiyonu oluşturdum. Aşağıda çağırırken bu parametre değerini mutlaka girmem lazım yoksa program hata verir ve çalışmaz.
Peki ben parametre girmezsem de bu fonksiyonun hata vermeden çalışmasını istiyorsam;
def hello_program(name="python"):
print("hello")
print(name)
hello_program()
hello_program("java")
İlk çıktıda hello python dönecek.
İkinci çıktıda da hello java yazacak.
Yani programa dışarıdan parametre girersem parametreye göre fonksiyonum yeni halini alacaktır.
2.İki sayıyı toplama fonksiyonu
def toplama(sayi1, sayi2):
sayi3 = sayi1 + sayi2
print(sayi3)
toplama(1, 2)
Fonksiyondan da anlaşıldığı gibi sayı 1 ve sayı 2 değerlerini toplayıp, sayı 3′ e atıyoruz ve sayı 3′ ü ekrana yazdırıyoruz.
3. Yazdırma işlemi değil, sonucun bir değişkene atanması fonksiyonları
def toplam(a, b, c):
return a + b + c
sonuc = toplam(1, 2, 3)
print(sonuc)
Yani eğer yaptığım işlemi yazdırmak değil de bir değişkene eşitlemek istiyorsam return komutunu kullanacağım.
4. Fonksiyonlarda if else yapısını kullanmak
def control_string(s):
if s[0] == "m":
print("mmm")
else:
print(s)
control_string("berat")
control_string("merve")
Burada ilk harfi m ise mmm yazdır, değilse girilen string’ in kendisini yazdır.
Yani ilk çıktı berat, ikinci çıktı mmm olur.
5. Fonksiyonlarda if else yapısı için başka bir örnek
def new_control(j):
if j[0] == "m":
print(j.capitalize())
new_control("merve") # Merve olmuş olacak
Eğer ilk harfi m ise ilk harfini büyüt öyle yazdır dedim
Çıktım Merve olmuş olacak.
İleri Seviye Fonksiyonlar
1. Arbitrary arguments
def summation(*args):
return sum(args)
toplam1 = summation(1, 2, 3)
print(toplam1)
toplam2 = summation(1, 2, 3, 4, 5)
print(toplam2)
Bu şekilde python’ un kendi sum fonksiyonunu ve args’ ı kullanarak istediğimiz kadar sayıyı toplayabiliriz.
2. Keyword arguments
def ornek_fonksiyon(**kwargs):
print(kwargs)
ornek_fonksiyon(kosma=10, yuzme=20, basketbol=30)
Bu fonksiyon sayesinde de dictionary olarak oluşturmama olanak sağlıyor.
Burada da kullanıcı istediği kadar değer girebilir.
3. Keyword arguments başka bir örnek
def key_function(**kwargs):
if "metallica" in kwargs:
print("heavy metal")
else:
print("rock is dead")
key_function(metallica=10, madonna=6)
key_function(madonna=100, mickymouse=200, eminem=300)
İlk fonksiyonu çağırdığımda çıktım : heavy metal olacaktır
İkinci fonksiyonu çağırışımda da rock is dead çıktısı alacağım.
Pratik Fonksiyon Kullanımları
1. Bölme işlemi fonksiyonu
def divide(number):
return number / 2
bolum = divide(10)
print(bolum)
Burada verilen sayıyı 2′ ye bölen fonksiyon yazdık.
2. Liste elemanlarını bölme işlemine sokan fonksiyon
def divide(number):
return number / 2
my_list = [1, 2, 3, 4, 5, 6, 7, 8]
my_newlist = []
for num in my_list:
my_newlist.append(divide(num))
print(my_newlist)
Burada my_list’ deki tüm elemanları divide fonksiyonuna sokup yeni değeri my_newlist’ e ekledik ve en sonunda da my_newlist’ i ekrana yazdırdık. Çıktımız: [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0] olacaktır.
3. Yukarıdaki sayılar sadece 1 tane 2 tane yada 10 tane olmayabilir çok uzun listeler olabilir. Bunu daha pratik bir şekilde yapmak için python’ da kullanacağımız fonksiyonun adı MAP
def divide(number):
return number / 2
my_list = [1, 2, 3, 4, 5, 6, 7, 8]
print(list(map(divide, my_list)))
Burada tek satırda yazacağım kod ile aynı sonucu alabiliyorum. Yani yine çıktımız : [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0] olacaktır.
4. Filter
def control_string(string):
return "metallica" in string
print(control_string("metallicadasdad"))
#true değerini alırım
---------------------------------------------
my_artist_list = ["metallica", "madonna", "eminem"]
print(list(map(control_string, my_artist_list)))
#[True,False,False] değerini alırım
---------------------------------------------
#Peki ben yukarıdaki listede tüm değerlerin true false olmasına bakıp hepsini getirdim.Eğer ben sadece true olanları listelemek istersem ne yapacam??? İşte bu yönteme de FILTER diyoruz.
print(list(filter(control_string, my_artist_list)))
#burada çıktım metallica olacaktır.
Lambda
1. Lambda fonksiyonunun kullanımı
def carpma_fonksiyonu(number):
return number * 3
print(carpma_fonksiyonu(5))
carpma_fonksiyonu2 = lambda num: num * 3
print(carpma_fonksiyonu2(5))
Birinci fonksiyon da bir sayıyı 3 ile çarpıyor, ikinci fonksiyon da aynı şekilde bir sayıyı 3 ile çarpıyor.
2. Peki benim lambda’ yı kullanım amacım ne olabilir?
my_list = [3, 4, 5, 6]
print(list(map(lambda num: num * 4, my_list)))
Mesela örnekteki gibi elimizde bir liste olsun ve tüm elemanları 4 ile çarpmak istiyorum. 4 ile çarpma fonksiyonunu yazma yerine tek satırda lambda ile bunu halledebiliyoruz.
Scope
1. Scope nedir
number = 10
def multipy(num):
number = 5
return num * number
print(multipy(5))
print(number)
# İlk çıktımız 25, İkinci çıktımız 10 olacaktır.
2. Peki python’ da değişkenler hangi durumda hangi değerleri alır?
LEGB
L–>LOCAL
E–>ENCLOSING
G–>GLOBAL
B–>BUILTIN
Bu sıraya göre karar verir.
3. Başka bir örnek kullanımla scope kavramlarını detaylı olarak öğrenelim
my_string = "berat" #GLOBAL
def my_function():
my_string = "furkan" #ENCLOSING
print(my_string)
def my_function2():
my_string = "yazturk" #LOCAL
print(my_string)
my_function2()
my_function() #Burada çıktımız yazturk olacak
print(my_string) #Burada da berat olacak
Çıktılarımız sırasıyla:

Decorator
1.
def func(new_func):
print("function started")
new_func()
print("function ended")
def hellofunc():
print("hello world")
func(hellofunc)
Çıktımız:

2.
def new_func1():
print("new func1")
def new_func2():
print("new func2")
return new_func2()
string_new = new_func1()
3.
def decorator_fuction(func):
def wrapper_function():
print("wrapper started")
func()
print("wrapper stoped")
return wrapper_function()
@decorator_fuction
def function_neww():
print("hello world")
wrapper started
hello world
wrapper stopped
Çıktılarını almış oluruz.
İşte bu şekilde iki saat eşitleme yapacağımız yerde bu şekilde tanımlayarak kullanabiliriz.
Class
1. Class tanımlamak
class Musician():
def __init__(self, name, age): #bir class' dan bir obje oluşturulduğunda ilk burası çağrılır
self.name_attribute = name
self.age_attribute = age
my_musician = Musician("berat", "33")
print(my_musician.name_attribute) # berat
print(my_musician.age_attribute) #33
my_musician.name_attribute = "furkan"
print(my_musician.name_attribute) #furkan
Yani sınıflar örnekteki gibi tanımlanıyor ve değer atamaları yapılıp örnekteki gibi çağrılıyor.
Metodlar
1.
class Musician():
def __init__(self, name, age, instrunment):
self.name = name
self.age = age
self.instrunment = instrunment
# method
def sing(self):
print(f"we are the champions {self.instrunment} ")
my_musician = Musician("james", 50, "Guitar")
print(my_musician.name)
print(my_musician.age)
print(my_musician.instrunment)
# Diğerlerini zaten self' le obje ureterek yapmistim. Ama burada job' u default yani sinifta oluşturdum.
# Nesnelerin ortak özellikleri olacak şekilde tanımladım
my_musician.job = "singer" # Tabi ki bu şekilde bir atamayla metodun özelliğini değiştirebiliyoruz
print(my_musician.job)
my_musician.sing() # we are the champions Guitar yazacak
Çıktımız:

Sınıfların Pratik Kullanımları
1.
class DogYear():
year_factor = 7
def __init__(self, age): #bu fonksiyon java' daki ya da c#' daki main metodu gibi
self.age = age
def calculation(self):
return self.age * self.year_factor
my_dog = DogYear(3)
print(my_dog.age) #my dog diye ürettiğimiz nesnenin değerine ulaşırız yani 3' e
print(my_dog.calculation()) #Burada da calculation methoduna my_dog nesnemizi soktuk oda 21 sonucunu verecektir
# Yani programımızın çıktıları 3 ve 23 olacaktır.
Inheritence
1.
class Class1():
def __init__(self):
print("Class1 created")
def method1(self):
print("method1")
def method2(self):
print("method2")
class Class2(Class1): #burda class2' yi class1' den inherite ettim. Yani class1' den miras aldım.
def __init__(self):
Class1.__init__(self)
print("Class2 created")
my_inheritence = Class2()
my_inheritence.method1()
my_inheritence.method2()
Çıktımız:

Polymorphism
1.
class Apple():
def __init__(self, name):
self.name = name
def information(self):
return self.name + " 100 calories"
class Banana():
def __init__(self, name):
self.name = name
def information(self):
return self.name + " 150 calories"
banana = Banana("Banana")
apple = Apple("Apple")
fruit_list = [banana, apple]
for fruit in fruit_list:
print(fruit.information())
Çıktımız:

Burada apple Apple instance’ indaki informationu kullandi, banana da Banana sınıfının instance’ inde ki informationu kullandı.
Özel Metodlar
class Fruits():
def __init__(self, name, calories):
self.name = name
self.calories = calories
my_fruit = Fruits("Banana", 20)
print(my_fruit)
# Mesela list=[1,2] len(list) yaptigimda 2 ciktimizi aliyordum. Len bir built-in fonksiyonuydu
# Ben bu built-in fonksiyonlari kendi class' ımda nasıl kullanacağım peki
# Başka bir örnekle görelim
class Meyveler():
def __init__(self, ad, kalori):
self.ad = ad
self.kalori = kalori
def __str__(self):
return f"{self.ad} meyvesi {self.kalori} kaloridir"
def __len__(self):
return self.kalori
benim_meyvem = Meyveler("Muz", 200)
print(benim_meyvem)
# Artik burada Muz meyvesi 200 kaloridir çıktısını alırım
# Yani str methodu print ettireceğimiz zaman gidip ilk buraya bakıyor. Yav baba bir string yazdıracaktım elinde var mi bir string değer gidip onu bir yazdırayım için oluşturulmuş özel bir metod' dur.
print(len(benim_meyvem))
# Burada da 200 çıktısını alırım. Len' de string gibi ozel bir metod ve bunu da bu sekilde tanımlarsak yine sorunsuz bir sekilde çıktılarımı alabilirim
Çıktımız:

Hataları Ele Almak
1. Olası bir hatayla karşılaşabileceğimiz bir program
def number_power(num1):
return num1 ** 2
a = int(input("Enter a number:"))
print(number_power(a))
Şimdi ben normalde buraya rakam girersem sıkıntı yok ama ya bir string girersem ne olur tabiki program çöker.
İşte biz programın çökmemesi için try except yapısını kullanacağız.
2.try except yapısı
def us_alma(sayi1):
return sayi1 ** 2
while True:
try:
b = int(input("Enter a number : "))
except:
print("Please a number!!!")
else:
print("OK!")
break
finally:
print("Burasi her zaman calistirilacak...")
print(us_alma(b))
Çıktımız:

Python’ ın ikinci bölümünü de böylece bitirmiş olduk. Artık son bölüm olan kendi araçlarımızı yazma aşamasına geçebiliriz.
Python öğrenme ve esneklik açısından diğer programlama dillerinin bir adım önüne geçiyor.
Siz de kişisel olarak ya da şirket çalışanlarınızın python eğitimleri alarak kendi uygulamalarını yazmasını istiyorsanız; tecrübeli yazılım geliştirme uzmanlarımız ile en temel seviyeden, ileri seviyeye kadar tüm süreçlerinizde yanınızda olarak python programlama dilini eksiksiz ve kafanızda soru işaretleri kalmayacak şekilde öğrenmenize yardımcı olabiliriz.
Serinin son yazısında görüşmek üzere. Bizi takip etmeye devam edin…

