{"id":42999,"date":"2026-07-02T09:08:39","date_gmt":"2026-07-02T06:08:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/"},"modified":"2026-07-02T09:08:59","modified_gmt":"2026-07-02T06:08:59","slug":"python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/","title":{"rendered":"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131"},"content":{"rendered":"<h2>Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131<\/h2>\n<p>Python fonksiyonlar\u0131, kodunuzu par\u00e7alara ay\u0131rarak daha okunabilir, y\u00f6netilebilir ve tekrar kullan\u0131labilir hale getirmenin temel ta\u015f\u0131d\u0131r. Bu makalede, fonksiyonlar\u0131n ne oldu\u011funu, nas\u0131l tan\u0131mland\u0131\u011f\u0131n\u0131 ve modern Python projelerinde nas\u0131l etkin bir \u015fekilde kullan\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. \u0130ster yeni ba\u015flayan bir programc\u0131 olun ister deneyimli bir geli\u015ftirici, fonksiyonlar\u0131n g\u00fcc\u00fcn\u00fc anlamak, daha sa\u011flam ve s\u00fcrd\u00fcr\u00fclebilir yaz\u0131l\u0131mlar olu\u015fturman\u0131z i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>Neden Fonksiyonlara \u0130htiya\u00e7 Duyar\u0131z? Kod Tekrar\u0131n\u0131 Azaltman\u0131n Yollar\u0131 Nelerdir?<\/h3>\n<p>Herhangi bir yaz\u0131l\u0131m projesinde, belirli bir g\u00f6revi yerine getiren kod par\u00e7ac\u0131klar\u0131n\u0131 tekrar tekrar yazmak yayg\u0131n bir durumdur. \u00d6rne\u011fin, bir web uygulamas\u0131nda kullan\u0131c\u0131 giri\u015fi do\u011frulamas\u0131, bir veri analizi beti\u011finde ortalama hesaplamas\u0131 veya bir oyun motorunda karakter hareketi gibi i\u015flemler s\u00fcrekli kar\u015f\u0131m\u0131za \u00e7\u0131kabilir. Bu t\u00fcr tekrarlayan kod bloklar\u0131, projenin b\u00fcy\u00fcmesiyle birlikte y\u00f6netilmesi zor bir karma\u015faya d\u00f6n\u00fc\u015febilir. \u0130\u015fte tam bu noktada fonksiyonlar devreye girer. Fonksiyonlar, belirli bir i\u015fi yapan kod blo\u011funu bir isim alt\u0131nda grupland\u0131rmam\u0131z\u0131 sa\u011flar. Bu sayede, ayn\u0131 kodu farkl\u0131 yerlerde tekrar yazmak yerine, sadece fonksiyonu \u00e7a\u011f\u0131rarak o i\u015flevi yerine getirebiliriz.<\/p>\n<p>Tekrarlayan kod (DRY &#8211; Don&#8217;t Repeat Yourself prensibine ayk\u0131r\u0131 durumlar), sadece zaman kayb\u0131na yol a\u00e7makla kalmaz, ayn\u0131 zamanda hatalara da davetiye \u00e7\u0131kar\u0131r. Bir kod blo\u011funda bir hata oldu\u011funu varsayal\u0131m ve bu kod blo\u011fu projenin on farkl\u0131 yerinde tekrar edilmi\u015f olsun. Bu durumda, hatay\u0131 d\u00fczeltmek i\u00e7in on farkl\u0131 yere gidip de\u011fi\u015fiklik yapman\u0131z gerekir. Bu s\u00fcre\u00e7te bir yeri atlaman\u0131z veya yanl\u0131\u015f d\u00fczeltme yapman\u0131z olas\u0131d\u0131r, bu da yeni hatalara yol a\u00e7abilir. Fonksiyonlar sayesinde, bu t\u00fcr bir hatay\u0131 sadece fonksiyonun tan\u0131mland\u0131\u011f\u0131 tek bir yerde d\u00fczelterek projenin tamam\u0131nda etkili olmas\u0131n\u0131 sa\u011flayabiliriz. Bu durum, kodun bak\u0131m\u0131n\u0131 (maintenance) \u00f6nemli \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r ve geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/p>\n<p>Ayr\u0131ca, fonksiyonlar kodun okunabilirli\u011fini ve anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. B\u00fcy\u00fck ve karma\u015f\u0131k bir kod blo\u011funu okumak yerine, iyi isimlendirilmi\u015f bir fonksiyonun ne i\u015f yapt\u0131\u011f\u0131n\u0131 anlamak \u00e7ok daha kolayd\u0131r. \u00d6rne\u011fin, <code>hesapla_toplam_satis(urun_listesi)<\/code> ad\u0131nda bir fonksiyon g\u00f6rd\u00fc\u011f\u00fcn\u00fczde, bu fonksiyonun ne i\u015f yapt\u0131\u011f\u0131n\u0131 hemen tahmin edebilirsiniz. Bu, \u00f6zellikle ekip i\u00e7inde \u00e7al\u0131\u015f\u0131rken veya projenizi gelecekteki bir tarihte tekrar g\u00f6zden ge\u00e7irdi\u011finizde b\u00fcy\u00fck bir avantaj sa\u011flar. Kodunuzu mod\u00fcler par\u00e7alara ay\u0131rmak, her bir par\u00e7an\u0131n belirli bir g\u00f6reve odaklanmas\u0131n\u0131 sa\u011flar ve b\u00f6ylece karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r. Bu mod\u00fcler yap\u0131, kodunuzu test etmeyi de kolayla\u015ft\u0131r\u0131r; her bir fonksiyonu ba\u011f\u0131ms\u0131z olarak test edebilir ve do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olabilirsiniz. K\u0131sacas\u0131, fonksiyonlar modern yaz\u0131l\u0131m geli\u015ftirmenin vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r ve temiz, verimli ve s\u00fcrd\u00fcr\u00fclebilir kod yazman\u0131n temelini olu\u015fturur.<\/p>\n<h3>Python&#8217;da Fonksiyonlar\u0131n Temelleri: Tan\u0131mlama ve \u00c7a\u011f\u0131rma Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>Python&#8217;da bir fonksiyon tan\u0131mlamak olduk\u00e7a basittir ve <code>def<\/code> anahtar kelimesiyle ba\u015flar. <code>def<\/code> kelimesini takiben fonksiyonun ad\u0131, ard\u0131ndan parantez i\u00e7inde parametreleri (varsa) ve son olarak iki nokta \u00fcst \u00fcste (<code>:<\/code>) gelir. Fonksiyonun g\u00f6vdesi, girinti (indentation) ile belirtilir. Python, kod bloklar\u0131n\u0131 ay\u0131rmak i\u00e7in girintileri kulland\u0131\u011f\u0131ndan, fonksiyon g\u00f6vdesindeki her sat\u0131r\u0131n ayn\u0131 d\u00fczeyde girintili olmas\u0131 \u00f6nemlidir. Fonksiyonun i\u00e7indeki i\u015flemler tamamland\u0131ktan sonra, genellikle bir de\u011fer d\u00f6nd\u00fcrmek i\u00e7in <code>return<\/code> ifadesi kullan\u0131l\u0131r. E\u011fer <code>return<\/code> ifadesi kullan\u0131lmazsa, fonksiyon varsay\u0131lan olarak <code>None<\/code> de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>Bir \u00f6rnekle a\u00e7\u0131klayal\u0131m. Diyelim ki, iki say\u0131y\u0131 toplayan basit bir fonksiyon yazmak istiyoruz:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndef toplama_yap(sayi1, sayi2):\n    \"\"\"\n    Bu fonksiyon, verilen iki say\u0131y\u0131 toplar ve sonucu d\u00f6nd\u00fcr\u00fcr.\n    \"\"\"\n    sonuc = sayi1 + sayi2\n    return sonuc\n\n# Fonksiyonu \u00e7a\u011f\u0131rma\ntoplam = toplama_yap(5, 3)\nprint(f\"5 ve 3'\u00fcn toplam\u0131: {toplam}\")\n\ntoplam_baska = toplama_yap(10, 25)\nprint(f\"10 ve 25'in toplam\u0131: {toplam_baska}\")\n  <\/code><\/pre>\n<\/div>\n<p>Yukar\u0131daki \u00f6rnekte, <code>toplama_yap<\/code> ad\u0131nda bir fonksiyon tan\u0131mlad\u0131k. Bu fonksiyon, <code>sayi1<\/code> ve <code>sayi2<\/code> olmak \u00fczere iki parametre al\u0131r. Fonksiyonun i\u00e7inde bu iki say\u0131 toplan\u0131r ve <code>sonuc<\/code> de\u011fi\u015fkenine atan\u0131r. Son olarak, <code>return sonuc<\/code> ifadesiyle bu de\u011fer fonksiyonun \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 yere geri g\u00f6nderilir. Fonksiyonu \u00e7a\u011f\u0131rmak i\u00e7in, sadece fonksiyon ad\u0131n\u0131 ve parantez i\u00e7inde gerekli arg\u00fcmanlar\u0131 (parametrelerin yerine ge\u00e7ecek de\u011ferler) yazmam\u0131z yeterlidir. \u00d6rne\u011fin, <code>toplama_yap(5, 3)<\/code> ifadesi fonksiyonu \u00e7a\u011f\u0131r\u0131r ve 5 ile 3&#8217;\u00fc toplayarak 8 sonucunu d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>Fonksiyonlar, parametre almayabilir veya hi\u00e7bir de\u011fer d\u00f6nd\u00fcrmeyebilir. \u00d6rne\u011fin, sadece ekrana bir mesaj yazd\u0131ran bir fonksiyon \u015f\u00f6yle olabilir:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndef merhaba_dunya_yazdir():\n    \"\"\"\n    Ekrana \"Merhaba D\u00fcnya!\" yazd\u0131ran bir fonksiyon.\n    \"\"\"\n    print(\"Merhaba D\u00fcnya!\")\n\nmerhaba_dunya_yazdir() # Fonksiyonu \u00e7a\u011f\u0131r\n  <\/code><\/pre>\n<\/div>\n<p>Bu fonksiyon herhangi bir parametre almaz ve <code>return<\/code> ifadesi i\u00e7ermedi\u011fi i\u00e7in varsay\u0131lan olarak <code>None<\/code> d\u00f6nd\u00fcr\u00fcr. Ancak temel amac\u0131 ekrana bir \u00e7\u0131kt\u0131 vermek oldu\u011fundan, bu durum bir sorun te\u015fkil etmez. Fonksiyonlar\u0131n bu esnek yap\u0131s\u0131, onlar\u0131 farkl\u0131 ihtiya\u00e7lara g\u00f6re uyarlamam\u0131za olanak tan\u0131r. Python&#8217;da fonksiyon tan\u0131mlarken, fonksiyonun ne i\u015f yapt\u0131\u011f\u0131n\u0131 a\u00e7\u0131klayan bir docstring (belge dizisi) eklemek iyi bir programlama prati\u011fidir. Bu, fonksiyonunuzu ba\u015fkalar\u0131 veya gelecekteki siz i\u00e7in daha anla\u015f\u0131l\u0131r hale getirir. Docstring, fonksiyon tan\u0131m\u0131n\u0131n hemen alt\u0131na \u00fc\u00e7 t\u0131rnak (<code>\"\"\"<\/code>) aras\u0131na yaz\u0131l\u0131r ve <code>help()<\/code> fonksiyonu veya IDE&#8217;ler taraf\u0131ndan okunabilir.<\/p>\n<h3>Fonksiyon Parametre T\u00fcrleri: Esnek ve G\u00fc\u00e7l\u00fc Fonksiyonlar Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>Python fonksiyonlar\u0131, \u00e7e\u015fitli parametre t\u00fcrleri sayesinde son derece esnek ve g\u00fc\u00e7l\u00fcd\u00fcr. Bu parametre t\u00fcrleri, fonksiyonlar\u0131m\u0131z\u0131n farkl\u0131 senaryolarda daha dinamik ve kullan\u0131\u015fl\u0131 olmas\u0131n\u0131 sa\u011flar. Temel olarak d\u00f6rt ana parametre t\u00fcr\u00fc vard\u0131r: konumsal (positional) parametreler, anahtar kelime (keyword) parametreler, varsay\u0131lan (default) parametre de\u011ferleri ve de\u011fi\u015fken say\u0131da arg\u00fcmanlar (<code>*args<\/code> ve <code>**kwargs<\/code>).<\/p>\n<p><strong>Konumsal Parametreler:<\/strong> Fonksiyon \u00e7a\u011fr\u0131l\u0131rken arg\u00fcmanlar\u0131n s\u0131ras\u0131na g\u00f6re e\u015fle\u015fen parametrelerdir. Yukar\u0131daki <code>toplama_yap(sayi1, sayi2)<\/code> \u00f6rne\u011finde, <code>5<\/code> de\u011feri <code>sayi1<\/code>&#8216;e, <code>3<\/code> de\u011feri ise <code>sayi2<\/code>&#8216;ye atan\u0131r. Arg\u00fcmanlar\u0131n s\u0131ras\u0131 \u00f6nemlidir; e\u011fer <code>toplama_yap(3, 5)<\/code> deseydik, <code>sayi1<\/code> 3, <code>sayi2<\/code> ise 5 olurdu.<\/p>\n<p><strong>Anahtar Kelime Parametreler:<\/strong> Fonksiyon \u00e7a\u011fr\u0131l\u0131rken parametre adlar\u0131n\u0131n a\u00e7\u0131k\u00e7a belirtildi\u011fi durumlard\u0131r. Bu, arg\u00fcmanlar\u0131n s\u0131ras\u0131n\u0131n \u00f6nemini ortadan kald\u0131r\u0131r ve kodun okunabilirli\u011fini art\u0131r\u0131r. \u00d6zellikle \u00e7ok say\u0131da parametresi olan fonksiyonlarda faydal\u0131d\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>\ndef bilgi_goster(ad, soyad, yas):\n    print(f\"Ad: {ad}, Soyad: {soyad}, Ya\u015f: {yas}\")\n\nbilgi_goster(ad=\"Ay\u015fe\", soyad=\"Y\u0131lmaz\", yas=30)\nbilgi_goster(yas=25, ad=\"Mehmet\", soyad=\"Demir\") # S\u0131ra fark etmez\n  <\/code><\/pre>\n<\/div>\n<p><strong>Varsay\u0131lan Parametre De\u011ferleri:<\/strong> Bir parametreye varsay\u0131lan bir de\u011fer atayarak, o parametre i\u00e7in bir arg\u00fcman sa\u011flanmad\u0131\u011f\u0131nda bu varsay\u0131lan de\u011ferin kullan\u0131lmas\u0131n\u0131 sa\u011flayabiliriz. Bu, fonksiyonun daha esnek olmas\u0131n\u0131 ve farkl\u0131 kullan\u0131m senaryolar\u0131na uyum sa\u011flamas\u0131n\u0131 sa\u011flar.<\/p>\n<div class=\"code-container\">\n<pre><code>\ndef e_posta_gonder(alici, konu=\"Bilgilendirme\", mesaj=\"Merhaba!\"):\n    print(f\"Kime: {alici}, Konu: {konu}, Mesaj: {mesaj}\")\n\ne_posta_gonder(\"ali@example.com\") # Varsay\u0131lan konu ve mesaj kullan\u0131l\u0131r\ne_posta_gonder(\"veli@example.com\", konu=\"Acil\", mesaj=\"Toplant\u0131 saati de\u011fi\u015fti.\")\n  <\/code><\/pre>\n<\/div>\n<p>Varsay\u0131lan de\u011ferlere sahip parametreler, her zaman varsay\u0131lan de\u011fere sahip olmayan parametrelerden sonra gelmelidir.<\/p>\n<p><strong>De\u011fi\u015fken Say\u0131da Arg\u00fcmanlar (<code>*args<\/code> ve <code><strong>kwargs<\/code>):<\/strong> Bazen bir fonksiyonun ka\u00e7 arg\u00fcman alaca\u011f\u0131n\u0131 \u00f6nceden bilemeyiz. Bu gibi durumlarda, <code>*args<\/code> ve <code><\/strong>kwargs<\/code> devreye girer.<\/p>\n<ul>\n<li><code>*args<\/code> (arbitrary positional arguments): Fonksiyona istedi\u011finiz say\u0131da konumsal arg\u00fcman g\u00f6ndermenizi sa\u011flar. Bu arg\u00fcmanlar, fonksiyon i\u00e7inde bir tuple (demet) olarak toplan\u0131r.<\/li>\n<li><code>**kwargs<\/code> (arbitrary keyword arguments): Fonksiyona istedi\u011finiz say\u0131da anahtar kelime arg\u00fcman\u0131 g\u00f6ndermenizi sa\u011flar. Bu arg\u00fcmanlar, fonksiyon i\u00e7inde bir dictionary (s\u00f6zl\u00fck) olarak toplan\u0131r.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\ndef urun_listesi_goster(*urunler):\n    print(\"Market Listesi:\")\n    for urun in urunler:\n        print(f\"- {urun}\")\n\nurun_listesi_goster(\"Elma\", \"Armut\", \"Muz\")\nurun_listesi_goster(\"S\u00fct\", \"Ekmek\")\n\ndef profil_olustur(**bilgiler):\n    print(\"Kullan\u0131c\u0131 Profili:\")\n    for anahtar, deger in bilgiler.items():\n        print(f\"{anahtar.replace('_', ' ').title()}: {deger}\")\n\nprofil_olustur(ad=\"Ay\u015fe\", soyad=\"Y\u0131lmaz\", yas=30, meslek=\"M\u00fchendis\")\nprofil_olustur(sehir=\"Ankara\", ilgi_alani=\"Kitap Okuma\")\n  <\/code><\/pre>\n<\/div>\n<p>Bu parametre t\u00fcrleri, fonksiyonlar\u0131n\u0131z\u0131 \u00e7ok daha esnek ve genel ama\u00e7l\u0131 hale getirerek farkl\u0131 veri yap\u0131lar\u0131 ve kullan\u0131m senaryolar\u0131na kolayca adapte olmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir veritaban\u0131 sorgusu olu\u015fturan bir fonksiyonda, filtreleme ko\u015fullar\u0131n\u0131 <code>**kwargs<\/code> ile dinamik olarak ge\u00e7irebilir veya bir raporlama arac\u0131nda farkl\u0131 metrikleri <code>*args<\/code> ile toplayabilirsiniz.<\/p>\n<h3>Kapsam (Scope) ve Ya\u015fam D\u00f6ng\u00fcs\u00fc: De\u011fi\u015fkenler Fonksiyonlarda Nas\u0131l Davran\u0131r?<\/h3>\n<p>Python&#8217;da de\u011fi\u015fkenlerin eri\u015filebilirli\u011fi ve ya\u015fam s\u00fcresi, &#8220;kapsam&#8221; (scope) ad\u0131 verilen bir kavramla belirlenir. Kapsam, bir de\u011fi\u015fkenin kodun hangi b\u00f6l\u00fcm\u00fcnden eri\u015filebilece\u011fini tan\u0131mlar. Bu, \u00f6zellikle fonksiyonlarla \u00e7al\u0131\u015f\u0131rken \u00e7ok \u00f6nemlidir, \u00e7\u00fcnk\u00fc de\u011fi\u015fkenlerin yanl\u0131\u015f anla\u015f\u0131lmas\u0131 veya yanl\u0131\u015f kullan\u0131lmas\u0131 beklenmedik hatalara yol a\u00e7abilir. Python&#8217;da temel olarak iki ana kapsam t\u00fcr\u00fc bulunur: yerel (local) kapsam ve k\u00fcresel (global) kapsam. Ayr\u0131ca, i\u00e7 i\u00e7e fonksiyonlar i\u00e7in <code>nonlocal<\/code> kapsam\u0131 da mevcuttur.<\/p>\n<p><strong>Yerel Kapsam (Local Scope):<\/strong> Bir fonksiyonun i\u00e7inde tan\u0131mlanan de\u011fi\u015fkenler, o fonksiyonun yerel kapsam\u0131na aittir. Bu de\u011fi\u015fkenlere sadece o fonksiyonun i\u00e7inden eri\u015filebilir. Fonksiyonun y\u00fcr\u00fct\u00fclmesi sona erdi\u011finde, yerel de\u011fi\u015fkenler bellekten silinir ve art\u0131k eri\u015filemez hale gelirler. Bu, fonksiyonlar\u0131n kendi i\u00e7 \u00e7al\u0131\u015fma alanlar\u0131na sahip olmas\u0131n\u0131 sa\u011flar ve farkl\u0131 fonksiyonlarda ayn\u0131 isimde de\u011fi\u015fkenlerin \u00e7ak\u0131\u015fmas\u0131n\u0131 engeller. \u00d6rne\u011fin:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndef yerel_degisken_ornek():\n    mesaj = \"Bu bir yerel de\u011fi\u015fkendir.\" # Yerel de\u011fi\u015fken\n    print(mesaj)\n\nyerel_degisken_ornek()\n# print(mesaj) # Hata verecektir: 'mesaj' tan\u0131ml\u0131 de\u011fil\n  <\/code><\/pre>\n<\/div>\n<p>Yukar\u0131daki \u00f6rnekte, <code>mesaj<\/code> de\u011fi\u015fkeni sadece <code>yerel_degisken_ornek<\/code> fonksiyonunun i\u00e7inden eri\u015filebilir. Fonksiyon d\u0131\u015f\u0131nda bu de\u011fi\u015fkene eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131zda bir <code>NameError<\/code> al\u0131r\u0131z.<\/p>\n<p><strong>K\u00fcresel Kapsam (Global Scope):<\/strong> Bir Python dosyas\u0131n\u0131n en \u00fcst seviyesinde, yani herhangi bir fonksiyonun veya s\u0131n\u0131f\u0131n d\u0131\u015f\u0131nda tan\u0131mlanan de\u011fi\u015fkenler k\u00fcresel kapsama aittir. Bu de\u011fi\u015fkenlere kodun herhangi bir yerinden (fonksiyonlar\u0131n i\u00e7inden de dahil olmak \u00fczere) eri\u015filebilir. K\u00fcresel de\u011fi\u015fkenler, program\u0131n y\u00fcr\u00fct\u00fclmesi boyunca varl\u0131\u011f\u0131n\u0131 s\u00fcrd\u00fcr\u00fcr.<\/p>\n<div class=\"code-container\">\n<pre><code>\nglobal_sayi = 100 # K\u00fcresel de\u011fi\u015fken\n\ndef global_degisken_kullan():\n    print(f\"Fonksiyon i\u00e7inden k\u00fcresel say\u0131: {global_sayi}\")\n\nglobal_degisken_kullan()\nprint(f\"Fonksiyon d\u0131\u015f\u0131ndan k\u00fcresel say\u0131: {global_sayi}\")\n  <\/code><\/pre>\n<\/div>\n<p>Bir fonksiyonun i\u00e7inden k\u00fcresel bir de\u011fi\u015fkenin de\u011ferini de\u011fi\u015ftirmek istedi\u011fimizde, <code>global<\/code> anahtar kelimesini kullanmam\u0131z gerekir. Aksi takdirde, Python fonksiyon i\u00e7inde ayn\u0131 isimde yeni bir yerel de\u011fi\u015fken olu\u015fturur ve k\u00fcresel de\u011fi\u015fken etkilenmez. Ancak, k\u00fcresel de\u011fi\u015fkenleri fonksiyonlar i\u00e7inde s\u0131k\u00e7a de\u011fi\u015ftirmek iyi bir programlama prati\u011fi de\u011fildir, \u00e7\u00fcnk\u00fc bu durum kodun okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 zorla\u015ft\u0131rabilir.<\/p>\n<div class=\"code-container\">\n<pre><code>\nsayac = 0 # K\u00fcresel de\u011fi\u015fken\n\ndef sayac_arttir():\n    global sayac # K\u00fcresel 'sayac' de\u011fi\u015fkenini kullanaca\u011f\u0131m\u0131z\u0131 belirtiyoruz\n    sayac += 1\n    print(f\"Saya\u00e7: {sayac}\")\n\nsayac_arttir() # \u00c7\u0131kt\u0131: Saya\u00e7: 1\nsayac_arttir() # \u00c7\u0131kt\u0131: Saya\u00e7: 2\nprint(f\"Son k\u00fcresel saya\u00e7 de\u011feri: {sayac}\") # \u00c7\u0131kt\u0131: Son k\u00fcresel saya\u00e7 de\u011feri: 2\n  <\/code><\/pre>\n<\/div>\n<p><strong>Nonlocal Kapsam:<\/strong> \u0130\u00e7 i\u00e7e (nested) fonksiyonlarda kullan\u0131l\u0131r. D\u0131\u015f fonksiyonda tan\u0131mlanm\u0131\u015f ancak i\u00e7 fonksiyona g\u00f6re k\u00fcresel olmayan bir de\u011fi\u015fkeni de\u011fi\u015ftirmek i\u00e7in <code>nonlocal<\/code> anahtar kelimesi kullan\u0131l\u0131r. Bu, bir closure (kapan\u0131\u015f) olu\u015fturulurken \u00f6zellikle faydal\u0131d\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>\ndef dis_fonksiyon():\n    x = \"d\u0131\u015f de\u011fi\u015fken\"\n\n    def ic_fonksiyon():\n        nonlocal x # D\u0131\u015f fonksiyondaki x'i de\u011fi\u015ftiriyoruz\n        x = \"i\u00e7ten de\u011fi\u015ftirildi\"\n        print(f\"\u0130\u00e7 fonksiyon: {x}\")\n\n    ic_fonksiyon()\n    print(f\"D\u0131\u015f fonksiyon: {x}\")\n\ndis_fonksiyon()\n  <\/code><\/pre>\n<\/div>\n<p>Kapsam kurallar\u0131n\u0131 anlamak, de\u011fi\u015fkenlerin beklenmedik \u015fekillerde davranmas\u0131n\u0131 \u00f6nlemek ve daha g\u00fcvenli, \u00f6ng\u00f6r\u00fclebilir kod yazmak i\u00e7in hayati \u00f6neme sahiptir. Genellikle, bir fonksiyonun kendi i\u015fini yapmak i\u00e7in ihtiya\u00e7 duydu\u011fu t\u00fcm verileri parametre olarak almas\u0131 ve d\u00f6nd\u00fcrmesi en iyi pratiktir, bu da k\u00fcresel de\u011fi\u015fken ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<\/p>\n<h3>Lambda Fonksiyonlar\u0131 ve Y\u00fcksek Mertebeli Fonksiyonlar: Tek Sat\u0131rda Esneklik Kazanmak<\/h3>\n<p>Python, programlamada esnekli\u011fi art\u0131ran bir\u00e7ok \u00f6zelli\u011fe sahiptir ve lambda fonksiyonlar\u0131 ile y\u00fcksek mertebeli fonksiyonlar (higher-order functions) bu \u00f6zelliklerin ba\u015f\u0131nda gelir. Bu iki kavram, \u00f6zellikle k\u0131sa s\u00fcreli, tek kullan\u0131ml\u0131k veya ba\u015fka bir fonksiyona arg\u00fcman olarak ge\u00e7irilecek fonksiyonlar olu\u015fturmak i\u00e7in olduk\u00e7a g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r.<\/p>\n<p><strong>Lambda Fonksiyonlar\u0131:<\/strong> Lambda fonksiyonlar\u0131, anonim (isimsiz) fonksiyonlard\u0131r. Yani, normal <code>def<\/code> anahtar kelimesiyle tan\u0131mlad\u0131\u011f\u0131m\u0131z gibi bir isimle tan\u0131mlanmazlar. Genellikle tek bir ifade i\u00e7eren ve tek sat\u0131rda yaz\u0131labilen basit fonksiyonlar i\u00e7in kullan\u0131l\u0131rlar. S\u00f6zdizimi \u015fu \u015fekildedir: <code>lambda arg\u00fcmanlar: ifade<\/code>.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# Normal bir fonksiyon\ndef kare_al(x):\n    return x * x\n\nprint(kare_al(5)) # \u00c7\u0131kt\u0131: 25\n\n# Lambda fonksiyonu ile ayn\u0131 i\u015fi yapma\nkare_lambda = lambda x: x * x\nprint(kare_lambda(5)) # \u00c7\u0131kt\u0131: 25\n\n# Birden fazla arg\u00fcman alabilir\ntopla_lambda = lambda a, b: a + b\nprint(topla_lambda(10, 20)) # \u00c7\u0131kt\u0131: 30\n  <\/code><\/pre>\n<\/div>\n<p>Lambda fonksiyonlar\u0131, \u00f6zellikle <code>map()<\/code>, <code>filter()<\/code> ve <code>sorted()<\/code> gibi y\u00fcksek mertebeli fonksiyonlarla birlikte kullan\u0131ld\u0131\u011f\u0131nda \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. Bu fonksiyonlar, arg\u00fcman olarak ba\u015fka bir fonksiyonu kabul eder ve bu fonksiyona bir dizi (iterable) \u00fczerinde i\u015flem yapmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Y\u00fcksek Mertebeli Fonksiyonlar:<\/strong> Bir veya daha fazla fonksiyonu arg\u00fcman olarak alan veya sonu\u00e7 olarak bir fonksiyon d\u00f6nd\u00fcren fonksiyonlard\u0131r. Python&#8217;da <code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code> (<code>functools<\/code> mod\u00fcl\u00fcnden) gibi bir\u00e7ok yerle\u015fik y\u00fcksek mertebeli fonksiyon bulunur.<\/p>\n<ul>\n<li><strong><code>map(fonksiyon, dizi)<\/code>:<\/strong> Bir dizi i\u00e7indeki her \u00f6\u011feye belirtilen fonksiyonu uygular ve sonu\u00e7lar\u0131 i\u00e7eren yeni bir dizi (map object) d\u00f6nd\u00fcr\u00fcr.<\/li>\n<div class=\"code-container\">\n<pre><code>\nsayilar = [1, 2, 3, 4, 5]\nkareler = list(map(lambda x: x * x, sayilar))\nprint(kareler) # \u00c7\u0131kt\u0131: [1, 4, 9, 16, 25]\n      <\/code><\/pre>\n<\/p><\/div>\n<li><strong><code>filter(fonksiyon, dizi)<\/code>:<\/strong> Bir dizi i\u00e7indeki \u00f6\u011feleri, belirtilen fonksiyonun <code>True<\/code> d\u00f6nd\u00fcrd\u00fc\u011f\u00fc \u00f6\u011felere g\u00f6re filtreler ve sonu\u00e7lar\u0131 i\u00e7eren yeni bir dizi (filter object) d\u00f6nd\u00fcr\u00fcr.<\/li>\n<div class=\"code-container\">\n<pre><code>\nsayilar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\ncift_sayilar = list(filter(lambda x: x % 2 == 0, sayilar))\nprint(cift_sayilar) # \u00c7\u0131kt\u0131: [2, 4, 6, 8, 10]\n      <\/code><\/pre>\n<\/p><\/div>\n<li><strong><code>sorted(dizi, key=fonksiyon)<\/code>:<\/strong> Bir diziyi s\u0131ralar. <code>key<\/code> parametresi, s\u0131ralama i\u00e7in kullan\u0131lacak \u00f6zel bir fonksiyon belirtmemizi sa\u011flar.<\/li>\n<div class=\"code-container\">\n<pre><code>\nkelimeler = [\"elma\", \"armut\", \"kiraz\", \"muz\"]\nuzunluga_gore_sirali = sorted(kelimeler, key=lambda kelime: len(kelime))\nprint(uzunluga_gore_sirali) # \u00c7\u0131kt\u0131: ['muz', 'elma', 'armut', 'kiraz']\n\n# \u00d6\u011frenci listesini ya\u015fa g\u00f6re s\u0131ralama (karma\u015f\u0131k nesneler i\u00e7in lambda'n\u0131n g\u00fcc\u00fc)\nogrenciler = [\n    {\"ad\": \"Ay\u015fe\", \"yas\": 22},\n    {\"ad\": \"Can\", \"yas\": 19},\n    {\"ad\": \"Deniz\", \"yas\": 25}\n]\nyasa_gore_sirali_ogrenciler = sorted(ogrenciler, key=lambda ogrenci: ogrenci[\"yas\"])\nprint(yasa_gore_sirali_ogrenciler)\n# \u00c7\u0131kt\u0131: [{'ad': 'Can', 'yas': 19}, {'ad': 'Ay\u015fe', 'yas': 22}, {'ad': 'Deniz', 'yas': 25}]\n      <\/code><\/pre>\n<\/p><\/div>\n<\/ul>\n<p>Lambda fonksiyonlar\u0131 ve y\u00fcksek mertebeli fonksiyonlar, kodunuzu daha k\u0131sa, daha okunakl\u0131 ve fonksiyonel programlama tarz\u0131na daha uygun hale getirir. \u00d6zellikle veri i\u015fleme, liste manip\u00fclasyonlar\u0131 ve olay i\u015fleyicileri gibi senaryolarda s\u0131k\u00e7a kullan\u0131l\u0131rlar. Ancak, lambda fonksiyonlar\u0131n\u0131n karma\u015f\u0131k mant\u0131klar i\u00e7in uygun olmad\u0131\u011f\u0131n\u0131 unutmamak gerekir; bu t\u00fcr durumlar i\u00e7in normal <code>def<\/code> ile tan\u0131mlanm\u0131\u015f fonksiyonlar daha iyi bir se\u00e7imdir.<\/p>\n<h3>Dekorat\u00f6rler: Fonksiyon Davran\u0131\u015f\u0131n\u0131 De\u011fi\u015ftirmeden Geni\u015fletme Sanat\u0131<\/h3>\n<p>Python dekorat\u00f6rleri, mevcut fonksiyonlar\u0131n davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirmeden veya kodlar\u0131n\u0131 do\u011frudan manip\u00fcle etmeden onlara ek i\u015flevsellik eklemek i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc ve zarif bir y\u00f6ntemdir. Temel olarak, bir dekorat\u00f6r, arg\u00fcman olarak bir fonksiyon alan ve yeni bir fonksiyon d\u00f6nd\u00fcren bir fonksiyondur. Bu yeni fonksiyon genellikle orijinal fonksiyonu \u00e7a\u011f\u0131r\u0131r ve etraf\u0131na ek mant\u0131k sarar. Bu sayede, fonksiyonlar\u0131n &#8220;sarmalanmas\u0131&#8221; (wrapping) prensibiyle, loglama, yetkilendirme, zamanlama veya \u00f6nbellekleme gibi \u00e7apraz kesen konular\u0131 (cross-cutting concerns) kolayca uygulayabiliriz.<\/p>\n<p>Dekorat\u00f6rler, Python&#8217;\u0131n i\u00e7 i\u00e7e fonksiyonlar (nested functions) ve fonksiyonlar\u0131n birinci s\u0131n\u0131f nesneler (first-class objects) olmas\u0131 \u00f6zelliklerinden yararlan\u0131r. Yani, Python&#8217;da fonksiyonlar de\u011fi\u015fkenlere atanabilir, ba\u015fka fonksiyonlara arg\u00fcman olarak ge\u00e7irilebilir ve fonksiyonlardan d\u00f6nd\u00fcr\u00fclebilir.<\/p>\n<p>Basit bir dekorat\u00f6r \u00f6rne\u011fi ile ba\u015flayal\u0131m. Diyelim ki, bir fonksiyonun ka\u00e7 saniye s\u00fcrd\u00fc\u011f\u00fcn\u00fc \u00f6l\u00e7mek istiyoruz:<\/p>\n<div class=\"code-container\">\n<pre><code>\nimport time\n\ndef zaman_olc(fonk):\n    def sarmal_fonksiyon(*args, **kwargs):\n        baslangic_zamani = time.time()\n        sonuc = fonk(*args, **kwargs) # Orijinal fonksiyonu \u00e7a\u011f\u0131r\n        bitis_zamani = time.time()\n        gecen_sure = bitis_zamani - baslangic_zamani\n        print(f\"{fonk.__name__} fonksiyonu {gecen_sure:.4f} saniye s\u00fcrd\u00fc.\")\n        return sonuc\n    return sarmal_fonksiyon\n\n# \u015eimdi bu dekorat\u00f6r\u00fc bir fonksiyona uygulayal\u0131m\n@zaman_olc\ndef uzun_islem(saniye):\n    time.sleep(saniye)\n    return \"\u0130\u015flem tamamland\u0131!\"\n\n@zaman_olc\ndef toplama(a, b):\n    time.sleep(0.1)\n    return a + b\n\nprint(uzun_islem(2)) # uzun_islem fonksiyonu 2.0004 saniye s\u00fcrd\u00fc. \u0130\u015flem tamamland\u0131!\nprint(toplama(10, 20)) # toplama fonksiyonu 0.1001 saniye s\u00fcrd\u00fc. 30\n  <\/code><\/pre>\n<\/div>\n<p>Yukar\u0131daki \u00f6rnekte, <code>zaman_olc<\/code> ad\u0131nda bir dekorat\u00f6r fonksiyonu tan\u0131mlad\u0131k. Bu fonksiyon, arg\u00fcman olarak bir <code>fonk<\/code> (herhangi bir fonksiyon) al\u0131r. \u0130\u00e7inde, orijinal fonksiyonu sarmalayan <code>sarmal_fonksiyon<\/code> ad\u0131nda ba\u015fka bir fonksiyon tan\u0131mlar ve bunu d\u00f6nd\u00fcr\u00fcr. <code>sarmal_fonksiyon<\/code>, orijinal fonksiyonu \u00e7a\u011f\u0131rmadan \u00f6nce ve sonra zaman damgalar\u0131 al\u0131r, ge\u00e7en s\u00fcreyi hesaplar ve ekrana yazd\u0131r\u0131r.<\/p>\n<p><code>@zaman_olc<\/code> sentaks\u0131, <code>uzun_islem = zaman_olc(uzun_islem)<\/code> yazman\u0131n daha k\u0131sa ve daha okunakl\u0131 bir yoludur. Bu sentaks, fonksiyonun hemen \u00fczerinde kullan\u0131ld\u0131\u011f\u0131nda, alt\u0131ndaki fonksiyonu otomatik olarak belirtilen dekorat\u00f6r ile sarmalar. Bu sayede, <code>uzun_islem<\/code> fonksiyonunun koduna dokunmadan, ona zaman \u00f6l\u00e7me yetene\u011fi eklemi\u015f olduk.<\/p>\n<p>Dekorat\u00f6rlerin kullan\u0131m alanlar\u0131 \u00e7ok geni\u015ftir:<\/p>\n<ul>\n<li><strong>Loglama:<\/strong> Fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131, arg\u00fcmanlar\u0131n\u0131 ve d\u00f6n\u00fc\u015f de\u011ferlerini kaydetmek.<\/li>\n<li><strong>Yetkilendirme:<\/strong> Bir kullan\u0131c\u0131n\u0131n belirli bir fonksiyona eri\u015fim izni olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek.<\/li>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> Pahal\u0131 fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131n sonu\u00e7lar\u0131n\u0131 \u00f6nbelle\u011fe almak ve ayn\u0131 arg\u00fcmanlarla tekrar \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda h\u0131zl\u0131ca d\u00f6nd\u00fcrmek.<\/li>\n<li><strong>Giri\u015f Do\u011frulama:<\/strong> Fonksiyona gelen arg\u00fcmanlar\u0131n belirli ko\u015fullar\u0131 sa\u011flay\u0131p sa\u011flamad\u0131\u011f\u0131n\u0131 kontrol etmek.<\/li>\n<\/ul>\n<p>Birden fazla dekorat\u00f6r\u00fc bir fonksiyona zincirleme olarak da uygulayabiliriz. Bu durumda, dekorat\u00f6rler yukar\u0131dan a\u015fa\u011f\u0131ya do\u011fru s\u0131rayla uygulan\u0131r, yani en \u00fcstteki dekorat\u00f6r en d\u0131\u015ftaki sarmal\u0131 olu\u015fturur.<\/p>\n<div class=\"code-container\">\n<pre><code>\ndef debug_log(fonk):\n    def sarmal(*args, **kwargs):\n        print(f\"DEBUG: {fonk.__name__} \u00e7a\u011fr\u0131ld\u0131, arg\u00fcmanlar: {args}, {kwargs}\")\n        sonuc = fonk(*args, **kwargs)\n        print(f\"DEBUG: {fonk.__name__} d\u00f6nd\u00fc, sonu\u00e7: {sonuc}\")\n        return sonuc\n    return sarmal\n\n@debug_log\n@zaman_olc # \u00d6nce zaman_olc uygulan\u0131r, sonra debug_log\ndef carpma(x, y):\n    time.sleep(0.05)\n    return x * y\n\nprint(carpma(6, 7))\n  <\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, <code>carpma<\/code> fonksiyonu hem zaman \u00f6l\u00e7me hem de debug loglama yeteneklerine sahip olur. Dekorat\u00f6rler, kod tekrar\u0131n\u0131 azaltman\u0131n, mod\u00fclerli\u011fi art\u0131rman\u0131n ve kodunuzu daha &#8220;temiz&#8221; tutman\u0131n harika bir yoludur. Karma\u015f\u0131k sistemlerde, \u00f6zellikle web framework&#8217;lerinde (yaz\u0131l\u0131m \u00e7er\u00e7eveleri) (\u00f6rne\u011fin Flask veya Django&#8217;da route tan\u0131mlamalar\u0131) ve API geli\u015ftirmede s\u0131k\u00e7a kullan\u0131l\u0131rlar.<\/p>\n<h3>Sonu\u00e7: Python Fonksiyonlar\u0131 ile Daha \u0130yi Kodlama Pratikleri<\/h3>\n<p>Bu makalede, Python fonksiyonlar\u0131n\u0131n temelden ileri seviyeye kadar t\u00fcm y\u00f6nlerini ele ald\u0131k. Fonksiyonlar\u0131n, kod tekrar\u0131n\u0131 azaltma, okunabilirli\u011fi art\u0131rma ve bak\u0131m kolayl\u0131\u011f\u0131 sa\u011flama gibi temel faydalar\u0131ndan ba\u015flayarak, farkl\u0131 parametre t\u00fcrleri sayesinde nas\u0131l daha esnek fonksiyonlar olu\u015fturabilece\u011fimizi g\u00f6rd\u00fck. De\u011fi\u015fkenlerin kapsam\u0131n\u0131 (yerel, k\u00fcresel, nonlocal) anlayarak beklenmedik hatalar\u0131n \u00f6n\u00fcne ge\u00e7meyi \u00f6\u011frendik. Lambda fonksiyonlar\u0131 ve y\u00fcksek mertebeli fonksiyonlar\u0131n, \u00f6zellikle tek sat\u0131rl\u0131k ve k\u0131sa s\u00fcreli i\u015flemler i\u00e7in ne kadar pratik oldu\u011funu ke\u015ffettik. Son olarak, dekorat\u00f6rlerin, mevcut fonksiyonlar\u0131n davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirmeden onlara ek i\u015flevsellik katman\u0131n zarif bir yolu oldu\u011funu inceledik.<\/p>\n<p>Python fonksiyonlar\u0131, modern yaz\u0131l\u0131m geli\u015ftirmenin temel yap\u0131 ta\u015flar\u0131ndan biridir. Onlar\u0131 etkin bir \u015fekilde kullanmak, sadece daha k\u0131sa kod yazman\u0131z\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda daha mod\u00fcler, test edilebilir, bak\u0131m\u0131 kolay ve s\u00fcrd\u00fcr\u00fclebilir uygulamalar geli\u015ftirmenize olanak tan\u0131r. \u0130yi isimlendirilmi\u015f, tek bir i\u015fe odaklanm\u0131\u015f ve do\u011fru parametrelerle tasarlanm\u0131\u015f fonksiyonlar, hem sizin hem de ekibinizin \u00fcretkenli\u011fini art\u0131racak ve projelerinizin kalitesini y\u00fckseltecektir. Unutmay\u0131n, &#8220;Don&#8217;t Repeat Yourself (DRY)&#8221; prensibi, fonksiyonlar\u0131 kullanman\u0131n en temel motivasyonlar\u0131ndan biridir ve bu prensibi benimsemek, sizi daha iyi bir Python geli\u015ftiricisi yapacakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li><strong>Python&#8217;da bir fonksiyonun geri d\u00f6n\u00fc\u015f de\u011feri olmak zorunda m\u0131?<\/strong><br \/>\n        Hay\u0131r, bir fonksiyonun mutlaka bir de\u011fer d\u00f6nd\u00fcrmesi gerekmez. E\u011fer <code>return<\/code> ifadesi kullan\u0131lmazsa, Python fonksiyonun sonunda varsay\u0131lan olarak <code>None<\/code> de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><strong><code>*args<\/code> ve <code>**kwargs<\/code> aras\u0131ndaki fark nedir?<\/strong><br \/>\n        <code>*args<\/code>, fonksiyona de\u011fi\u015fken say\u0131da konumsal arg\u00fcman (tuple olarak) ge\u00e7irmek i\u00e7in kullan\u0131l\u0131rken, <code>**kwargs<\/code>, de\u011fi\u015fken say\u0131da anahtar kelime arg\u00fcman\u0131 (dictionary olarak) ge\u00e7irmek i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Bir fonksiyon i\u00e7inde k\u00fcresel bir de\u011fi\u015fkenin de\u011ferini nas\u0131l de\u011fi\u015ftirebilirim?<\/strong><br \/>\n        Bir fonksiyon i\u00e7inde k\u00fcresel bir de\u011fi\u015fkenin de\u011ferini de\u011fi\u015ftirmek i\u00e7in <code>global<\/code> anahtar kelimesini kullanman\u0131z gerekir. \u00d6rne\u011fin: <code>global sayac; sayac += 1<\/code>. Ancak bu durum, kodun okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 zorla\u015ft\u0131rabilece\u011fi i\u00e7in dikkatli kullan\u0131lmal\u0131d\u0131r.<\/li>\n<li><strong>Lambda fonksiyonlar\u0131 ne zaman kullan\u0131lmal\u0131, ne zaman normal fonksiyonlar tercih edilmeli?<\/strong><br \/>\n        Lambda fonksiyonlar\u0131, tek sat\u0131rl\u0131k, basit ve genellikle ba\u015fka bir fonksiyona arg\u00fcman olarak ge\u00e7irilecek anonim fonksiyonlar i\u00e7in idealdir. Daha karma\u015f\u0131k mant\u0131klar, birden fazla ifade i\u00e7eren veya belgelendirilmesi gereken durumlar i\u00e7in normal (<code>def<\/code> ile tan\u0131mlanm\u0131\u015f) fonksiyonlar tercih edilmelidir.<\/li>\n<li><strong>Dekorat\u00f6r kullanmak kodun performans\u0131n\u0131 etkiler mi?<\/strong><br \/>\n        Evet, dekorat\u00f6rler ek bir sarmalama katman\u0131 ekledi\u011fi i\u00e7in minimal d\u00fczeyde performans maliyeti olu\u015fturabilir. Ancak \u00e7o\u011fu durumda bu maliyet ihmal edilebilir d\u00fczeydedir ve kodun okunabilirli\u011fi, mod\u00fclerli\u011fi ve bak\u0131m kolayl\u0131\u011f\u0131 sa\u011flad\u0131\u011f\u0131 faydalar bu maliyetten \u00e7ok daha a\u011f\u0131r basar.<\/li>\n<\/ul>\n<p>#Python #Fonksiyonlar #Yaz\u0131l\u0131mGeli\u015ftirme #Kodlama #Programlama<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/python-functions-reduce-code-repetition\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/python-functions-reduce-code-repetition<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Python fonksiyonlar\u0131, kodunuzu par\u00e7alara ay\u0131rarak daha okunabilir, y\u00f6netilebilir ve tekrar kullan\u0131labilir hale getirmenin temel ta\u015f\u0131d\u0131r.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-42999","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131\" \/>\n<meta property=\"og:description\" content=\"Python fonksiyonlar\u0131, kodunuzu par\u00e7alara ay\u0131rarak daha okunabilir, y\u00f6netilebilir ve tekrar kullan\u0131labilir hale getirmenin temel ta\u015f\u0131d\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-02T06:08:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-02T06:08:59+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131\",\"datePublished\":\"2026-07-02T06:08:39+00:00\",\"dateModified\":\"2026-07-02T06:08:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/\"},\"wordCount\":3068,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/\",\"name\":\"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-07-02T06:08:39+00:00\",\"dateModified\":\"2026-07-02T06:08:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/","og_locale":"tr_TR","og_type":"article","og_title":"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131","og_description":"Python fonksiyonlar\u0131, kodunuzu par\u00e7alara ay\u0131rarak daha okunabilir, y\u00f6netilebilir ve tekrar kullan\u0131labilir hale getirmenin temel ta\u015f\u0131d\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-07-02T06:08:39+00:00","article_modified_time":"2026-07-02T06:08:59+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131","datePublished":"2026-07-02T06:08:39+00:00","dateModified":"2026-07-02T06:08:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/"},"wordCount":3068,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/","url":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/","name":"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-07-02T06:08:39+00:00","dateModified":"2026-07-02T06:08:59+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-fonksiyonlari-kodunuzu-daha-duzenli-ve-yeniden-kullanilabilir-hale-getirmenin-yollari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Fonksiyonlar\u0131: Kodunuzu Daha D\u00fczenli ve Yeniden Kullan\u0131labilir Hale Getirmenin Yollar\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=42999"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42999\/revisions"}],"predecessor-version":[{"id":43000,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42999\/revisions\/43000"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=42999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=42999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=42999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}