{"id":1139,"date":"2021-01-01T22:15:13","date_gmt":"2021-01-01T19:15:13","guid":{"rendered":"http:\/\/www.aydiner.gen.tr\/?p=1139"},"modified":"2022-01-24T13:16:14","modified_gmt":"2022-01-24T10:16:14","slug":"python-print-fonksiyonu","status":"publish","type":"post","link":"https:\/\/www.aydiner.gen.tr\/index.php\/2021\/01\/01\/python-print-fonksiyonu\/","title":{"rendered":"Python print() Fonksiyonu"},"content":{"rendered":"<p><span style=\"color: #008080;\"><strong>print() Fonksiyonu<\/strong><\/span><br \/>\nGe\u00e7en b\u00f6l\u00fcmde bir yandan Python\u2019\u0131n etkile\u015fimli kabu\u011funu yak\u0131ndan tan\u0131y\u0131p bu vesileyle baz\u0131 \u00f6nemli fonksiyon ve ara\u00e7lar\u0131 \u00f6\u011frenirken, \u00f6b\u00fcr yandan bu \u00f6\u011frendiklerimizi kullanarak \u00f6rnek programlar yazd\u0131k. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, az\u0131c\u0131k bir bilgiyle dahi az \u00e7ok i\u015fe yarar programlar yazmak m\u00fcmk\u00fcn olabiliyor. Daha yararl\u0131 programlar yazabilmek i\u00e7in hen\u00fcz \u00f6\u011frenmemiz gereken pek \u00e7ok \u015fey var. \u0130\u015fte bu b\u00f6l\u00fcmde, \u2018daha yararl\u0131 programlar yazmam\u0131z\u0131\u2019 sa\u011flayacak \u00e7ok \u00f6nemli bir ara\u00e7tan s\u00f6z edece\u011fiz. \u00d6neminden dolay\u0131 ayr\u0131nt\u0131l\u0131 bir \u015fekilde anlataca\u011f\u0131m\u0131z bu arac\u0131n ad\u0131 print() fonksiyonu.<\/p>\n<p><!--more--><\/p>\n<p>\u00d6\u011frencilerin kolay ula\u015f\u0131m\u0131 i\u00e7in\u00a0 https:\/\/python-istihza.yazbel.com\/print.html adresinden al\u0131nm\u0131\u015ft\u0131r.<\/p>\n<p>Elbette bu b\u00f6l\u00fcmde sadece print() fonksiyonundan bahsetmeyece\u011fiz. Bu b\u00f6l\u00fcmde print() fonksiyonunun yan\u0131s\u0131ra Python\u2019daki baz\u0131 \u00f6nemli temel konular\u0131 da ele alaca\u011f\u0131z. Mesela bu b\u00f6l\u00fcmde Python\u2019daki karakter dizilerine ve say\u0131lara ili\u015fkin \u00e7ok \u00f6nemli bilgiler verece\u011fiz. Ayr\u0131ca print() fonksiyonu vesilesiyle Python\u2019daki \u2018fonksiyon\u2019 konusuna da sa\u011flam bir giri\u015f yapm\u0131\u015f, bu kavram ile ilgili ilk bilgilerimizi alm\u0131\u015f olaca\u011f\u0131z. S\u00f6z\u00fcn \u00f6z\u00fc, bu b\u00f6l\u00fcm bizim i\u00e7in, deyim yerindeyse, tam anlam\u0131yla bir d\u00f6n\u00fcm noktas\u0131 olacak.<\/p>\n<p>O halde isterseniz laf\u0131 daha fazla uzatmadan i\u015fe print() fonksiyonunun ne oldu\u011fu ve ne i\u015fe yarad\u0131\u011f\u0131n\u0131 anlatarak ba\u015flayal\u0131m.<\/p>\n<p><span style=\"color: #008080;\"><strong>Nedir, Ne \u0130\u015fe Yarar?<\/strong><\/span><br \/>\n\u015eimdiye kadar etkile\u015fimli kabukta gerek karakter dizilerini gerekse say\u0131lar\u0131 do\u011frudan ekrana yazd\u0131k. Yani \u015f\u00f6yle bir \u015fey yapt\u0131k:<\/p>\n<p>&gt;&gt;&gt; &#8220;Python programlama dili&#8221;<\/p>\n<p>&#8216;Python programlama dili&#8217;<\/p>\n<p>&gt;&gt;&gt; 6567<\/p>\n<p>6567<br \/>\nEtkile\u015fimli kabuk da, ekrana yazd\u0131\u011f\u0131m\u0131z bu karakter dizisi ve say\u0131y\u0131 do\u011frudan bize \u00e7\u0131kt\u0131 olarak verdi. Ancak ilerde Python kodlar\u0131m\u0131z\u0131 bir dosyaya kaydedip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda da g\u00f6rece\u011finiz gibi, Python\u2019\u0131n ekrana \u00e7\u0131kt\u0131 verebilmesi i\u00e7in yukar\u0131daki kullan\u0131m yeterli de\u011fildir. Yani yukar\u0131daki kullan\u0131m yaln\u0131zca etkile\u015fimli kabukta \u00e7al\u0131\u015f\u0131r. Bu kodlar\u0131 bir dosyaya kaydedip \u00e7al\u0131\u015ft\u0131rmak istedi\u011fimizde hi\u00e7bir \u00e7\u0131kt\u0131 alamay\u0131z. Python\u2019da yazd\u0131\u011f\u0131m\u0131z \u015feylerin ekrana \u00e7\u0131kt\u0131 olarak verilebilmesi i\u00e7in print() adl\u0131 \u00f6zel bir fonksiyondan yararlanmam\u0131z gerekir.<\/p>\n<p>O halde gelin bu print() fonksiyonunun ne i\u015fe yarad\u0131\u011f\u0131n\u0131 ve nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 anlamaya \u00e7al\u0131\u015fal\u0131m:<\/p>\n<p>print() de t\u0131pk\u0131 daha \u00f6nce g\u00f6rd\u00fc\u011f\u00fcm\u00fcz type(), len() ve pow() gibi bir fonksiyondur. Fonksiyonlar\u0131 ilerde daha ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyece\u011fimizi s\u00f6ylemi\u015ftik hat\u0131rlarsan\u0131z. O y\u00fczden fonksiyon kelimesine tak\u0131larak, burada anlatt\u0131\u011f\u0131m\u0131z \u015feylerin kafan\u0131z\u0131 kar\u0131\u015ft\u0131rmas\u0131na, moralinizi bozmas\u0131na izin vermeyin.<\/p>\n<p>print() fonksiyonunun g\u00f6revi ekrana \u00e7\u0131kt\u0131 vermemizi sa\u011flamakt\u0131r. Hemen bununla ilgili bir \u00f6rnek verelim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Python programlama dili&#8221;)<\/p>\n<p>Python programlama dili<br \/>\nBildi\u011finiz gibi burada g\u00f6rd\u00fc\u011f\u00fcm\u00fcz \u201cPython programlama dili\u201d bir karakter dizisidir. \u0130\u015fte print() fonksiyonunun g\u00f6revi bu karakter dizisini ekrana \u00e7\u0131kt\u0131 olarak vermektir. Peki bu karakter dizisini print() fonksiyonu olmadan yazd\u0131\u011f\u0131m\u0131zda da ekrana \u00e7\u0131kt\u0131 vermi\u015f olmuyor muyuz? Asl\u0131nda olmuyoruz. Dedi\u011fimiz gibi, ilerde programlar\u0131m\u0131z\u0131 dosyalara kaydedip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda, ba\u015f\u0131nda print() olmayan ifadelerin \u00e7\u0131kt\u0131da g\u00f6r\u00fcnmedi\u011fine \u015fahit olacaks\u0131n\u0131z.<\/p>\n<p>Daha \u00f6nce de dedi\u011fimiz gibi, etkile\u015fimli kabuk bir test ortam\u0131 olmas\u0131 a\u00e7\u0131s\u0131ndan rahat bir ortamd\u0131r. Bu sebeple bu ortamda ekrana \u00e7\u0131kt\u0131 verebilmek i\u00e7in print() fonksiyonunu kullanmak zorunda de\u011filsiniz. Yani ba\u015f\u0131nda print() olsa da olmasa da etkile\u015fimli kabuk ekrana yazd\u0131rmak istedi\u011finiz \u015feyi yazd\u0131r\u0131r. Ama iyi bir al\u0131\u015fkanl\u0131k olmas\u0131 a\u00e7\u0131s\u0131ndan, ekrana herhangi bir \u015fey yazd\u0131raca\u011f\u0131n\u0131zda ben size print() fonksiyonunu kullanman\u0131z\u0131 tavsiye ederim.<\/p>\n<p>print() son derece g\u00fc\u00e7l\u00fc bir fonksiyondur. Gelin isterseniz bu g\u00fc\u00e7l\u00fc ve faydal\u0131 fonksiyonu derin derin incelemeye koyulal\u0131m.<\/p>\n<p><span style=\"color: #008080;\"><strong>Nas\u0131l Kullan\u0131l\u0131r?<\/strong><\/span><br \/>\nYukar\u0131da verdi\u011fimiz \u00f6rnekte ilk g\u00f6z\u00fcm\u00fcze \u00e7arpan \u015fey, karakter dizisini print() fonksiyonunun parantezleri i\u00e7ine yazm\u0131\u015f olmam\u0131zd\u0131r. Biz bir fonksiyonun parantezleri i\u00e7inde belirtilen \u00f6\u011felere \u2018parametre\u2019 dendi\u011fini ge\u00e7en b\u00f6l\u00fcmde \u00f6\u011frenmi\u015ftik. T\u0131pk\u0131 \u00f6\u011frendi\u011fimiz \u00f6teki fonksiyonlar gibi, print() fonksiyonu da birtak\u0131m parametreler al\u0131r.<\/p>\n<p>Bu arada print() fonksiyonunun parantezini a\u00e7\u0131p parametreyi yazd\u0131ktan sonra, parantezi kapatmay\u0131 unutmuyoruz. Python programlama diline yeni ba\u015flayanlar\u0131n, hatta bazen deneyimli programc\u0131lar\u0131n bile en s\u0131k yapt\u0131\u011f\u0131 hatalardan biri a\u00e7t\u0131klar\u0131 parantezi kapatmay\u0131 unutmalar\u0131d\u0131r.<\/p>\n<p>Elbette, e\u011fer istersek burada do\u011frudan \u201cPython programlama dili\u201d adl\u0131 karakter dizisini kullanmak yerine, \u00f6nce bu karakter dizisini bir de\u011fi\u015fkene atay\u0131p, sonra da print() fonksiyonunun parantezleri i\u00e7inde bu de\u011fi\u015fkeni kullanabiliriz. Yani:<\/p>\n<p>&gt;&gt;&gt; dil = &#8220;Python programlama dili&#8221;<br \/>\n&gt;&gt;&gt; print(dil)<\/p>\n<p>Python programlama dili<br \/>\nBu arada, hem \u015fimdi verdi\u011fimiz, hem de daha \u00f6nce yazd\u0131\u011f\u0131m\u0131z \u00f6rneklerde bir \u015fey dikkatinizi \u00e7ekmi\u015f olmal\u0131. \u015eimdiye kadar verdi\u011fimiz \u00f6rneklerde karakter dizilerini hep \u00e7ift t\u0131rnakla g\u00f6sterdik. Ama asl\u0131nda tek se\u00e7ene\u011fimiz \u00e7ift t\u0131rnak de\u011fildir. Python bize \u00fc\u00e7 farkl\u0131 t\u0131rnak se\u00e7ene\u011fi sunar:<\/p>\n<p>Tek t\u0131rnak (\u2018 \u2018)<\/p>\n<p>\u00c7ift t\u0131rnak (\u201d \u201c)<\/p>\n<p>\u00dc\u00e7 t\u0131rnak (\u201c\u201d\u201d \u201c\u201d\u201d)<\/p>\n<p><strong><span style=\"color: #008080;\">Dolay\u0131s\u0131yla yukar\u0131daki \u00f6rne\u011fi \u00fc\u00e7 farkl\u0131 \u015fekilde yazabiliriz:<\/span><\/strong><\/p>\n<p>&gt;&gt;&gt; print(&#8216;Python programlama dili&#8217;)<\/p>\n<p>Python programlama dili<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Python programlama dili&#8221;)<\/p>\n<p>Python programlama dili<\/p>\n<p>&gt;&gt;&gt; print(&#8220;&#8221;&#8221;Python programlama dili&#8221;&#8221;&#8221;)<\/p>\n<p>Python programlama dili<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi \u00e7\u0131kt\u0131lar aras\u0131nda hi\u00e7bir fark yok.<\/p>\n<p>Peki \u00e7\u0131kt\u0131larda hi\u00e7bir fark yoksa neden \u00fc\u00e7 farkl\u0131 t\u0131rnak \u00e7e\u015fidi var?<\/p>\n<p>\u0130sterseniz bu soruyu bir \u00f6rnek \u00fczerinden a\u00e7\u0131klamaya \u00e7al\u0131\u015fal\u0131m. Diyelim ki ekrana \u015f\u00f6yle bir \u00e7\u0131kt\u0131 vermek istiyoruz:<\/p>\n<p>Python programlama dilinin ad\u0131 &#8220;piton&#8221; y\u0131lan\u0131ndan gelmez<br \/>\nE\u011fer bu c\u00fcmleyi \u00e7ift t\u0131rnaklar i\u00e7inde g\u00f6sterirsek program\u0131m\u0131z hata verecektir:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Python programlama dilinin ad\u0131 &#8220;piton&#8221; y\u0131lan\u0131ndan gelmez&#8221;)<\/p>\n<p>File &#8220;&lt;stdin&gt;&#8221;, line 1<br \/>\nprint(&#8220;Python programlama dilinin ad\u0131 &#8220;piton&#8221; y\u0131lan\u0131ndan gelmez&#8221;)<br \/>\n^<br \/>\nSyntaxError: invalid syntax<br \/>\nBunun sebebi, c\u00fcmle i\u00e7inde ge\u00e7en \u2018piton\u2019 kelimesinin de \u00e7ift t\u0131rnaklar i\u00e7inde g\u00f6sterilmi\u015f olmas\u0131d\u0131r. C\u00fcmlenin, yani karakter dizisinin kendisi de \u00e7ift t\u0131rnak i\u00e7inde g\u00f6sterildi\u011fi i\u00e7in Python, karakter dizisini ba\u015flatan ve bitiren t\u0131rnaklar\u0131n hangisi oldu\u011funu ay\u0131rt edemiyor. Yukar\u0131daki c\u00fcmleyi en kolay \u015fu \u015fekilde ekrana yazd\u0131rabiliriz:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;Python programlama dilinin ad\u0131 &#8220;piton&#8221; y\u0131lan\u0131ndan gelmez&#8217;)<\/p>\n<p>Python programlama dilinin ad\u0131 &#8220;piton&#8221; y\u0131lan\u0131ndan gelmez<br \/>\nBurada karakter dizisini tek t\u0131rnak i\u00e7ine ald\u0131k. Karakter dizisi i\u00e7inde ge\u00e7en \u2018piton\u2019 kelimesi \u00e7ift t\u0131rnak i\u00e7inde oldu\u011fu i\u00e7in, karakter dizisini ba\u015flat\u0131p bitiren t\u0131rnaklarla \u2018piton\u2019 kelimesindeki t\u0131rnaklar\u0131n birbirine kar\u0131\u015fmas\u0131 gibi bir durum s\u00f6z konusu de\u011fildir.<\/p>\n<p>Bir de \u015f\u00f6yle bir \u00f6rnek verelim: Diyelim ki a\u015fa\u011f\u0131daki gibi bir \u00e7\u0131kt\u0131 elde etmek istiyoruz:<\/p>\n<p>\u0130stanbul&#8217;un 5 g\u00fcnl\u00fck hava durumu tahmini<br \/>\nE\u011fer bu karakter dizisini tek t\u0131rnak i\u015faretleri i\u00e7inde belirtirseniz Python size bir hata mesaj\u0131 g\u00f6sterecektir:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;\u0130stanbul&#8217;un 5 g\u00fcnl\u00fck hava durumu tahmini&#8217;)<\/p>\n<p>File &#8220;&lt;stdin&gt;&#8221;, line 1<br \/>\nprint(&#8216;\u0130stanbul&#8217;un 5 g\u00fcnl\u00fck hava durumu tahmini&#8217;)<br \/>\n^<br \/>\nSyntaxError: invalid syntax<br \/>\nBu hatan\u0131n sebebi \u2018\u0130stanbul\u2019un\u2019 kelimesi i\u00e7inde ge\u00e7en kesme i\u015faretidir. T\u0131pk\u0131 bir \u00f6nceki \u00f6rnekte oldu\u011fu gibi, Python karakter dizisini ba\u015flatan ve bitiren t\u0131rnaklar\u0131n hangisi oldu\u011funu kestiremiyor. Python, karakter dizisinin en ba\u015f\u0131ndaki tek t\u0131rnak i\u015faretinin ard\u0131ndan \u2018\u0130stanbul\u2019un\u2019 kelimesi i\u00e7indeki kesme i\u015faretini g\u00f6r\u00fcnce karakter dizisinin burada sona erdi\u011fini zannediyor. Ancak karakter dizisini soldan sa\u011fa do\u011fru okumaya devam edince bir yerlerde bir terslik oldu\u011funu d\u00fc\u015f\u00fcn\u00fcyor ve bize bir hata mesaj\u0131 g\u00f6stermekten ba\u015fka \u00e7aresi kalm\u0131yor. Yukar\u0131daki karakter dizisini en kolay \u015f\u00f6yle tan\u0131mlayabiliriz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;\u0130stanbul&#8217;un 5 g\u00fcnl\u00fck hava durumu tahmini&#8221;)<\/p>\n<p>\u0130stanbul&#8217;un 5 g\u00fcnl\u00fck hava durumu tahmini<br \/>\nBurada da, karakter dizisi i\u00e7inde ge\u00e7en kesme i\u015faretine tak\u0131lmamak i\u00e7in karakter dizimizi \u00e7ift t\u0131rnak i\u015faretleri i\u00e7ine al\u0131yoruz.<\/p>\n<p>Yukar\u0131daki karakter dizilerini d\u00fczg\u00fcn bir \u015fekilde \u00e7\u0131kt\u0131 verebilmek i\u00e7in \u00fc\u00e7 t\u0131rnak i\u015faretlerinden de yararlanabiliriz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;&#8221;&#8221;Python programlama dilinin ad\u0131 &#8220;piton&#8221; y\u0131lan\u0131ndan gelmez&#8221;&#8221;&#8221;)<\/p>\n<p>Python programlama dilinin ad\u0131 &#8220;piton&#8221; y\u0131lan\u0131ndan gelmez<\/p>\n<p>&gt;&gt;&gt; print(&#8220;&#8221;&#8221;\u0130stanbul&#8217;un 5 g\u00fcnl\u00fck hava durumu tahmini&#8221;&#8221;&#8221;)<\/p>\n<p>\u0130stanbul&#8217;un 5 g\u00fcnl\u00fck hava durumu tahmini<br \/>\nB\u00fct\u00fcn bu \u00f6rneklerden sonra kafan\u0131zda \u015f\u00f6yle bir d\u00fc\u015f\u00fcnce uyanm\u0131\u015f olabilir:<\/p>\n<p>G\u00f6r\u00fcn\u00fc\u015fe g\u00f6re \u00fc\u00e7 t\u0131rnak i\u015faretiyle her t\u00fcrl\u00fc karakter dizisini hatas\u0131z bir \u015fekilde ekrana \u00e7\u0131kt\u0131 olarak verebiliyoruz. O zaman ben en iyisi b\u00fct\u00fcn karakter dizileri i\u00e7in \u00fc\u00e7 t\u0131rnak i\u015faretini kullanay\u0131m!<\/p>\n<p>Elbette, e\u011fer isterseniz pek \u00e7ok karakter dizisi i\u00e7in \u00fc\u00e7 t\u0131rnak i\u015faretini kullanabilirsiniz. Ancak Python\u2019da karakter dizileri tan\u0131mlan\u0131rken genellikle tek t\u0131rnak veya \u00e7ift t\u0131rnak i\u015faretleri kullan\u0131l\u0131r. \u00dc\u00e7 t\u0131rnak i\u015faretlerinin as\u0131l kullan\u0131m yeri ise farkl\u0131d\u0131r. Peki nedir bu \u00fc\u00e7 t\u0131rnak i\u015faretlerinin as\u0131l kullan\u0131m yeri?<\/p>\n<p>\u00dc\u00e7 t\u0131rnak i\u015faretlerini her t\u00fcrl\u00fc karakter dizisiyle birlikte kullanabiliyor olsak da, bu t\u0131rnak tipi \u00e7o\u011funlukla sadece birden fazla sat\u0131ra yay\u0131lm\u0131\u015f karakter dizilerini tan\u0131mlamada kullan\u0131l\u0131r. \u00d6rne\u011fin \u015f\u00f6yle bir ekran \u00e7\u0131kt\u0131s\u0131 vermek istedi\u011finizi d\u00fc\u015f\u00fcn\u00fcn:<\/p>\n<p>[H]=========HARMAN========[-][o][x]<br \/>\n| |<br \/>\n| Programa Ho\u015fgeldiniz! |<br \/>\n| S\u00fcr\u00fcm 0.8 |<br \/>\n| Devam etmek i\u00e7in herhangi |<br \/>\n| bir d\u00fc\u011fmeye bas\u0131n. |<br \/>\n| |<br \/>\n|=================================|<br \/>\nB\u00f6yle bir \u00e7\u0131kt\u0131 verebilmek i\u00e7in e\u011fer tek veya \u00e7ift t\u0131rnak kullanmaya kalk\u0131\u015f\u0131rsan\u0131z epey eziyet \u00e7ekersiniz. Bu t\u00fcr bir \u00e7\u0131kt\u0131 vermenin en kolay yolu \u00fc\u00e7 t\u0131rnaklar\u0131 kullanmakt\u0131r:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;&#8221;&#8221;<br \/>\n&#8230; [H]=========HARMAN========[-][o][x]<br \/>\n&#8230; | |<br \/>\n&#8230; | Programa Ho\u015fgeldiniz! |<br \/>\n&#8230; | S\u00fcr\u00fcm 0.8 |<br \/>\n&#8230; | Devam etmek i\u00e7in herhangi |<br \/>\n&#8230; | bir d\u00fc\u011fmeye bas\u0131n. |<br \/>\n&#8230; | |<br \/>\n&#8230; |=================================|<br \/>\n&#8230; &#8220;&#8221;&#8221;)<br \/>\nBurada baz\u0131 \u015feyler dikkatinizi \u00e7ekmi\u015f olmal\u0131. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, \u00fc\u00e7 t\u0131rnakl\u0131 yap\u0131 \u00f6teki t\u0131rnak tiplerine g\u00f6re biraz farkl\u0131 davran\u0131yor. \u015eimdi \u015fu \u00f6rne\u011fe bak\u0131n:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;&#8221;&#8221;Game Over!<br \/>\n&#8230;<br \/>\nBuraya \u00e7ok dikkatli bak\u0131n. Karakter dizisine \u00fc\u00e7 t\u0131rnakla ba\u015flad\u0131ktan sonra, kapan\u0131\u015f t\u0131rna\u011f\u0131n\u0131 koymadan Enter tu\u015funa bast\u0131\u011f\u0131m\u0131zda &gt;&gt;&gt; i\u015fareti \u2026 i\u015faretine d\u00f6n\u00fc\u015ft\u00fc. Python bu \u015fekilde bize, \u2018yazmaya devam et!\u2019 demi\u015f oluyor. Biz de buna uyarak yazmaya devam edelim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;&#8221;&#8221;Game Over!<br \/>\n&#8230; Insert Coin!&#8221;&#8221;&#8221;)<\/p>\n<p>Game Over!<br \/>\nInsert Coin!<br \/>\nKapan\u0131\u015f t\u0131rna\u011f\u0131 koyulmadan Enter tu\u015funa bas\u0131ld\u0131\u011f\u0131nda &gt;&gt;&gt; i\u015faretinin \u2026 i\u015faretine d\u00f6n\u00fc\u015fmesi \u00fc\u00e7 t\u0131rna\u011fa \u00f6zg\u00fc bir durumdur. E\u011fer ayn\u0131 \u015feyi tek veya \u00e7ift t\u0131rnaklarla yapmaya \u00e7al\u0131\u015f\u0131rsan\u0131z program\u0131n\u0131z hata verir:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Game Over!<\/p>\n<p>File &#8220;&lt;stdin&gt;&#8221;, line 1<br \/>\nprint(&#8220;Game Over!<br \/>\n^<br \/>\nSyntaxError: EOL while scanning string literal<br \/>\n\u2026veya:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;Game Over!<\/p>\n<p>File &#8220;&lt;stdin&gt;&#8221;, line 1<br \/>\nprint(&#8220;Game Over!<br \/>\n^<br \/>\nSyntaxError: EOL while scanning string literal<br \/>\n\u00dc\u00e7 t\u0131rnak i\u015faretlerinin t\u0131rnak kapanmadan Enter tu\u015funa bas\u0131ld\u0131\u011f\u0131nda hata vermeme \u00f6zelli\u011fi sayesinde, bu t\u0131rnak tipi \u00f6zellikle birden fazla sat\u0131ra yay\u0131lm\u0131\u015f karakter dizilerinin g\u00f6sterilmesi i\u00e7in birebirdir.<\/p>\n<p>Gelin isterseniz \u00fc\u00e7 t\u0131rnak kullan\u0131m\u0131na ili\u015fkin bir \u00f6rnek daha verelim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;&#8221;&#8221;Python programlama dili Guido Van Rossum<br \/>\n&#8230; adl\u0131 Hollandal\u0131 bir programc\u0131 taraf\u0131ndan 90\u2019l\u0131<br \/>\n&#8230; y\u0131llar\u0131n ba\u015f\u0131nda geli\u015ftirilmeye ba\u015flanm\u0131\u015ft\u0131r. \u00c7o\u011fu<br \/>\n&#8230; insan, isminin &#8220;Python&#8221; olmas\u0131na bakarak, bu programlama<br \/>\n&#8230; dilinin, ad\u0131n\u0131 piton y\u0131lan\u0131ndan ald\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcr.<br \/>\n&#8230; Ancak zannedildi\u011finin aksine bu programlama dilinin<br \/>\n&#8230; ad\u0131 piton y\u0131lan\u0131ndan gelmez.&#8221;&#8221;&#8221;)<\/p>\n<p>Python programlama dili Guido Van Rossum<br \/>\nadl\u0131 Hollandal\u0131 bir programc\u0131 taraf\u0131ndan 90&#8217;l\u0131<br \/>\ny\u0131llar\u0131n ba\u015f\u0131nda geli\u015ftirilmeye ba\u015flanm\u0131\u015ft\u0131r. \u00c7o\u011fu<br \/>\ninsan, isminin &#8220;Python&#8221; olmas\u0131na bakarak, bu programlama<br \/>\ndilinin, ad\u0131n\u0131 piton y\u0131lan\u0131ndan ald\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcr.<br \/>\nAncak zannedildi\u011finin aksine bu programlama dilinin<br \/>\nd\u0131 piton y\u0131lan\u0131ndan gelmez.<br \/>\nElbette e\u011fer istersek bu metni \u00f6nce bir de\u011fi\u015fkene atamay\u0131 da tercih edebiliriz:<\/p>\n<p>&gt;&gt;&gt; python_hakkinda = &#8220;&#8221;&#8221;Python programlama dili Guido Van Rossum<br \/>\n&#8230; adl\u0131 Hollandal\u0131 bir programc\u0131 taraf\u0131ndan 90\u2019l\u0131<br \/>\n&#8230; y\u0131llar\u0131n ba\u015f\u0131nda geli\u015ftirilmeye ba\u015flanm\u0131\u015ft\u0131r. \u00c7o\u011fu<br \/>\n&#8230; insan, isminin &#8220;Python&#8221; olmas\u0131na bakarak, bu programlama<br \/>\n&#8230; dilinin, ad\u0131n\u0131 piton y\u0131lan\u0131ndan ald\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcr.<br \/>\n&#8230; Ancak zannedildi\u011finin aksine bu programlama dilinin<br \/>\n&#8230; ad\u0131 piton y\u0131lan\u0131ndan gelmez.&#8221;&#8221;&#8221;<br \/>\n&gt;&gt;&gt; print(python_hakkinda)<\/p>\n<p>Python programlama dili Guido Van Rossum<br \/>\nadl\u0131 Hollandal\u0131 bir programc\u0131 taraf\u0131ndan 90&#8217;l\u0131<br \/>\ny\u0131llar\u0131n ba\u015f\u0131nda geli\u015ftirilmeye ba\u015flanm\u0131\u015ft\u0131r. \u00c7o\u011fu<br \/>\ninsan, isminin &#8220;Python&#8221; olmas\u0131na bakarak, bu programlama<br \/>\ndilinin, ad\u0131n\u0131 piton y\u0131lan\u0131ndan ald\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcr.<br \/>\nAncak zannedildi\u011finin aksine bu programlama dilinin<br \/>\nad\u0131 piton y\u0131lan\u0131ndan gelmez.<br \/>\nSiz yukar\u0131daki \u00e7\u0131kt\u0131y\u0131 tek veya \u00e7ift t\u0131rnak kullanarak nas\u0131l ekrana yazd\u0131rabilece\u011finizi d\u00fc\u015f\u00fcnedurun, biz \u00f6nemli bir konuya ge\u00e7i\u015f yapal\u0131m!<\/p>\n<p>Bir Fonksiyon Olarak print()<br \/>\nprint() ifadesinin bir fonksiyon oldu\u011funu s\u00f6ylemi\u015ftik hat\u0131rlarsan\u0131z. Dedi\u011fimiz gibi, fonksiyonlarla ilgili ayr\u0131nt\u0131l\u0131 a\u00e7\u0131klamalar\u0131 ilerleyen derslerde verece\u011fiz. Ancak \u015fimdi dilerseniz bundan sonra anlatacaklar\u0131m\u0131z\u0131 daha iyi kavrayabilmemiz i\u00e7in, fonksiyonlar hakk\u0131nda bilmemiz gereken baz\u0131 temel \u015feyleri \u00f6\u011frenmeye \u00e7al\u0131\u015fal\u0131m.<\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, print() fonksiyonunu \u015f\u00f6yle kullan\u0131yoruz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Aramak istedi\u011finiz kelimeyi yaz\u0131n: &#8220;)<br \/>\nBurada print() bir fonksiyon, \u201cAramak istedi\u011finiz kelimeyi yaz\u0131n:\u201d adl\u0131 karakter dizisi ise bu fonksiyonun parametresidir. Daha \u00f6nce len() adl\u0131 ba\u015fka bir fonksiyon daha \u00f6\u011frenmi\u015ftik hat\u0131rlarsan\u0131z. Onu da \u015f\u00f6yle kullan\u0131yorduk:<\/p>\n<p>&gt;&gt;&gt; len(&#8220;elma&#8221;)<br \/>\nBurada da len() bir fonksiyon, \u201celma\u201d adl\u0131 karakter dizisi ise bu fonksiyonun parametresidir. Asl\u0131nda bi\u00e7im olarak print() ve len() fonksiyonlar\u0131n\u0131n birbirinden hi\u00e7bir fark\u0131 olmad\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcyorsunuz.<\/p>\n<p>Daha \u00f6nce s\u00f6yledi\u011fimiz ve bu \u00f6rneklerden de anlad\u0131\u011f\u0131m\u0131z gibi, bir fonksiyonun parantezleri i\u00e7inde belirtilen \u00f6\u011felere parametre ad\u0131 veriliyor. Mesela a\u015fa\u011f\u0131daki \u00f6rnekte print() fonksiyonunu tek bir parametre ile kullan\u0131yoruz:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;En az 8 haneli bir parola belirleyin.&#8217;)<br \/>\nprint() fonksiyonu, t\u0131pk\u0131 pow() fonksiyonu gibi, birden fazla parametre alabilir:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;F\u0131rat&#8217;, &#8216;\u00d6zg\u00fcl&#8217;)<\/p>\n<p>F\u0131rat \u00d6zg\u00fcl<br \/>\nBu \u00f6rnekte bizim i\u00e7in \u00e7\u0131kar\u0131lacak \u00e7ok dersler var. Bir defa burada print() fonksiyonunu iki farkl\u0131 parametre ile birlikte kulland\u0131k. Bunlardan ilki F\u0131rat adl\u0131 bir karakter dizisi, ikincisi ise \u00d6zg\u00fcl adl\u0131 ba\u015fka bir karakter dizisi. Python\u2019\u0131n bu iki karakter dizisini nas\u0131l birle\u015ftirdi\u011fine dikkat edin. print() fonksiyonu bu iki karakter dizisini \u00e7\u0131kt\u0131 olarak verirken aralar\u0131na da birer bo\u015fluk yerle\u015ftirdi. Ayr\u0131ca, ge\u00e7en derste de vurgulad\u0131\u011f\u0131m\u0131z gibi, parametrelerin birbirinden virg\u00fcl ile ayr\u0131ld\u0131\u011f\u0131n\u0131 da g\u00f6zden ka\u00e7\u0131rm\u0131yoruz.<\/p>\n<p>Gelin bununla ilgili bir iki \u00f6rnek daha verelim elimizin al\u0131\u015fmas\u0131 i\u00e7in:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Python&#8221;, &#8220;Programlama&#8221;, &#8220;Dili&#8221;)<\/p>\n<p>Python Programlama Dili<\/p>\n<p>&gt;&gt;&gt; print(&#8216;F\u0131rat&#8217;, &#8216;\u00d6zg\u00fcl&#8217;, &#8216;Adana&#8217;, 1980)<\/p>\n<p>F\u0131rat \u00d6zg\u00fcl Adana 1980<br \/>\nBu arada dikkatinizi \u00f6nemli bir noktaya \u00e7ekmek istiyorum. Yukar\u0131daki \u00f6rneklerde bazen tek t\u0131rnak, bazen de \u00e7ift t\u0131rnak kulland\u0131k. Daha \u00f6nce de s\u00f6yledi\u011fimiz gibi, hangi t\u0131rnak tipini kulland\u0131\u011f\u0131m\u0131z \u00f6nemli de\u011fildir. Python hangi t\u0131rnak tipini kulland\u0131\u011f\u0131m\u0131zdan ziyade, t\u0131rnak kullan\u0131m\u0131nda tutarl\u0131 olup olmad\u0131\u011f\u0131m\u0131zla ilgilenir. Yani Python i\u00e7in \u00f6nemli olan, karakter dizisini hangi t\u0131rnakla ba\u015flatm\u0131\u015fsak, o t\u0131rnakla bitirmemizdir. Yani \u015fu tip kullan\u0131mlar ge\u00e7erli de\u011fildir:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;karakter dizisi&#8217;)<\/p>\n<p>&gt;&gt;&gt; print(&#8216;karakter dizisi&#8221;)<br \/>\nKarakter dizisini tan\u0131mlamaya ba\u015flarken kulland\u0131\u011f\u0131m\u0131z t\u0131rnak tipi ile karakter dizisini tan\u0131mlamay\u0131 bitirirken kulland\u0131\u011f\u0131m\u0131z t\u0131rnak tipi birbirinden farkl\u0131 oldu\u011fu i\u00e7in bu iki kullan\u0131m da hata verecektir.<\/p>\n<p>print() Fonksiyonunun Parametreleri<br \/>\n\u015eimdiye kadar verdi\u011fimiz \u00f6rneklerde belki \u00e7ok da belli olmuyordur, ama asl\u0131nda print() fonksiyonu son derece g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. \u0130\u015fte \u015fimdi biz bu fonksiyonun g\u00fcc\u00fcn\u00fc g\u00f6zler \u00f6n\u00fcne seren \u00f6zelliklerini incelemeye ba\u015flayaca\u011f\u0131z. Bu b\u00f6l\u00fcm\u00fc dikkatle takip etmeniz, ilerde yapaca\u011f\u0131m\u0131z \u00e7al\u0131\u015fmalar\u0131 daha rahat anlayabilmeniz a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r.<\/p>\n<p>sep<br \/>\nprint() fonksiyonu ile ilgili olarak yukar\u0131da verdi\u011fimiz \u00f6rnekleri inceledi\u011fimizde, bu fonksiyonun kendine \u00f6zg\u00fc bir davran\u0131\u015f \u015fekli oldu\u011funu g\u00f6r\u00fcyoruz. Mesela bir \u00f6nceki b\u00f6l\u00fcmde verdi\u011fimiz \u015fu \u00f6rne\u011fe bakal\u0131m:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;F\u0131rat&#8217;, &#8216;\u00d6zg\u00fcl&#8217;)<\/p>\n<p>F\u0131rat \u00d6zg\u00fcl<br \/>\nBurada print() fonksiyonunu iki farkl\u0131 parametre ile birlikte kulland\u0131k. Bu fonksiyon, kendisine verdi\u011fimiz bu parametreleri belli bir d\u00fczene g\u00f6re birbiriyle birle\u015ftirdi. Bu d\u00fczen gere\u011fince print(), kendisine verilen parametreleri birle\u015ftirirken, parametreler aras\u0131na bir bo\u015fluk yerle\u015ftiriyor. Bunu daha net g\u00f6rmek i\u00e7in \u015f\u00f6yle bir \u00f6rnek daha verelim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Python&#8221;, &#8220;PHP&#8221;, &#8220;C++&#8221;, &#8220;C&#8221;, &#8220;Erlang&#8221;)<\/p>\n<p>Python PHP C++ C Erlang<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, print() fonksiyonu ger\u00e7ekten de, kendisine verilen parametreleri birle\u015ftirirken, parametrelerin her biri aras\u0131na bir bo\u015fluk yerle\u015ftiriyor. Halbuki bu bo\u015flu\u011fu biz talep etmedik! Python bize bu bo\u015flu\u011fu e\u015fantiyon olarak verdi. \u00c7o\u011fu durumda istedi\u011fimiz \u015fey bu olacakt\u0131r, ama baz\u0131 durumlarda bu bo\u015flu\u011fu istemeyebiliriz. \u00d6rne\u011fin:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;http:\/\/&#8221;, &#8220;www.&#8221;, &#8220;istihza.&#8221;, &#8220;com&#8221;)<\/p>\n<p>http:\/\/ www. istihza. com<br \/>\nYa da bo\u015fluk karakteri yerine daha farkl\u0131 bir karakter kullanmak istiyor da olabiliriz. Peki b\u00f6yle bir durumda ne yapmam\u0131z gerekir?<\/p>\n<p>\u0130\u015fte bu noktada baz\u0131 \u00f6zel ara\u00e7lardan yararlanarak print() fonksiyonunun \u00f6ntan\u0131ml\u0131 davran\u0131\u015f kal\u0131plar\u0131 \u00fczerinde de\u011fi\u015fiklikler yapabiliriz.<\/p>\n<p>Peki nedir print() fonksiyonunu \u00f6zelle\u015ftirmemizi sa\u011flayacak bu ara\u00e7lar?<\/p>\n<p>Hat\u0131rlarsan\u0131z, Python\u2019da fonksiyonlar\u0131n parantezleri i\u00e7indeki de\u011ferlere parametre ad\u0131 verildi\u011fini s\u00f6ylemi\u015ftik. Mesela print() fonksiyonunu bir ya da daha fazla parametre ile birlikte kullanabilece\u011fimizi biliyoruz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Mehmet&#8221;, &#8220;\u00d6z&#8221;, &#8220;\u0130stanbul&#8221;, &#8220;\u00c7aml\u0131ca&#8221;, 156, &#8220;\/&#8221;, 45)<\/p>\n<p>Mehmet \u00d6z \u0130stanbul \u00c7aml\u0131ca 156 \/ 45<br \/>\nprint() fonksiyonu i\u00e7inde istedi\u011fimiz say\u0131da karakter dizisi ve\/veya say\u0131 de\u011ferli parametre kullanabiliriz.<\/p>\n<p>Fonksiyonlar\u0131n bir de daha \u00f6zel g\u00f6r\u00fcn\u00fcml\u00fc parametreleri vard\u0131r. Mesela print() fonksiyonunun sep adl\u0131 \u00f6zel bir parametresi bulunur. Bu parametre print() fonksiyonunda g\u00f6r\u00fcnmese bile her zaman oradad\u0131r. Yani diyelim ki \u015f\u00f6yle bir kod yazd\u0131k:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;http:\/\/&#8221;, &#8220;www.&#8221;, &#8220;google.&#8221;, &#8220;com&#8221;)<br \/>\nBurada herhangi bir sep parametresi g\u00f6rm\u00fcyoruz. Ancak Python yukar\u0131daki kodu asl\u0131nda \u015f\u00f6yle alg\u0131lar:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;http:\/\/&#8221;, &#8220;www.&#8221;, &#8220;google.&#8221;, &#8220;com&#8221;, sep=&#8221; &#8220;)<br \/>\nsep ifadesi, \u0130ngilizcede separator (ay\u0131r\u0131c\u0131, ayra\u00e7) kelimesinin k\u0131saltmas\u0131d\u0131r. Dolay\u0131s\u0131yla print() fonksiyonundaki bu sep parametresi, ekrana bas\u0131lacak \u00f6\u011feler aras\u0131na hangi karakterin yerle\u015ftirilece\u011fini g\u00f6sterir. Bu parametrenin \u00f6ntan\u0131ml\u0131 de\u011feri bir adet bo\u015fluk karakteridir (\u201d \u201c). Yani siz bu \u00f6zel parametrenin de\u011ferini ba\u015fka bir \u015feyle de\u011fi\u015ftirmezseniz, Python bu parametrenin de\u011ferini bir adet bo\u015fluk karakteri olarak alacak ve ekrana bas\u0131lacak \u00f6\u011feleri birbirinden birer bo\u015flukla ay\u0131racakt\u0131r. Ancak e\u011fer biz istersek bu sep parametresinin de\u011ferini de\u011fi\u015ftirebiliriz. B\u00f6ylece Python, karakter dizilerini birle\u015ftirirken araya bo\u015fluk de\u011fil, bizim istedi\u011fimiz ba\u015fka bir karakteri yerle\u015ftirebilir. Gelin \u015fimdi bu parametrenin de\u011ferini nas\u0131l de\u011fi\u015ftirece\u011fimizi g\u00f6relim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;http:\/\/&#8221;, &#8220;www.&#8221;, &#8220;istihza.&#8221;, &#8220;com&#8221;, sep=&#8221;&#8221;)<\/p>\n<p>http:\/\/www.istihza.com<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, karakter dizilerini ba\u015far\u0131yla birle\u015ftirip, ge\u00e7erli bir internet adresi elde ettik.<\/p>\n<p>Burada yapt\u0131\u011f\u0131m\u0131z \u015fey asl\u0131nda \u00e7ok basit. Sadece sep parametresinin \u2018bir adet bo\u015fluk karakteri\u2019 olan \u00f6ntan\u0131ml\u0131 de\u011ferini silip, yerine \u2018bo\u015f bir karakter dizisi\u2019 de\u011ferini yazd\u0131k. Bu iki kavram\u0131n birbirinden farkl\u0131 oldu\u011funu s\u00f6yledi\u011fimizi hat\u0131rl\u0131yorsunuz, de\u011fil mi?<\/p>\n<p>Gelin bir \u00f6rnek daha yapal\u0131m:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;T&#8221;, &#8220;C&#8221;, sep=&#8221;.&#8221;)<\/p>\n<p>T.C<br \/>\nBurada Python\u2019a \u015f\u00f6yle bir emir vermi\u015f olduk:<\/p>\n<p>\u201cT\u201d ve \u201cC\u201d karakter dizilerini birbiriyle birle\u015ftir! Bunu yaparken de bu karakter dizilerinin aras\u0131na nokta i\u015fareti yerle\u015ftir!<\/p>\n<p>sep parametresinin \u00f6teki parametrelerden fark\u0131 her zaman ismiyle birlikte kullan\u0131lmas\u0131d\u0131r. Zaten teknik olarak da bu t\u00fcr parametrelere \u2018isimli parametreler\u2019 ad\u0131 verilir. \u00d6rne\u011fin:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Adana&#8221;, &#8220;Mersin&#8221;, sep=&#8221;-&#8220;)<\/p>\n<p>Adana-Mersin<br \/>\nE\u011fer burada sep parametresinin ismini belirtmeden, do\u011frudan parametrenin de\u011ferini yazarsak, bu de\u011ferin \u00f6teki parametrelerden hi\u00e7bir fark\u0131 kalmayacakt\u0131r:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Adana&#8221;, &#8220;Mersin&#8221;, &#8220;-&#8220;)<\/p>\n<p>Adana Mersin &#8211;<br \/>\nGelin isterseniz bu parametreyle ilgili bir \u00f6rnek daha yapal\u0131m:<\/p>\n<p>\u2018Bir mumdur iki mumdur\u2026\u2019 diye ba\u015flayan t\u00fcrk\u00fcy\u00fc biliyorsunuzdur. \u015eimdi bu t\u00fcrk\u00fcy\u00fc Python\u2019la nas\u0131l yazabilece\u011fimizi g\u00f6relim!<\/p>\n<p>&gt;&gt;&gt; print(&#8220;bir&#8221;, &#8220;iki&#8221;, &#8220;\u00fc\u00e7&#8221;, &#8220;d\u00f6rt&#8221;, &#8220;on d\u00f6rt&#8221;, sep=&#8221;mumdur&#8221;)<\/p>\n<p>birmumdurikimumdur\u00fc\u00e7mumdurd\u00f6rtmumduron d\u00f6rt<br \/>\nBurada bir terslik oldu\u011fu a\u00e7\u0131k! Karakter dizileri birbirlerine s\u0131k\u0131\u015f\u0131k d\u00fczende birle\u015ftirildi. Bunlar\u0131n aras\u0131nda birer bo\u015fluk olsa tabii daha iyi olurdu. Ancak biliyorsunuz sep parametresinin \u00f6ntan\u0131ml\u0131 de\u011ferini silip, yerine \u201cmumdur\u201d de\u011ferini yerle\u015ftirdi\u011fimiz i\u00e7in, Python\u2019\u0131n otomatik olarak yerle\u015ftirdi\u011fi bo\u015fluk karakteri kayboldu. Ama e\u011fer istersek o bo\u015fluk karakterlerini kendimiz de ayarlayabiliriz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;bir&#8221;, &#8220;iki&#8221;, &#8220;\u00fc\u00e7&#8221;, &#8220;d\u00f6rt&#8221;, &#8220;on d\u00f6rt&#8221;, sep=&#8221; mumdur &#8220;)<\/p>\n<p>bir mumdur iki mumdur \u00fc\u00e7 mumdur d\u00f6rt mumdur on d\u00f6rt<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, sep parametresine verdi\u011fimiz \u201cmumdur\u201d de\u011ferinin sa\u011f\u0131nda ve solunda birer bo\u015fluk b\u0131rakarak sorunumuzu \u00e7\u00f6zebildik. Bu sorunu \u00e7\u00f6zmenin ba\u015fka bir yolu daha var. Hat\u0131rlarsan\u0131z etkile\u015fimli kabukta ilk \u00f6rneklerimizi verirken karakter dizilerini birle\u015ftirmek i\u00e7in + i\u015faretinden de yararlanabilece\u011fimizi s\u00f6ylemi\u015ftik. Dolay\u0131s\u0131yla sep parametresini \u015f\u00f6yle de yazabiliriz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;bir&#8221;, &#8220;iki&#8221;, &#8220;\u00fc\u00e7&#8221;, &#8220;d\u00f6rt&#8221;, &#8220;on d\u00f6rt&#8221;, sep=&#8221; &#8221; + &#8220;mumdur&#8221; + &#8221; &#8220;)<br \/>\nBurada da, \u201cmumdur\u201d adl\u0131 karakter dizisinin ba\u015f\u0131nda ve sonunda birer bo\u015fluk b\u0131rakmak yerine, gerekli bo\u015fluklar\u0131 + i\u015fareti yard\u0131m\u0131yla bu karakter dizisine birle\u015ftirdik. Hatta istersek + i\u015flecini kullanmak zorunda olmad\u0131\u011f\u0131m\u0131z\u0131 dahi biliyorsunuz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;bir&#8221;, &#8220;iki&#8221;, &#8220;\u00fc\u00e7&#8221;, &#8220;d\u00f6rt&#8221;, &#8220;on d\u00f6rt&#8221;, sep=&#8221; &#8221; &#8220;mumdur&#8221; &#8221; &#8220;)<br \/>\nAma g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bir problemimiz daha var. T\u00fcrk\u00fcn\u00fcn s\u00f6zleri \u015fu \u015fekilde olmal\u0131yd\u0131:<\/p>\n<p>bir mumdur iki mumdur \u00fc\u00e7 mumdur d\u00f6rt mumdur on d\u00f6rt mumdur<\/p>\n<p>Ama sondaki \u2018mumdur\u2019 kelimesi yukar\u0131daki \u00e7\u0131kt\u0131da yok. Normal olan da bu asl\u0131nda. sep parametresi, karakter dizilerinin aras\u0131na bir de\u011fer yerle\u015ftirir. Karakter dizilerinin son taraf\u0131yla ilgilenmez. Bu i\u015f i\u00e7in print() fonksiyonu ba\u015fka bir parametreye sahiptir.<\/p>\n<p>Bu arada, yukar\u0131daki \u00f6rneklerde hep karakter dizilerini kullanm\u0131\u015f olmam\u0131z sizi yan\u0131ltmas\u0131n. sep parametresi yaln\u0131zca karakter dizilerinin de\u011fil say\u0131lar\u0131n aras\u0131na da istedi\u011finiz bir de\u011ferin yerle\u015ftirilmesini sa\u011flayabilir. Mesela:<\/p>\n<p>&gt;&gt;&gt; print(1, 2, 3, 4, 5, sep=&#8221;-&#8220;)<\/p>\n<p>1-2-3-4-5<br \/>\nAncak sep parametresine de\u011fer olarak yaln\u0131zca karakter dizilerini ve None adl\u0131 \u00f6zel bir s\u00f6zc\u00fc\u011f\u00fc verebiliriz. (None s\u00f6zc\u00fc\u011f\u00fcnden ileride s\u00f6z edece\u011fiz):<\/p>\n<p>&gt;&gt;&gt; print(1, 2, 3, 4, 5, sep=0)<\/p>\n<p>Traceback (most recent call last):<br \/>\nFile &#8220;&lt;stdin&gt;&#8221;, line 1, in &lt;module&gt;<br \/>\nTypeError: sep must be None or a string, not int<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, sep parametresine bir say\u0131 olan 0 de\u011ferini veremiyoruz.<\/p>\n<p>Peki bu parametreye None de\u011feri verirsek ne olur? Bu parametreye None de\u011feri verildi\u011finde, print() fonksiyonu bu parametre i\u00e7in \u00f6ntan\u0131ml\u0131 de\u011feri (yani bir adet bo\u015fluk) kullan\u0131r:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;a&#8217;, &#8216;b&#8217;, sep=None)<\/p>\n<p>a b<br \/>\nE\u011fer amac\u0131n\u0131z parametreleri birbirine biti\u015ftirmekse, yani sep parametresinin \u00f6ntan\u0131ml\u0131 de\u011feri olan bo\u015fluk karakterini ortadan kald\u0131rmaksa, sep parametresine bo\u015f bir karakter dizisi vermeniz gerekti\u011fini biliyorsunuz:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;a&#8217;, &#8216;b&#8217;, sep=&#8221;)<\/p>\n<p>ab<br \/>\nprint() fonksiyonunun sep parametresini b\u00fct\u00fcn ayr\u0131nt\u0131lar\u0131yla inceledi\u011fimize g\u00f6re, bu fonksiyonun bir ba\u015fka \u00f6zel parametresinden s\u00f6z edebiliriz.<\/p>\n<p>end<br \/>\nBir \u00f6nceki b\u00f6l\u00fcmde \u015f\u00f6yle bir laf etmi\u015ftik:<\/p>\n<p>print() fonksiyonun sep adl\u0131 \u00f6zel bir parametresi bulunur. Bu parametre print() fonksiyonunda g\u00f6r\u00fcnmese bile her zaman oradad\u0131r.<\/p>\n<p>Ayn\u0131 bu \u015fekilde, print() fonksiyonunun end adl\u0131 \u00f6zel bir parametresi daha bulunur. T\u0131pk\u0131 sep parametresi gibi, end parametresi de print() fonksiyonunda g\u00f6r\u00fcnmese bile her zaman oradad\u0131r.<\/p>\n<p>Bildi\u011finiz gibi, sep parametresi print() fonksiyonuna verilen parametreler birle\u015ftirilirken araya hangi karakterin girece\u011fini belirliyordu. end parametresi ise bu parametrelerin sonuna neyin gelece\u011fini belirler.<\/p>\n<p>print() fonksiyonu \u00f6ntan\u0131ml\u0131 olarak, parametrelerin sonuna \u2018sat\u0131r ba\u015f\u0131 karakteri\u2019 ekler. Peki bu sat\u0131r ba\u015f\u0131 karakteri (veya \u2018yeni sat\u0131r karakteri\u2019) denen \u015fey de ne oluyor?<\/p>\n<p>Dilerseniz bunu bir \u00f6rnek \u00fczerinde g\u00f6relim.<\/p>\n<p>\u015e\u00f6yle bir kodumuz olsun:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Pardus ve Ubuntu birer GNU\/Linux da\u011f\u0131t\u0131m\u0131d\u0131r.&#8221;)<br \/>\nBu kodu yaz\u0131p Enter tu\u015funa bast\u0131\u011f\u0131m\u0131z anda print() fonksiyonu iki farkl\u0131 i\u015flem ger\u00e7ekle\u015ftirir:<\/p>\n<p>\u00d6ncelikle karakter dizisini ekrana yazd\u0131r\u0131r.<\/p>\n<p>Ard\u0131ndan bir alt sat\u0131ra ge\u00e7ip bize &gt;&gt;&gt; i\u015faretini g\u00f6sterir.<\/p>\n<p>\u0130\u015fte bu ikinci i\u015flem, karakter dizisinin sonunda bir adet sat\u0131r ba\u015f\u0131 karakteri olmas\u0131ndan, daha do\u011frusu print() fonksiyonunun, sat\u0131r ba\u015f\u0131 karakterini karakter dizisinin sonuna eklemesinden kaynaklan\u0131r. Bu a\u00e7\u0131klama biraz kafa kar\u0131\u015ft\u0131r\u0131c\u0131 gelmi\u015f olabilir. O halde biraz daha a\u00e7\u0131klayal\u0131m. \u015eu \u00f6rne\u011fe bak\u0131n:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Pardus\\nUbuntu&#8221;)<\/p>\n<p>Pardus<br \/>\nUbuntu<br \/>\nBurada \u201cPardus\u201d ve \u201cUbuntu\u201d karakter dizilerinin tam ortas\u0131nda \u00e7ok \u00f6zel bir karakter dizisi daha g\u00f6r\u00fcyorsunuz. Bu karakter dizisi \u015fudur: \\n. \u0130\u015fte bu \u00f6zel karakter dizisine sat\u0131r ba\u015f\u0131 karakteri (newline) ad\u0131 verilir. Bu karakterin g\u00f6revi, karakter dizisini, bulundu\u011fu noktadan b\u00f6l\u00fcp, karakter dizisinin geri kalan\u0131n\u0131 bir alt sat\u0131ra ge\u00e7irmektir. Zaten \u00e7\u0131kt\u0131da da bu i\u015flevi yerine getirdi\u011fini g\u00f6r\u00fcyorsunuz. Karakter dizisi \u201cPardus\u201d k\u0131sm\u0131ndan sonra ikiye b\u00f6l\u00fcn\u00fcyor ve bu karakter dizisinin geri kalan k\u0131sm\u0131 olan \u201cUbuntu\u201d karakter dizisi bir alt sat\u0131ra yazd\u0131r\u0131l\u0131yor. Bunu daha iyi anlamak i\u00e7in bir \u00f6rnek daha verelim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;birinci sat\u0131r\\nikinci sat\u0131r\\n\u00fc\u00e7\u00fcnc\u00fc sat\u0131r&#8221;)<\/p>\n<p>birinci sat\u0131r<br \/>\nikinci sat\u0131r<br \/>\n\u00fc\u00e7\u00fcnc\u00fc sat\u0131r<br \/>\nPeki size bir soru soray\u0131m: Acaba yukar\u0131daki kodlar\u0131 daha verimli bir \u015fekilde nas\u0131l yazabiliriz?<\/p>\n<p>Evet, do\u011fru tahmin ettiniz\u2026 Tabii ki sep parametresini kullanarak:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;birinci sat\u0131r&#8221;, &#8220;ikinci sat\u0131r&#8221;, &#8220;\u00fc\u00e7\u00fcnc\u00fc sat\u0131r&#8221;, sep=&#8221;\\n&#8221;)<\/p>\n<p>birinci sat\u0131r<br \/>\nikinci sat\u0131r<br \/>\n\u00fc\u00e7\u00fcnc\u00fc sat\u0131r<br \/>\nBurada yapt\u0131\u011f\u0131m\u0131z \u015fey \u00e7ok basit. sep parametresinin de\u011ferini \\n, yani yeni sat\u0131r karakteri (veya sat\u0131r ba\u015f\u0131 karakteri) olarak de\u011fi\u015ftirdik. B\u00f6ylece karakter dizileri aras\u0131na birer \\n karakteri yerle\u015ftirerek her bir karakter dizisinin farkl\u0131 sat\u0131ra yazd\u0131r\u0131lmas\u0131n\u0131 sa\u011flad\u0131k.<\/p>\n<p>\u0130\u015fte end parametresinin \u00f6ntan\u0131ml\u0131 de\u011feri de bu \\n karakteridir ve bu parametre print() fonksiyonunda g\u00f6r\u00fcnmese bile her zaman oradad\u0131r.<\/p>\n<p>Yani diyelim ki \u015f\u00f6yle bir kod yazd\u0131k:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Bug\u00fcn g\u00fcnlerden Sal\u0131&#8221;)<br \/>\nBurada herhangi bir end parametresi g\u00f6rm\u00fcyoruz. Ancak Python yukar\u0131daki kodu asl\u0131nda \u015f\u00f6yle alg\u0131lar:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Bug\u00fcn g\u00fcnlerden Sal\u0131&#8221;, end=&#8221;\\n&#8221;)<br \/>\nBiraz \u00f6nce de dedi\u011fimiz gibi, bu kodu yaz\u0131p Enter tu\u015funa bast\u0131\u011f\u0131m\u0131z anda print() fonksiyonu iki farkl\u0131 i\u015flem ger\u00e7ekle\u015ftirir:<\/p>\n<p>\u00d6ncelikle karakter dizisini ekrana yazd\u0131r\u0131r.<\/p>\n<p>Ard\u0131ndan bir alt sat\u0131ra ge\u00e7ip bize &gt;&gt;&gt; i\u015faretini g\u00f6sterir.<\/p>\n<p>Bunun ne demek oldu\u011funu anlamak i\u00e7in end parametresinin de\u011ferini de\u011fi\u015ftirmemiz yeterli olacakt\u0131r:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Bug\u00fcn g\u00fcnlerden Sal\u0131&#8221;, end=&#8221;.&#8221;)<\/p>\n<p>Bug\u00fcn g\u00fcnlerden Sal\u0131.&gt;&gt;&gt;<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, end parametresinin \u00f6ntan\u0131ml\u0131 de\u011feri olan \\n karakterini silip yerine . (nokta) i\u015fareti koydu\u011fumuz i\u00e7in, komutu yaz\u0131p Enter tu\u015funa bast\u0131\u011f\u0131m\u0131zda print() fonksiyonu sat\u0131r ba\u015f\u0131na ge\u00e7medi. Yeni sat\u0131ra ge\u00e7ebilmek i\u00e7in Enter tu\u015funa kendimiz basmal\u0131y\u0131z. Elbette, e\u011fer yukar\u0131daki kodlar\u0131 \u015f\u00f6yle yazarsan\u0131z, print() fonksiyonu hem karakter dizisinin sonuna nokta ekleyecek, hem de sat\u0131r ba\u015f\u0131na ge\u00e7ecektir:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Bug\u00fcn g\u00fcnlerden Sal\u0131&#8221;, end=&#8221;.\\n&#8221;)<\/p>\n<p>Bug\u00fcn g\u00fcnlerden Sal\u0131.<br \/>\n\u015eimdi bu \u00f6\u011frendiklerimizi t\u00fcrk\u00fcm\u00fcze uygulayal\u0131m:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;bir&#8221;, &#8220;iki&#8221;, &#8220;\u00fc\u00e7&#8221;, &#8220;d\u00f6rt&#8221;, &#8220;on d\u00f6rt&#8221;,<br \/>\n&#8230; sep=&#8221; mumdur &#8220;, end=&#8221; mumdur\\n&#8221;)<br \/>\nBurada kodlar\u0131m\u0131z\u0131n sa\u011fa do\u011fru \u00e7irkin bir \u015fekilde uzamas\u0131n\u0131 engellemek i\u00e7in \u201con d\u00f6rt\u201d karakter dizisini yaz\u0131p virg\u00fcl\u00fc koyduktan sonra Enter tu\u015funa basarak bir alt sat\u0131ra ge\u00e7tik. Bir alt sat\u0131ra ge\u00e7ti\u011fimizde &gt;&gt;&gt; i\u015faretinin \u2026 i\u015faretine d\u00f6n\u00fc\u015ft\u00fc\u011f\u00fcne dikkat edin. Python\u2019da do\u011fru kod yazmak kadar, yazd\u0131\u011f\u0131m\u0131z kodlar\u0131n d\u00fczg\u00fcn g\u00f6r\u00fcnmesi de \u00f6nemlidir. O y\u00fczden yazd\u0131\u011f\u0131m\u0131z her bir kod sat\u0131r\u0131n\u0131n m\u00fcmk\u00fcn oldu\u011funca 79 karakteri ge\u00e7memesini sa\u011flamal\u0131y\u0131z. E\u011fer yazd\u0131\u011f\u0131n\u0131z bir sat\u0131r 79 karakteri a\u015f\u0131yorsa, a\u015fan k\u0131sm\u0131 yukar\u0131da g\u00f6sterdi\u011fimiz \u015fekilde alt sat\u0131ra alabilirsiniz.<br \/>\nend parametresi de, t\u0131pk\u0131 sep parametresi gibi, her zaman ismiyle birlikte kullan\u0131lmas\u0131 gereken bir parametredir. Yani e\u011fer end parametresinin ismini belirtmeden sadece de\u011ferini kullanmaya \u00e7al\u0131\u015f\u0131rsak Python ne yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z\u0131 anlayamaz.<\/p>\n<p>Yine t\u0131pk\u0131 sep parametresi gibi, end parametresinin de\u011feri de sadece bir karakter dizisi veya None olabilir:<\/p>\n<p>&gt;&gt;&gt; print(1, 2, 3, 4, 5, end=0)<\/p>\n<p>Traceback (most recent call last):<br \/>\nFile &#8220;&lt;stdin&gt;&#8221;, line 1, in &lt;module&gt;<br \/>\nTypeError: end must be None or a string, not int<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, end parametresine bir say\u0131 olan 0 de\u011ferini veremiyoruz.<\/p>\n<p>E\u011fer bu parametreye None de\u011feri verirsek, t\u0131pk\u0131 sep parametresinde oldu\u011fu gibi, print() fonksiyonu bu parametre i\u00e7in \u00f6ntan\u0131ml\u0131 de\u011feri (yani sat\u0131r ba\u015f\u0131 karakteri) kullan\u0131r:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;a&#8217;, &#8216;b&#8217;, end=None)<\/p>\n<p>a b<br \/>\nE\u011fer amac\u0131n\u0131z yeni sat\u0131ra ge\u00e7ilmesini engellemekse, yani end parametresinin \u00f6ntan\u0131ml\u0131 de\u011feri olan \\n ka\u00e7\u0131\u015f dizisini ortadan kald\u0131rmaksa, end parametresine bo\u015f bir karakter dizisi vermelisiniz:<\/p>\n<p>&gt;&gt;&gt; print(&#8216;a&#8217;, &#8216;b&#8217;, end=&#8221;)<\/p>\n<p>a b&gt;&gt;&gt;<br \/>\nfile<br \/>\nBurada hen\u00fcz \u00f6\u011frenmedi\u011fimiz baz\u0131 \u015feyler g\u00f6receksiniz. Hi\u00e7 endi\u015fe etmeyin. Bunlar\u0131 ilerde b\u00fct\u00fcn ayr\u0131nt\u0131lar\u0131yla \u00f6\u011frenece\u011fiz. \u015eimdilik konu hakk\u0131nda biraz olsun fikir sahibi olman\u0131z\u0131 sa\u011flayabilirsek kendimizi ba\u015far\u0131l\u0131 sayaca\u011f\u0131z.<br \/>\nprint() fonksiyonunun sep ve end d\u0131\u015f\u0131nda \u00fc\u00e7\u00fcnc\u00fc bir \u00f6zel parametresi daha bulunur. Bu parametrenin ad\u0131 file\u2019d\u0131r. G\u00f6revi ise, print() fonksiyonuna verilen karakter dizisi ve\/veya say\u0131lar\u0131n, yani parametrelerin nereye yaz\u0131laca\u011f\u0131n\u0131 belirtmektir.<\/p>\n<p>Bu parametrenin \u00f6ntan\u0131ml\u0131 de\u011feri sys.stdout\u2019tur. Peki bu ne anlama geliyor? sys.stdout, \u2018standart \u00e7\u0131kt\u0131 konumu\u2019 anlam\u0131na gelir. Peki \u2018standart \u00e7\u0131kt\u0131 konumu\u2019 ne demek?<\/p>\n<p>Standart \u00e7\u0131kt\u0131 konumu; bir program\u0131n, \u00fcretti\u011fi \u00e7\u0131kt\u0131lar\u0131 verdi\u011fi yerdir. Asl\u0131nda bu kavram\u0131n ne demek oldu\u011fu ad\u0131ndan da anla\u015f\u0131l\u0131yor:<\/p>\n<p>standart \u00e7\u0131kt\u0131 konumu = \u00e7\u0131kt\u0131lar\u0131n standart olarak verildi\u011fi konum.<\/p>\n<p>Mesela Python \u00f6ntan\u0131ml\u0131 olarak, \u00fcretti\u011fi \u00e7\u0131kt\u0131lar\u0131 ekrana verir. E\u011fer o anda etkile\u015fimli kabukta \u00e7al\u0131\u015f\u0131yorsan\u0131z, Python \u00fcretti\u011fi \u00e7\u0131kt\u0131lar\u0131 etkile\u015fimli kabuk \u00fczerinde g\u00f6sterir. E\u011fer yazd\u0131\u011f\u0131n\u0131z bir program\u0131 komut sat\u0131r\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z, \u00fcretilen \u00e7\u0131kt\u0131lar komut sat\u0131r\u0131nda g\u00f6r\u00fcn\u00fcr. Dolay\u0131s\u0131yla Python\u2019\u0131n standart \u00e7\u0131kt\u0131 konumu etkile\u015fimli kabuk veya komut sat\u0131r\u0131d\u0131r. Yani print() fonksiyonu yard\u0131m\u0131yla bast\u0131\u011f\u0131n\u0131z \u00e7\u0131kt\u0131lar etkile\u015fimli kabukta ya da komut sat\u0131r\u0131nda g\u00f6r\u00fcnecektir.<\/p>\n<p>\u015eimdi bu konuyu daha iyi anlayabilmek i\u00e7in birka\u00e7 \u00f6rnek yapal\u0131m.<\/p>\n<p>Normal \u015fartlar alt\u0131nda print() fonksiyonunun \u00e7\u0131kt\u0131s\u0131n\u0131 etkile\u015fimli kabukta g\u00f6r\u00fcr\u00fcz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Ben Python, Monty Python!&#8221;)<\/p>\n<p>Ben Python, Monty Python!<br \/>\nAma e\u011fer istersek print() fonksiyonunun, \u00e7\u0131kt\u0131lar\u0131n\u0131 ekrana de\u011fil, bir dosyaya yazd\u0131rmas\u0131n\u0131 da sa\u011flayabiliriz. Mesela biz \u015fimdi print() fonksiyonunun deneme.txt adl\u0131 bir dosyaya \u00e7\u0131kt\u0131 vermesini sa\u011flayal\u0131m.<\/p>\n<p>Bunun i\u00e7in s\u0131ras\u0131yla \u015fu kodlar\u0131 yazal\u0131m:<\/p>\n<p>&gt;&gt;&gt; dosya = open(&#8220;deneme.txt&#8221;, &#8220;w&#8221;)<br \/>\n&gt;&gt;&gt; print(&#8220;Ben Python, Monty Python!&#8221;, file=dosya)<br \/>\n&gt;&gt;&gt; dosya.close()<br \/>\nHerhangi bir \u00e7\u0131kt\u0131 almad\u0131n\u0131z, de\u011fil mi? Evet. \u00c7\u00fcnk\u00fc yazd\u0131\u011f\u0131m\u0131z bu kodlar sayesinde print() fonksiyonu, \u00e7\u0131kt\u0131lar\u0131n\u0131 deneme.txt adl\u0131 bir dosyaya yazd\u0131rd\u0131.<\/p>\n<p>Gelin isterseniz yukar\u0131daki kodlar\u0131 sat\u0131r sat\u0131r inceleyelim:<\/p>\n<p>1. \u00d6ncelikle deneme.txt adl\u0131 bir dosya olu\u015fturduk ve bu dosyay\u0131 dosya adl\u0131 bir de\u011fi\u015fkene atad\u0131k. Burada kulland\u0131\u011f\u0131m\u0131z open() fonksiyonuna \u00e7ok tak\u0131lmay\u0131n. Bunu birka\u00e7 b\u00f6l\u00fcm sonra inceleyece\u011fiz. Biz \u015fimdilik bu \u015fekilde dosya olu\u015fturuldu\u011funu bilelim yeter. Bu arada open fonksiyonunun da bi\u00e7im olarak type(), len(), pow() ve print() fonksiyonlar\u0131na ne kadar benzedi\u011fine dikkat edin. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi open() fonksiyonu da t\u0131pk\u0131 type(), len(), pow() ve print() fonksiyonlar\u0131 gibi birtak\u0131m parametreler al\u0131yor. Bu fonksiyonun ilk parametresi \u201cdeneme.txt\u201d adl\u0131 bir karakter dizisi. \u0130\u015fte bu karakter dizisi bizim olu\u015fturmak istedi\u011fimiz dosyan\u0131n ad\u0131n\u0131 g\u00f6steriyor. \u0130kinci parametre ise \u201cw\u201d adl\u0131 ba\u015fka bir karakter dizisi. Bu da deneme.txt dosyas\u0131n\u0131n yazma kipinde (modunda) a\u00e7\u0131laca\u011f\u0131n\u0131 g\u00f6steriyor. Ama dedi\u011fim gibi, siz \u015fimdilik bu ayr\u0131nt\u0131lara fazla tak\u0131lmay\u0131n. \u0130lerleyen derslerde, bu konular\u0131 ad\u0131n\u0131z\u0131 bilir gibi bilece\u011finizden emin olabilirsiniz.<\/p>\n<p>2. Olu\u015fturdu\u011fumuz bu deneme.txt adl\u0131 dosya, o anda bulundu\u011funuz dizin i\u00e7inde olu\u015facakt\u0131r. Bu dizinin hangisi oldu\u011funu \u00f6\u011frenmek i\u00e7in \u015fu komutlar\u0131 verebilirsiniz:<\/p>\n<p>&gt;&gt;&gt; import os<br \/>\n&gt;&gt;&gt; os.getcwd()<br \/>\nBu komutun \u00e7\u0131kt\u0131s\u0131nda hangi dizinin ad\u0131 g\u00f6r\u00fcn\u00fcyorsa, deneme.txt dosyas\u0131 da o dizinin i\u00e7indedir. Mesela bendeki \u00e7\u0131kt\u0131 \/home\/yazbel\/Desktop. Demek ki olu\u015fturdu\u011fum deneme.txt adl\u0131 dosya masa\u00fcst\u00fcndeymi\u015f. Ben bu komutlar\u0131 Ubuntu \u00fczerinde verdim. E\u011fer Windows \u00fczerinde verseydim \u015funa benzer bir \u00e7\u0131kt\u0131 alacakt\u0131m: C:\\Users\\yazbel\\Desktop<\/p>\n<p>3. Ard\u0131ndan da normal bir \u015fekilde print() fonksiyonumuzu \u00e7al\u0131\u015ft\u0131rd\u0131k. Ama g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi print() fonksiyonu bize herhangi bir \u00e7\u0131kt\u0131 vermedi. \u00c7\u00fcnk\u00fc, daha \u00f6nce de s\u00f6yledi\u011fimiz gibi, print() fonksiyonunu biz ekrana de\u011fil, dosyaya \u00e7\u0131kt\u0131 verecek \u015fekilde ayarlad\u0131k. Bu i\u015flemi, file adl\u0131 bir parametreye, biraz \u00f6nce tan\u0131mlad\u0131\u011f\u0131m\u0131z dosya de\u011fi\u015fkenini yazarak yapt\u0131k.<\/p>\n<p>4. Son komut yard\u0131m\u0131yla da, yapt\u0131\u011f\u0131m\u0131z de\u011fi\u015fikliklerin dosyada g\u00f6r\u00fcnebilmesi i\u00e7in ilk ba\u015fta a\u00e7t\u0131\u011f\u0131m\u0131z dosyay\u0131 kapat\u0131yoruz.<\/p>\n<p>\u015eimdi deneme.txt adl\u0131 dosyay\u0131 a\u00e7\u0131n. Biraz \u00f6nce print() fonksiyonuyla yazd\u0131rd\u0131\u011f\u0131m\u0131z \u201cBen Python, Monty Python!\u201d karakter dizisinin dosyaya i\u015flenmi\u015f oldu\u011funu g\u00f6receksiniz.<\/p>\n<p>B\u00f6ylece print() fonksiyonunun standart \u00e7\u0131kt\u0131 konumunu de\u011fi\u015ftirmi\u015f olduk. Yani print() fonksiyonunun file adl\u0131 parametresine farkl\u0131 bir de\u011fer vererek, print() fonksiyonunun etkile\u015fimli kabu\u011fa de\u011fil dosyaya yazmas\u0131n\u0131 sa\u011flad\u0131k.<\/p>\n<p>T\u0131pk\u0131 sep ve end parametreleri gibi, file parametresi de, siz g\u00f6rmeseniz bile her zaman print() fonksiyonunun i\u00e7inde vard\u0131r. Yani diyelim ki \u015f\u00f6yle bir komut verdik:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Tahir olmak da ay\u0131p de\u011fil&#8221;, &#8220;Z\u00fchre olmak da&#8221;)<br \/>\nPython bu komutu \u015f\u00f6yle alg\u0131lar:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Tahir olmak da ay\u0131p de\u011fil&#8221;, &#8220;Z\u00fchre olmak da&#8221;,<br \/>\n&#8230; sep=&#8221; &#8220;, end=&#8221;\\n&#8221;, file=sys.stdout)<br \/>\nYani kendisine parametre olarak verilen de\u011ferleri ekrana yazd\u0131r\u0131rken s\u0131ras\u0131yla \u015fu i\u015flemleri ger\u00e7ekle\u015ftirir:<\/p>\n<p>Parametrelerin aras\u0131na birer bo\u015fluk koyar (sep=&#8221; &#8220;),<\/p>\n<p>Ekrana yazd\u0131rma i\u015flemi bittikten sonra parametrelerin sonuna sat\u0131r ba\u015f\u0131 karakteri ekler (end=&#8221;\\n&#8221;)<\/p>\n<p>Bu \u00e7\u0131kt\u0131y\u0131 standart \u00e7\u0131kt\u0131 konumuna g\u00f6nderir (file=sys.stdout).<\/p>\n<p>\u0130\u015fte biz burada file parametresinin de\u011feri olan standart \u00e7\u0131kt\u0131 konumuna ba\u015fka bir de\u011fer vererek bu konumu de\u011fi\u015ftiriyoruz.<\/p>\n<p>Gelin isterseniz bununla ilgili bir \u00f6rnek daha yapal\u0131m. Mesela ki\u015fisel bilgilerimizi bir dosyaya kaydedelim. \u00d6ncelikle bilgileri kaydedece\u011fimiz dosyay\u0131 olu\u015ftural\u0131m:<\/p>\n<p>&gt;&gt;&gt; f = open(&#8220;ki\u015fisel_bilgiler.txt&#8221;, &#8220;w&#8221;)<br \/>\nBu kodlarla, ki\u015fisel_bilgiler.txt ad\u0131n\u0131 ta\u015f\u0131yan bir dosyay\u0131 yazma kipinde (w) a\u00e7m\u0131\u015f ve bu dosyay\u0131 f adl\u0131 bir de\u011fi\u015fkene atam\u0131\u015f olduk. \u015eimdi bilgileri yazmaya ba\u015flayabiliriz:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;F\u0131rat \u00d6zg\u00fcl&#8221;, file=f)<br \/>\n&gt;&gt;&gt; print(&#8220;Adana&#8221;, file=f)<br \/>\n&gt;&gt;&gt; print(&#8220;Ubuntu&#8221;, file=f)<br \/>\n\u0130\u015fimiz bitti\u011finde dosyay\u0131 kapatmay\u0131 unutmuyoruz. B\u00f6ylece b\u00fct\u00fcn bilgiler dosyaya yaz\u0131lm\u0131\u015f oluyor:<\/p>\n<p>&gt;&gt;&gt; f.close()<br \/>\nOlu\u015fturdu\u011fumuz ki\u015fisel_bilgiler.txt adl\u0131 dosyay\u0131 a\u00e7t\u0131\u011f\u0131m\u0131zda, print() fonksiyonuna verdi\u011fimiz parametrelerin dosyaya yazd\u0131r\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcyoruz.<\/p>\n<p>En ba\u015fta da s\u00f6yledi\u011fim gibi, bu b\u00f6l\u00fcmde hen\u00fcz \u00f6\u011frenmedi\u011fimiz baz\u0131 \u015feylerle kar\u015f\u0131la\u015ft\u0131k. E\u011fer yukar\u0131da verilen \u00f6rnekleri anlamakta zorland\u0131ysan\u0131z hi\u00e7 endi\u015fe etmenize gerek yok. Birka\u00e7 b\u00f6l\u00fcm sonra burada anlatt\u0131\u011f\u0131m\u0131z \u015feyler size \u00e7ocuk oyunca\u011f\u0131 gibi gelecek\u2026<\/p>\n<p>flush<br \/>\n\u015eimdiye kadar print() fonksiyonunun sep, end ve file adl\u0131 \u00f6zel birtak\u0131m parametreleri oldu\u011funu \u00f6\u011frendik. print() fonksiyonunun bunlar\u0131n d\u0131\u015f\u0131nda ba\u015fka bir \u00f6zel parametresi daha bulunur. Bu parametrenin ad\u0131 flush. \u0130\u015fte \u015fimdi biz print() fonksiyonunun bu flush adl\u0131 parametresinden s\u00f6z edece\u011fiz.<\/p>\n<p>Bildi\u011finiz gibi, print() gibi bir komut verdi\u011fimizde Python, yazd\u0131rmak istedi\u011fimiz bilgiyi standart \u00e7\u0131kt\u0131 konumuna g\u00f6nderir. Ancak Python\u2019da baz\u0131 i\u015flemler standart \u00e7\u0131kt\u0131 konumuna g\u00f6nderilmeden \u00f6nce bir s\u00fcre tamponda bekletilir ve daha sonra bekleyen bu i\u015flemler topluca standart \u00e7\u0131kt\u0131 konumuna g\u00f6nderilir. Peki ilk ba\u015fta \u00e7ok karma\u015f\u0131km\u0131\u015f gibi g\u00f6r\u00fcnen bu ifade ne anlama geliyor?<\/p>\n<p>Asl\u0131nda siz bu olguya hi\u00e7 yabanc\u0131 de\u011filsiniz. file parametresini anlat\u0131rken verdi\u011fimiz \u015fu \u00f6rne\u011fi tekrar ele alal\u0131m:<\/p>\n<p>&gt;&gt;&gt; f = open(&#8220;ki\u015fisel_bilgiler.txt&#8221;, &#8220;w&#8221;)<br \/>\nBu komutla ki\u015fisel_bilgiler.txt adl\u0131 bir dosyay\u0131 yazma kipinde a\u00e7t\u0131k. \u015eimdi bu dosyaya baz\u0131 bilgiler ekleyelim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;F\u0131rat \u00d6zg\u00fcl&#8221;, file=f)<br \/>\nBu komutla ki\u015fisel_bilgiler.txt adl\u0131 dosyaya \u2018F\u0131rat \u00d6zg\u00fcl\u2019 diye bir sat\u0131r eklemi\u015f olduk.<\/p>\n<p>\u015eimdi bilgisayar\u0131n\u0131zda olu\u015fan bu ki\u015fisel_bilgiler.txt dosyas\u0131n\u0131 a\u00e7\u0131n. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi dosyada hi\u00e7bir bilgi yok. Dosya \u015fu anda bo\u015f g\u00f6r\u00fcn\u00fcyor. Halbuki biz biraz \u00f6nce bu dosyaya \u2018F\u0131rat \u00d6zg\u00fcl\u2019 diye bir sat\u0131r eklemi\u015ftik, de\u011fil mi?<\/p>\n<p>Python bizim bu dosyaya eklemek istedi\u011fimiz sat\u0131r\u0131 tampona kaydetti. Dosyaya yazma i\u015flemleri sona erdi\u011finde ise Python, tamponda bekleyen b\u00fct\u00fcn bilgileri standart \u00e7\u0131kt\u0131 konumuna (yani bizim durumumuzda f adl\u0131 de\u011fi\u015fkenin tuttu\u011fu ki\u015fisel_bilgiler.txt adl\u0131 dosyaya) bo\u015faltacak.<\/p>\n<p>Dosyaya ba\u015fka bilgiler de yazal\u0131m:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Adana&#8221;, file=f)<br \/>\n&gt;&gt;&gt; print(&#8220;Ubuntu&#8221;, file=f)<br \/>\nDosyaya yazaca\u011f\u0131m\u0131z \u015feyler bu kadar. Art\u0131k yazma i\u015fleminin sona erdi\u011fini Python\u2019a bildirmek i\u00e7in \u015fu komutu veriyoruz:<\/p>\n<p>&gt;&gt;&gt; f.close()<br \/>\nB\u00f6ylece dosyam\u0131z\u0131 kapatm\u0131\u015f olduk. \u015eimdi ki\u015fisel_bilgiler.txt adl\u0131 dosyaya \u00e7ift t\u0131klayarak dosyay\u0131 tekrar a\u00e7\u0131n. Orada \u2018F\u0131rat \u00d6zg\u00fcl\u2019, \u2018Adana\u2019 ve \u2018Ubuntu\u2019 sat\u0131rlar\u0131n\u0131 g\u00f6receksiniz.<\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, ger\u00e7ekten de Python dosyaya yazd\u0131rmak istedi\u011fimiz b\u00fct\u00fcn verileri \u00f6nce tamponda bekletti, daha sonra dosya kapat\u0131l\u0131nca tamponda bekleyen b\u00fct\u00fcn verileri dosyaya bo\u015faltt\u0131. \u0130\u015fte flush parametresi ile, bahsetti\u011fimiz bu bo\u015faltma i\u015flemini kontrol edebilirsiniz. \u015eimdi dikkatlice inceleyin:<\/p>\n<p>&gt;&gt;&gt; f = open(&#8220;ki\u015fisel_bilgiler.txt&#8221;, &#8220;w&#8221;)<br \/>\nDosyam\u0131z\u0131 olu\u015fturduk. \u015eimdi bu dosyaya baz\u0131 bilgiler ekleyelim:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;Merhaba D\u00fcnya!&#8221;, file=f, flush=True)<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, burada flush adl\u0131 yeni bir parametre kulland\u0131k. Bu parametreye verdi\u011fimiz de\u011fer True. \u015eimdi dosyaya \u00e7ift t\u0131klayarak dosyay\u0131 a\u00e7\u0131n. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, hen\u00fcz dosyay\u0131 kapatmad\u0131\u011f\u0131m\u0131z halde bilgiler dosyaya yaz\u0131ld\u0131. Bu durum, tahmin edebilece\u011finiz gibi, flush parametresine True de\u011feri vermemiz sayesindedir. Bu parametre iki de\u011fer alabilir: True ve False. Bu parametrenin \u00f6ntan\u0131ml\u0131 de\u011feri False\u2019tur. Yani e\u011fer biz bu parametreye herhangi bir de\u011fer belirtmezsek Python bu parametrenin de\u011ferini False olarak kabul edecek ve bilgilerin dosyaya yaz\u0131lmas\u0131 i\u00e7in dosyan\u0131n kapat\u0131lmas\u0131n\u0131 bekleyecektir. Ancak bu parametreye True de\u011ferini verdi\u011fimizde ise veriler tamponda bekletilmeksizin standart \u00e7\u0131kt\u0131 konumuna g\u00f6nderilecektir.<\/p>\n<p>Yazd\u0131\u011f\u0131n\u0131z bir programda, yapmak istedi\u011finiz i\u015fin niteli\u011fine g\u00f6re, bir dosyaya yazmak istedi\u011finiz bilgilerin bir s\u00fcre tamponda bekletilmesini veya hi\u00e7 bekletilmeden do\u011frudan dosyaya yaz\u0131lmas\u0131n\u0131 isteyebilirsiniz. \u0130htiyac\u0131n\u0131za ba\u011fl\u0131 olarak da flush parametresinin de\u011ferini True veya False olarak belirleyebilirsiniz.<\/p>\n<p>Birka\u00e7 Pratik Bilgi<br \/>\nBuraya gelene kadar print() fonksiyonu ve bu fonksiyonun parametreleri hakk\u0131nda epey s\u00f6z s\u00f6yledik. Dilerseniz \u015fimdi de, programc\u0131l\u0131k maceran\u0131zda i\u015finize yarayacak, i\u015flerinizi kolayla\u015ft\u0131racak baz\u0131 ipu\u00e7lar\u0131 verelim.<\/p>\n<p>Y\u0131ld\u0131zl\u0131 Parametreler<br \/>\n\u015eimdi size \u015f\u00f6yle bir soru sormama izin verin: Acaba a\u015fa\u011f\u0131daki gibi bir \u00e7\u0131kt\u0131y\u0131 nas\u0131l elde ederiz?<\/p>\n<p>L.i.n.u.x<br \/>\nAkl\u0131n\u0131za hemen \u015f\u00f6yle bir cevap gelmi\u015f olabilir:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;L&#8221;, &#8220;i&#8221;, &#8220;n&#8221;, &#8220;u&#8221;, &#8220;x&#8221;, sep=&#8221;.&#8221;)<\/p>\n<p>L.i.n.u.x<br \/>\nYukar\u0131daki, ger\u00e7ekten de do\u011fru bir \u00e7\u00f6z\u00fcmd\u00fcr. Ancak bu soruyu \u00e7\u00f6zmenin \u00e7ok daha basit bir yolu var. \u015eimdi dikkatle bak\u0131n:<\/p>\n<p>&gt;&gt;&gt; print(*&#8221;Linux&#8221;, sep=&#8221;.&#8221;)<\/p>\n<p>L.i.n.u.x<br \/>\nKonuyu a\u00e7\u0131klamaya ge\u00e7meden \u00f6nce bir \u00f6rnek daha verelim:<\/p>\n<p>&gt;&gt;&gt; print(*&#8221;Galatasaray&#8221;)<\/p>\n<p>G a l a t a s a r a y<br \/>\nBurada neler d\u00f6nd\u00fc\u011f\u00fcn\u00fc az \u00e7ok tahmin etti\u011finizi zannediyorum. Son \u00f6rnekte de g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, \u201cGalatasaray\u201d karakter dizisinin ba\u015f\u0131na ekledi\u011fimiz y\u0131ld\u0131z i\u015fareti; \u201cGalatasaray\u201d karakter dizisinin her bir \u00f6\u011fesini par\u00e7alar\u0131na ay\u0131rarak, bunlar\u0131 tek tek print() fonksiyonuna yolluyor. Yani sanki print() fonksiyonunu \u015f\u00f6yle yazm\u0131\u015f\u0131z gibi oluyor:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;G&#8221;, &#8220;a&#8221;, &#8220;l&#8221;, &#8220;a&#8221;, &#8220;t&#8221;, &#8220;a&#8221;, &#8220;s&#8221;, &#8220;a&#8221;, &#8220;r&#8221;, &#8220;a&#8221;, &#8220;y&#8221;)<\/p>\n<p>G a l a t a s a r a y<br \/>\nDedi\u011fimiz gibi, bir fonksiyona parametre olarak verdi\u011fimiz bir karakter dizisinin ba\u015f\u0131na ekledi\u011fimiz y\u0131ld\u0131z i\u015fareti, bu karakter dizisini tek tek \u00f6\u011felerine ay\u0131r\u0131p, bu \u00f6\u011feleri yine tek tek ve sanki her bir \u00f6\u011fe ayr\u0131 bir parametreymi\u015f gibi o fonksiyona g\u00f6nderdi\u011fi i\u00e7in do\u011fal olarak y\u0131ld\u0131z i\u015faretini ancak, birden fazla parametre alabilen fonksiyonlara uygulayabiliriz.<\/p>\n<p>\u00d6rne\u011fin len() fonksiyonu sadece tek bir parametre alabilir:<\/p>\n<p>&gt;&gt;&gt; len(&#8220;Galatasaray&#8221;)<\/p>\n<p>11<br \/>\nBu fonksiyonu birden fazla parametre ile kullanamay\u0131z:<\/p>\n<p>&gt;&gt;&gt; len(&#8220;Galatasaray&#8221;, &#8220;Fenerbah\u00e7e&#8221;, &#8220;Be\u015fikta\u015f&#8221;)<\/p>\n<p>Traceback (most recent call last):<br \/>\nFile &#8220;&lt;stdin&gt;&#8221;, line 1, in &lt;module&gt;<br \/>\nTypeError: len() takes exactly one argument (3 given)<br \/>\nHata mesaj\u0131nda da s\u00f6ylendi\u011fi gibi, len() fonksiyonu yaln\u0131zca tek bir parametre alabilirken, biz 3 parametre vermeye \u00e7al\u0131\u015fm\u0131\u015f\u0131z\u2026<\/p>\n<p>Dolay\u0131s\u0131yla y\u0131ld\u0131zl\u0131 parametreleri len() fonksiyonuna uygulayamay\u0131z:<\/p>\n<p>&gt;&gt;&gt; len(*&#8221;Galatasaray&#8221;)<\/p>\n<p>Traceback (most recent call last):<br \/>\nFile &#8220;&lt;stdin&gt;&#8221;, line 1, in &lt;module&gt;<br \/>\nTypeError: len() takes exactly one argument (11 given)<br \/>\nBir parametrenin ba\u015f\u0131na y\u0131ld\u0131z ekledi\u011fimizde, o parametreyi olu\u015fturan b\u00fct\u00fcn \u00f6\u011feler tek tek fonksiyona g\u00f6nderildi\u011fi i\u00e7in, sanki len() fonksiyonuna 1 de\u011fil de, 11 ayr\u0131 parametre vermi\u015fiz gibi bir sonu\u00e7 ortaya \u00e7\u0131k\u0131yor.<\/p>\n<p>Y\u0131ld\u0131zl\u0131 parametreleri bir fonksiyona uygulayabilmemiz i\u00e7in o fonksiyonun birden fazla parametre alabilmesinin yan\u0131s\u0131ra, yap\u0131s\u0131n\u0131n da y\u0131ld\u0131zl\u0131 parametre almaya uygun olmas\u0131 gerekir. Mesela open(), type() ve biraz \u00f6nce bahsetti\u011fimiz len() fonksiyonlar\u0131n\u0131n yap\u0131s\u0131 y\u0131ld\u0131zl\u0131 parametre almaya uygun de\u011fildir. Dolay\u0131s\u0131yla y\u0131ld\u0131zl\u0131 parametreleri her fonksiyonla birlikte kullanamay\u0131z, ama print() fonksiyonu y\u0131ld\u0131zl\u0131 parametreler i\u00e7in son derece uygun bir fonksiyondur:<\/p>\n<p>&gt;&gt;&gt; print(*&#8221;Galatasaray&#8221;)<\/p>\n<p>G a l a t a s a r a y<\/p>\n<p>&gt;&gt;&gt; print(*&#8221;TBMM&#8221;, sep=&#8221;.&#8221;)<\/p>\n<p>T.B.M.M<\/p>\n<p>&gt;&gt;&gt; print(*&#8221;abc\u00e7defg\u011fh&#8221;, sep=&#8221;\/&#8221;)<\/p>\n<p>a\/b\/c\/\u00e7\/d\/e\/f\/g\/\u011f\/h<br \/>\nBu \u00f6rneklerden de g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, print() fonksiyonuna verdi\u011fimiz bir parametrenin ba\u015f\u0131na y\u0131ld\u0131z ekledi\u011fimizde, o parametre tek tek par\u00e7alar\u0131na ayr\u0131l\u0131p print() fonksiyonuna g\u00f6nderildi\u011fi i\u00e7in, sonu\u00e7 olarak sep parametresinin karakter dizisi \u00f6\u011felerine tek tek uygulanmas\u0131n\u0131 sa\u011flam\u0131\u015f oluyoruz.<\/p>\n<p>Hat\u0131rlarsan\u0131z sep parametresinin \u00f6ntan\u0131ml\u0131 de\u011ferinin bir adet bo\u015fluk karakteri oldu\u011funu s\u00f6ylemi\u015ftik. Yani asl\u0131nda Python yukar\u0131daki ilk komutu \u015f\u00f6yle g\u00f6r\u00fcyor:<\/p>\n<p>&gt;&gt;&gt; print(*&#8221;Galatasaray&#8221;, sep=&#8221; &#8220;)<br \/>\nDolay\u0131s\u0131yla, y\u0131ld\u0131z i\u015fareti sayesinde \u201cGalatasaray\u201d adl\u0131 karakter dizisinin her bir \u00f6\u011fesinin aras\u0131na bir adet bo\u015fluk karakteri yerle\u015ftiriliyor. Bir sonraki \u201cTBMM\u201d karakter dizisinde ise, sep parametresinin de\u011ferini nokta i\u015fareti olarak de\u011fi\u015ftirdi\u011fimiz i\u00e7in \u201cTBMM\u201d karakter dizisinin her bir \u00f6\u011fesinin aras\u0131na bir adet nokta i\u015fareti yerle\u015ftiriliyor. Ayn\u0131 \u015fekilde \u201cabc\u00e7defg\u011fh\u201d karakter dizisinin her bir \u00f6\u011fesini tek tek print() fonksiyonuna yollayarak, sep parametresine verdi\u011fimiz \/ i\u015fareti yard\u0131m\u0131yla her \u00f6\u011fenin aras\u0131na bu \/ i\u015faretini yerle\u015ftirebiliyoruz.<\/p>\n<p>Y\u0131ld\u0131zl\u0131 parametrelerle ilgili tek k\u0131s\u0131tlama, bunlar\u0131n say\u0131larla birlikte kullan\u0131lamayacak olmas\u0131d\u0131r:<\/p>\n<p>&gt;&gt;&gt; print(*2345)<\/p>\n<p>Traceback (most recent call last):<br \/>\nFile &#8220;&lt;stdin&gt;&#8221;, line 1, in &lt;module&gt;<br \/>\nTypeError: print() argument after * must be a sequence, not int<br \/>\n\u00c7\u00fcnk\u00fc y\u0131ld\u0131zl\u0131 parametreler ancak ve ancak dizi \u00f6zelli\u011fi ta\u015f\u0131yan veri tipleriyle birlikte kullan\u0131labilir. Mesela karakter dizileri bu t\u00fcrden bir veri tipidir. \u0130lerde dizi \u00f6zelli\u011fi ta\u015f\u0131yan ve bu sayede y\u0131ld\u0131zl\u0131 parametrelerle birlikte kullan\u0131labilecek ba\u015fka veri tiplerini de \u00f6\u011frenece\u011fiz.<\/p>\n<p>Yukar\u0131da verdi\u011fimiz \u00f6rnekler bize y\u0131ld\u0131zl\u0131 parametrelerin son derece kullan\u0131\u015fl\u0131 ara\u00e7lar oldu\u011funu g\u00f6steriyor. \u0130leride de bu parametrelerden bol bol yararlanaca\u011f\u0131z. Biz \u015fimdi bu konuyu burada kapat\u0131p ba\u015fka bir \u015feyden s\u00f6z edelim.<\/p>\n<p>sys.stdout\u2019u Kal\u0131c\u0131 Olarak De\u011fi\u015ftirmek<br \/>\n\u00d6nceki ba\u015fl\u0131klar alt\u0131nda verdi\u011fimiz \u00f6rneklerden de g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, print() fonksiyonunun file parametresi yard\u0131m\u0131yla Python\u2019\u0131n standart \u00e7\u0131kt\u0131 konumunu ge\u00e7ici olarak de\u011fi\u015ftirebiliyoruz. Ama baz\u0131 durumlarda, yazd\u0131\u011f\u0131n\u0131z programlarda, o program\u0131n i\u015fleyi\u015fi boyunca standart d\u0131\u015f\u0131 bir \u00e7\u0131kt\u0131 konumu belirlemek isteyebilirsiniz. Yani standart \u00e7\u0131kt\u0131 konumunu ge\u00e7ici olarak de\u011fil, kal\u0131c\u0131 olarak de\u011fi\u015ftirmeniz gerekebilir. Mesela yazd\u0131\u011f\u0131n\u0131z programda b\u00fct\u00fcn \u00e7\u0131kt\u0131lar\u0131 bir dosyaya yazd\u0131rmay\u0131 tercih edebilirsiniz. Elbette bu i\u015flemi her defas\u0131nda file parametresini, \u00e7\u0131kt\u0131lar\u0131 yazd\u0131rmak istedi\u011finiz dosyan\u0131n ad\u0131 olarak belirleyerek yapabilirsiniz. T\u0131pk\u0131 \u015fu \u00f6rnekte oldu\u011fu gibi:<\/p>\n<p>&gt;&gt;&gt; f = open(&#8220;dosya.txt&#8221;, &#8220;w&#8221;)<br \/>\n&gt;&gt;&gt; print(&#8220;F\u0131rat \u00d6zg\u00fcl&#8221;, file=f)<br \/>\n&gt;&gt;&gt; print(&#8220;Adana&#8221;, file=f)<br \/>\n&gt;&gt;&gt; print(&#8220;Ubuntu&#8221;, file=f)<br \/>\n&gt;&gt;&gt; f.close()<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, her defas\u0131nda file parametresine f de\u011ferini vererek i\u015fimizi hallettik. Ama bunu yapman\u0131n daha pratik bir y\u00f6ntemi var. Dilerseniz yazd\u0131\u011f\u0131n\u0131z program\u0131n t\u00fcm i\u015fleyi\u015fi boyunca \u00e7\u0131kt\u0131lar\u0131 ba\u015fka bir konuma y\u00f6nlendirebilirsiniz. Bunun i\u00e7in hem \u015fimdiye kadar \u00f6\u011frendi\u011fimiz, hem de hen\u00fcz \u00f6\u011frenmedi\u011fimiz baz\u0131 bilgileri kullanaca\u011f\u0131z.<\/p>\n<p>\u0130lk \u00f6nce \u015f\u00f6yle bir kod yazal\u0131m:<\/p>\n<p>&gt;&gt;&gt; import sys<br \/>\nBu kod yard\u0131m\u0131yla sys adl\u0131 \u00f6zel bir \u2018mod\u00fcl\u00fc\u2019 program\u0131m\u0131za dahil etmi\u015f, yani i\u00e7e aktarm\u0131\u015f olduk. Peki \u2018mod\u00fcl\u2019 nedir, \u2018i\u00e7e aktarmak\u2019 ne demek?<\/p>\n<p>Asl\u0131nda biz bu \u2018mod\u00fcl\u2019 ve \u2018i\u00e7e aktarma\u2019 kavramlar\u0131na hi\u00e7 de yabanc\u0131 de\u011filiz. \u00d6nceki derslerde, pek \u00fczerinde durmam\u0131\u015f da olsak, biz Python\u2019daki birka\u00e7 mod\u00fclle zaten tan\u0131\u015fm\u0131\u015ft\u0131k. Mesela os adl\u0131 bir mod\u00fcl i\u00e7indeki getcwd() adl\u0131 bir fonksiyonu kullanarak, o anda hangi dizinde bulundu\u011fumuzu \u00f6\u011frenebilmi\u015ftik:<\/p>\n<p>&gt;&gt;&gt; import os<br \/>\n&gt;&gt;&gt; os.getcwd()<br \/>\nAyn\u0131 \u015fekilde keyword adl\u0131 ba\u015fka bir mod\u00fcl i\u00e7indeki kwlist adl\u0131 de\u011fi\u015fkeni kullanarak, hangi kelimelerin Python\u2019da de\u011fi\u015fken ad\u0131 olarak kullan\u0131lamayaca\u011f\u0131n\u0131 da listeleyebilmi\u015ftik:<\/p>\n<p>&gt;&gt;&gt; import keyword<br \/>\n&gt;&gt;&gt; keyword.kwlist<br \/>\n\u0130\u015fte \u015fimdi de, os ve keyword mod\u00fcllerine ek olarak sys adl\u0131 bir mod\u00fclden s\u00f6z ediyoruz. Gelin isterseniz \u00f6teki mod\u00fclleri \u015fimdilik bir kenara b\u0131rak\u0131p, bu sys denen mod\u00fcle dikkatimizi verelim.<\/p>\n<p>Dedi\u011fimiz gibi, sys mod\u00fcl\u00fc i\u00e7inde pek \u00e7ok \u00f6nemli de\u011fi\u015fken ve fonksiyon bulunur. Ancak bir mod\u00fcl i\u00e7indeki de\u011fi\u015fken ve fonksiyonlar\u0131 kullanabilmek i\u00e7in o mod\u00fcl\u00fc \u00f6ncelikle program\u0131m\u0131za dahil etmemiz, yani i\u00e7e aktarmam\u0131z gerekiyor. Bunu import komutuyla yap\u0131yoruz:<\/p>\n<p>&gt;&gt;&gt; import sys<br \/>\nArt\u0131k sys mod\u00fcl\u00fc i\u00e7indeki b\u00fct\u00fcn fonksiyon ve de\u011fi\u015fkenlere ula\u015fabilece\u011fiz.<\/p>\n<p>sys mod\u00fcl\u00fc i\u00e7inde bulunan pek \u00e7ok de\u011fi\u015fken ve fonksiyondan biri de stdout adl\u0131 de\u011fi\u015fkendir. Bu de\u011fi\u015fkenin de\u011ferine \u015f\u00f6yle ula\u015fabilirsiniz:<\/p>\n<p>&gt;&gt;&gt; sys.stdout<br \/>\nBu komut \u015funa benzer bir \u00e7\u0131kt\u0131 verir:<\/p>\n<p>&lt;_io.TextIOWrapper name='&lt;stdout&gt;&#8217; mode=&#8217;w&#8217; encoding=&#8217;cp1254&#8242;&gt;<br \/>\nBu \u00e7\u0131kt\u0131daki name=\u2019&lt;stdout&gt;\u2019 k\u0131sm\u0131na dikkat edin. Bu ifadeye birazdan geri d\u00f6nece\u011fiz. Biz \u015fimdi ba\u015fka bir \u015feyden s\u00f6z edelim.<\/p>\n<p>Hat\u0131rlarsan\u0131z etkile\u015fimli kabu\u011fu nas\u0131l kapatabilece\u011fimizi anlat\u0131rken, etkile\u015fimli kabuktan \u00e7\u0131kman\u0131n bir yolunun da \u015fu komutlar\u0131 vermek oldu\u011funu s\u00f6ylemi\u015ftik:<\/p>\n<p>&gt;&gt;&gt; import sys; sys.exit()<br \/>\nBu komutu tek sat\u0131rda yazm\u0131\u015ft\u0131k, ama istersek \u015f\u00f6yle de yazabiliriz elbette:<\/p>\n<p>&gt;&gt;&gt; import sys<br \/>\n&gt;&gt;&gt; sys.exit()<br \/>\nDedik ya, sys mod\u00fcl\u00fc i\u00e7inde pek \u00e7ok de\u011fi\u015fken ve fonksiyon bulunur. Nas\u0131l stdout sys mod\u00fcl\u00fc i\u00e7indeki de\u011fi\u015fkenlerden biri ise, exit() de sys mod\u00fcl\u00fc i\u00e7inde bulunan fonksiyonlardan biridir.<\/p>\n<p>Biz \u2018mod\u00fcller\u2019 konusunu ilerleyen derslerde ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyece\u011fiz. \u015eimdilik mod\u00fcllere ili\u015fkin olarak yaln\u0131zca \u015funlar\u0131 bilelim yeter:<\/p>\n<p>1. Python\u2019da mod\u00fcller import komutu ile i\u00e7e aktar\u0131l\u0131r. \u00d6rne\u011fin sys adl\u0131 mod\u00fcl\u00fc i\u00e7e aktarmak i\u00e7in import sys komutunu veriyoruz.<\/p>\n<p>2. Mod\u00fcller i\u00e7inde pek \u00e7ok faydal\u0131 de\u011fi\u015fken ve fonksiyon bulunur. \u0130\u015fte bir mod\u00fcl\u00fc i\u00e7e aktard\u0131\u011f\u0131m\u0131zda, o mod\u00fcl i\u00e7indeki bu de\u011fi\u015fken ve fonksiyonlar\u0131 kullanma imkan\u0131 elde ederiz.<\/p>\n<p>3. sys mod\u00fcl\u00fc i\u00e7indeki de\u011fi\u015fkenlere bir \u00f6rnek stdout; fonksiyonlara \u00f6rnek ise exit() fonksiyonudur. Bir mod\u00fcl i\u00e7indeki bu de\u011fi\u015fken ve fonksiyonlara \u2018mod\u00fcl_ad\u0131.de\u011fi\u015fken_ya_da_fonksiyon\u2019 form\u00fcl\u00fcn\u00fc kullanarak eri\u015febiliriz. \u00d6rne\u011fin:<\/p>\n<p>&gt;&gt;&gt; sys.stdout<br \/>\n&gt;&gt;&gt; sys.exit()<br \/>\n4. Hat\u0131rlarsan\u0131z bundan \u00f6nce de, open() fonksiyonu ile dosya olu\u015fturmay\u0131 anlat\u0131rken, olu\u015fturulan dosyan\u0131n hangi dizinde oldu\u011funu bulabilmek amac\u0131yla, o anda i\u00e7inde bulundu\u011fumuz dizini tespit edebilmek i\u00e7in \u015fu kodlar\u0131 kullanm\u0131\u015ft\u0131k:<\/p>\n<p>&gt;&gt;&gt; import os<br \/>\n&gt;&gt;&gt; os.getcwd()<br \/>\nBurada da os adl\u0131 ba\u015fka bir mod\u00fcl g\u00f6r\u00fcyoruz. \u0130\u015fte os da t\u0131pk\u0131 sys gibi bir mod\u00fcld\u00fcr ve t\u0131pk\u0131 sys mod\u00fcl\u00fcnde oldu\u011fu gibi, os mod\u00fcl\u00fcn\u00fcn de i\u00e7inde pek \u00e7ok yararl\u0131 de\u011fi\u015fken ve fonksiyon bulunur. getcwd() adl\u0131 fonksiyon da os mod\u00fcl\u00fc i\u00e7inde yer alan ve o anda hangi dizin alt\u0131nda bulundu\u011fumuzu g\u00f6steren bir fonksiyondur. Elbette, yine t\u0131pk\u0131 sys mod\u00fcl\u00fcnde oldu\u011fu gibi, os mod\u00fcl\u00fc i\u00e7indeki bu yararl\u0131 de\u011fi\u015fken ve fonksiyonlar\u0131 kullanabilmek i\u00e7in de \u00f6ncelikle bu os mod\u00fcl\u00fcn\u00fc i\u00e7e aktarmam\u0131z, yani program\u0131m\u0131za dahil etmemiz gerekiyor. os mod\u00fcl\u00fcn\u00fc import komutu arac\u0131l\u0131\u011f\u0131yla uygun bir \u015fekilde i\u00e7e aktard\u0131ktan sonra, mod\u00fcl i\u00e7inde yer alan getcwd() adl\u0131 fonksiyona yine \u2018mod\u00fcl_ad\u0131.fonksiyon\u2019 form\u00fcl\u00fcn\u00fc kullanarak eri\u015febiliyoruz.<\/p>\n<p>Mod\u00fcllere ili\u015fkin \u015fimdilik bu kadar bilgi yeter. Mod\u00fclleri bir kenara b\u0131rak\u0131p yolumuza devam edelim\u2026<\/p>\n<p>E\u011fer sys.exit() komutunu verip etkile\u015fimli kabuktan \u00e7\u0131kt\u0131ysan\u0131z, etkile\u015fimli kabu\u011fa tekrar girin ve sys mod\u00fcl\u00fcn\u00fc yeniden i\u00e7e aktar\u0131n:<\/p>\n<p>&gt;&gt;&gt; import sys<br \/>\nBir mod\u00fcl\u00fc ayn\u0131 etkile\u015fimli kabuk oturumu i\u00e7inde bir kez i\u00e7e aktarmak yeterlidir. Bir mod\u00fcl\u00fc bir kez i\u00e7e aktard\u0131ktan sonra, o oturum s\u00fcresince bu mod\u00fcl i\u00e7indeki de\u011fi\u015fken ve fonksiyonlar\u0131 kullanmaya devam edebilirsiniz. Ama tabii ki etkile\u015fimli kabu\u011fu kapat\u0131p tekrar a\u00e7t\u0131ktan sonra, bir mod\u00fcl\u00fc kullanabilmek i\u00e7in o mod\u00fcl\u00fc tekrar i\u00e7e aktarman\u0131z gerekir.<br \/>\n\u015eimdi \u015fu kodu yaz\u0131n:<\/p>\n<p>&gt;&gt;&gt; f = open(&#8220;dosya.txt&#8221;, &#8220;w&#8221;)<br \/>\nBu kodun anlam\u0131n\u0131 biliyorsunuz. Burada dosya.txt adl\u0131 bir dosyay\u0131 yazma kipinde a\u00e7m\u0131\u015f olduk. Tahmin edebilece\u011finiz gibi, \u00e7\u0131kt\u0131lar\u0131m\u0131z\u0131 ekran yerine bu dosyaya y\u00f6nlendirece\u011fiz.<\/p>\n<p>\u015eimdi de \u015f\u00f6yle bir kod yazal\u0131m:<\/p>\n<p>&gt;&gt;&gt; sys.stdout = f<br \/>\nBildi\u011finiz gibi, sys.stdout de\u011feri Python\u2019\u0131n \u00e7\u0131kt\u0131lar\u0131 hangi konuma verece\u011fini belirliyor. \u0130\u015fte biz burada sys.stdout\u2019un de\u011ferini biraz \u00f6nce olu\u015fturdu\u011fumuz f adl\u0131 dosya ile de\u011fi\u015ftiriyoruz. B\u00f6ylece Python b\u00fct\u00fcn \u00e7\u0131kt\u0131lar\u0131 f de\u011fi\u015fkeni i\u00e7inde belirtti\u011fimiz dosya.txt adl\u0131 dosyaya g\u00f6nderiyor.<\/p>\n<p>Bu andan sonra yazaca\u011f\u0131n\u0131z her \u015fey dosya.txt adl\u0131 dosyaya gidecektir:<\/p>\n<p>&gt;&gt;&gt; print(&#8220;deneme metni&#8221;, flush=True)<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, burada file parametresini kullanmad\u0131\u011f\u0131m\u0131z halde \u00e7\u0131kt\u0131lar\u0131m\u0131z ekrana de\u011fil, dosya.txt adl\u0131 bir dosyaya yazd\u0131r\u0131ld\u0131. Peki ama bu nas\u0131l oldu? Asl\u0131nda bunun cevab\u0131 \u00e7ok basit: Biraz \u00f6nce sys.stdout = f komutuyla sys.stdout\u2019un de\u011ferini f de\u011fi\u015fkeninin tuttu\u011fu dosya ile de\u011fi\u015ftirdik. Bu i\u015flemi yapmadan \u00f6nce sys.stdout\u2019un de\u011feri \u015fuydu hat\u0131rlarsan\u0131z:<\/p>\n<p>&lt;_io.TextIOWrapper name='&lt;stdout&gt;&#8217; mode=&#8217;w&#8217; encoding=&#8217;cp1254&#8242;&gt;<br \/>\nAma sys.stdout = f komutundan sonra her \u015fey de\u011fi\u015fti. Kontrol edelim:<\/p>\n<p>&gt;&gt;&gt; print(sys.stdout, flush=True)<br \/>\nElbette bu komuttan herhangi bir \u00e7\u0131kt\u0131 almad\u0131n\u0131z. \u00c7\u0131kt\u0131n\u0131n ne oldu\u011funu g\u00f6rmek i\u00e7in dosya.txt adl\u0131 dosyay\u0131 a\u00e7\u0131n. Orada \u015fu sat\u0131r\u0131 g\u00f6receksiniz:<\/p>\n<p>&lt;_io.TextIOWrapper name=&#8217;dosya.txt&#8217; mode=&#8217;w&#8217; encoding=&#8217;cp1254&#8242;&gt;<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, \u00f6zg\u00fcn stdout \u00e7\u0131kt\u0131s\u0131ndaki name=\u2019&lt;stdout&gt;\u2019 de\u011feri name=\u2019dosya.txt\u2019 olmu\u015f. Dolay\u0131s\u0131yla art\u0131k b\u00fct\u00fcn \u00e7\u0131kt\u0131lar dosya.txt adl\u0131 dosyaya gidiyor\u2026<\/p>\n<p>Bu arada, yukar\u0131daki \u00e7\u0131kt\u0131da g\u00f6r\u00fcnen name, mode ve encoding de\u011ferlerine \u015fu \u015fekilde ula\u015fabilirsiniz:<\/p>\n<p>sys.stdout.name<br \/>\nsys.stdout.mode<br \/>\nsys.stdout.encoding<br \/>\nBurada sys.stdout.name komutu standart \u00e7\u0131kt\u0131 konumunun o anki ad\u0131n\u0131 verecektir. sys.stdout.mode komutu ise standart \u00e7\u0131kt\u0131 konumunun hangi kipe sahip oldu\u011funu g\u00f6sterir. Standart \u00e7\u0131kt\u0131 konumu genellikle yazma kipinde (w) bulunur. sys.stdout.encoding kodu ise standart \u00e7\u0131kt\u0131 konumunun sahip oldu\u011fu kodlama bi\u00e7imini g\u00f6sterir. Kodlama bi\u00e7imi, standart \u00e7\u0131kt\u0131 konumuna yazd\u0131raca\u011f\u0131n\u0131z karakterlerin hangi kodlama bi\u00e7imi ile kodlanaca\u011f\u0131n\u0131 belirler. Kodlama bi\u00e7imi Windows\u2019ta genellikle \u2018cp1254\u2019, GNU\/Linux\u2019ta ise \u2018utf-8\u2019dir. E\u011fer bu kodlama bi\u00e7imi yanl\u0131\u015f olursa, mesela dosyaya yazd\u0131raca\u011f\u0131n\u0131z karakterler i\u00e7indeki T\u00fcrk\u00e7e harfler d\u00fczg\u00fcn g\u00f6r\u00fcnt\u00fclenemez. E\u011fer burada s\u00f6ylediklerimiz size \u015fu anda anla\u015f\u0131lmaz geliyorsa, s\u00f6ylediklerimizi dikkate almadan yolunuza devam edebilirsiniz. Birka\u00e7 b\u00f6l\u00fcm sonra bu s\u00f6ylediklerimiz size daha fazla \u015fey ifade etmeye ba\u015flayacak nas\u0131l olsa.<\/p>\n<p>Peki standart \u00e7\u0131kt\u0131 konumunu eski haline d\u00f6nd\u00fcrmek isterseniz ne yapacaks\u0131n\u0131z? Bunun i\u00e7in etkile\u015fimli kabuktan \u00e7\u0131k\u0131p tekrar girebilirsiniz. Etkile\u015fimli kabu\u011fu tekrar a\u00e7t\u0131\u011f\u0131n\u0131zda her \u015feyin eski haline d\u00f6nd\u00fc\u011f\u00fcn\u00fc g\u00f6receksiniz. Ayn\u0131 \u015fekilde, e\u011fer bu kodlar\u0131 bir program dosyas\u0131na yazm\u0131\u015f olsayd\u0131n\u0131z, program\u0131n\u0131z kapand\u0131\u011f\u0131nda her \u015fey eski haline d\u00f6necekti.<\/p>\n<p>Peki standart \u00e7\u0131kt\u0131 konumunu, etkile\u015fimli kabuktan \u00e7\u0131kmadan veya program\u0131 kapatmadan eski haline d\u00f6nd\u00fcrmenin bir yolu var m\u0131? Elbette var. Dikkatlice bak\u0131n:<\/p>\n<p>&gt;&gt;&gt; import sys<br \/>\n&gt;&gt;&gt; f = open(&#8220;dosya.txt&#8221;, &#8220;w&#8221;)<br \/>\n&gt;&gt;&gt; sys.stdout, f = f, sys.stdout<br \/>\n&gt;&gt;&gt; print(&#8220;deneme&#8221;, flush=True)<br \/>\n&gt;&gt;&gt; f, sys.stdout = sys.stdout, f<br \/>\n&gt;&gt;&gt; print(&#8220;deneme&#8221;)<\/p>\n<p>deneme<br \/>\nE\u011fer yukar\u0131daki kodlar\u0131 \u00e7al\u0131\u015ft\u0131ram\u0131yorsan\u0131z, ayn\u0131 etkile\u015fimli kabuk oturumunda \u00f6nceden verdi\u011finiz kodlar bu kodlar\u0131n do\u011fru \u00e7\u0131kt\u0131 vermesini engelliyor olabilir. Bu sorunu a\u015fmak i\u00e7in, etkile\u015fimli kabu\u011fu kapat\u0131p tekrar a\u00e7\u0131n ve yukar\u0131daki komutlar\u0131 tekrar verin.<br \/>\nAsl\u0131nda burada anlayamayaca\u011f\u0131n\u0131z hi\u00e7bir \u015fey yok. Burada yapt\u0131\u011f\u0131m\u0131z \u015feyi ge\u00e7en b\u00f6l\u00fcmlerde de\u011fi\u015fkenlerin de\u011ferini nas\u0131l takas edece\u011fimizi anlat\u0131rken de yapm\u0131\u015ft\u0131k. Hat\u0131rlayal\u0131m:<\/p>\n<p>&gt;&gt;&gt; osman = &#8220;Ara\u015ft\u0131rma Geli\u015ftirme M\u00fcd\u00fcr\u00fc&#8221;<br \/>\n&gt;&gt;&gt; mehmet = &#8220;Proje Sorumlusu&#8221;<br \/>\n&gt;&gt;&gt; osman, mehmet = mehmet, osman<br \/>\nBu kodlarla Osman ve Mehmet\u2019in unvanlar\u0131n\u0131 birbiriyle takas etmi\u015ftik. \u0130\u015fte yukar\u0131da yapt\u0131\u011f\u0131m\u0131z \u015fey de bununla ayn\u0131d\u0131r. sys.stdout, f = f, sys.stdout dedi\u011fimizde f de\u011ferini sys.stdout\u2019a, sys.stdout\u2019un de\u011ferini ise f\u2019ye vermi\u015f oluyoruz. f, sys.stdout = sys.stdout, f dedi\u011fimizde ise, bu i\u015flemin tam tersini yaparak her \u015feyi eski haline getirmi\u015f oluyoruz.<\/p>\n<p>Python\u2019\u0131n bize sundu\u011fu bu kolayl\u0131ktan faydalanarak de\u011fi\u015fkenlerin de\u011ferini birbiriyle kolayca takas edebiliyoruz. E\u011fer b\u00f6yle bir kolayl\u0131k olmasayd\u0131 yukar\u0131daki kodlar\u0131 \u015f\u00f6yle yazabilirdik:<\/p>\n<p>&gt;&gt;&gt; import sys<br \/>\n&gt;&gt;&gt; f = open(&#8220;dosya.txt&#8221;, &#8220;w&#8221;)<br \/>\n&gt;&gt;&gt; \u00f6zg\u00fcn_stdout = sys.stdout<br \/>\n&gt;&gt;&gt; sys.stdout = f<br \/>\n&gt;&gt;&gt; print(&#8220;deneme&#8221;, flush=True)<br \/>\n&gt;&gt;&gt; sys.stdout = \u00f6zg\u00fcn_stdout<br \/>\n&gt;&gt;&gt; print(&#8220;deneme&#8221;)<\/p>\n<p>deneme<br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, sys.stdout\u2019un de\u011ferini kaybetmemek i\u00e7in, sys.stdout de\u011ferini f adl\u0131 dosyaya g\u00f6ndermeden \u00f6nce \u015fu kod yard\u0131m\u0131yla yedekliyoruz:<\/p>\n<p>&gt;&gt;&gt; \u00f6zg\u00fcn_stdout = sys.stdout<br \/>\nsys.stdout\u2019un \u00f6zg\u00fcn de\u011ferini \u00f6zg\u00fcn_stdout de\u011fi\u015fkenine atad\u0131\u011f\u0131m\u0131z i\u00e7in, bu de\u011fere sonradan tekrar ula\u015fabilece\u011fiz. Zaten yukar\u0131daki kodlardan da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, sys.stdout\u2019un \u00f6zg\u00fcn de\u011ferine d\u00f6nmek istedi\u011fimizde \u015fu kodu yazarak iste\u011fimizi ger\u00e7ekle\u015ftirebiliyoruz:<\/p>\n<p>&gt;&gt;&gt; sys.stdout = \u00f6zg\u00fcn_stdout<br \/>\nB\u00f6ylece stdout de\u011feri eski haline d\u00f6nm\u00fc\u015f oluyor ve bundan sonra yazd\u0131rd\u0131\u011f\u0131m\u0131z her \u015fey yeniden ekrana bas\u0131lmaya ba\u015fl\u0131yor.<\/p>\n<p>\u2026ve b\u00f6ylece uzun bir b\u00f6l\u00fcm\u00fc daha geride b\u0131rakt\u0131k. Bu b\u00f6l\u00fcmde hem print() fonksiyonunu b\u00fct\u00fcn ayr\u0131nt\u0131lar\u0131yla incelemi\u015f olduk, hem de Python programlama diline dair ba\u015fka \u00e7ok \u00f6nemli kavramlardan s\u00f6z ettik. Bu bak\u0131mdan bu b\u00f6l\u00fcm bize epey \u015fey \u00f6\u011fretti. Art\u0131k \u00f6\u011frendi\u011fimiz bu bilgileri de k\u00fcfemize koyarak ba\u015f\u0131m\u0131z dik bir \u015fekilde yola devam edebiliriz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>print() Fonksiyonu Ge\u00e7en b\u00f6l\u00fcmde bir yandan Python\u2019\u0131n etkile\u015fimli kabu\u011funu yak\u0131ndan tan\u0131y\u0131p bu vesileyle baz\u0131 \u00f6nemli fonksiyon ve ara\u00e7lar\u0131 \u00f6\u011frenirken, \u00f6b\u00fcr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1142,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[69,75],"class_list":["post-1139","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programlama","tag-python","tag-python-print"],"_links":{"self":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/posts\/1139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/comments?post=1139"}],"version-history":[{"count":0,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/posts\/1139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/media\/1142"}],"wp:attachment":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/media?parent=1139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/categories?post=1139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/tags?post=1139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}