{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# İç içe Fonksiyonlar ve Fonksiyon Parametreleri\n", "\n", "Bu bölümle birlikte decorator fonksiyonların mantığını anlamaya çalışacağız. Decoratorları daha iyi anlamak için fonksiyonlara biraz daha derinlemesine bakmaya çalışalım.\n", "\n", "### \\*args ve **kwargs\n", "\n", "Fonksiyonlara argüman göndermenin esnek bir şekilde yapıldığını biliyoruz. İsterseniz ilk olarak yıldızlı argümanları hatırlamaya çalışalım." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fonksiyon(*args): # İstediğimiz sayıda argüman gönderebiliyoruz.\n", " print(args)\n", " for i in args:\n", " print(i)\n", " " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 2, 3)\n", "1\n", "2\n", "3\n" ] } ], "source": [ "fonksiyon(1,2,3)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 2, 3, 4, 5)\n", "1\n", "2\n", "3\n", "4\n", "5\n" ] } ], "source": [ "fonksiyon(1,2,3,4,5)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fonksiyon(isim,*args): \n", " print(\"İsim:\",isim)\n", " for i in args:\n", " print(i)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "İsim: Murat\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n" ] } ], "source": [ "fonksiyon(\"Murat\",1,2,3,4,5,6,7,8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Şimdi de yeni öğreneceğimiz keyword argümanlara bakalım." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fonksiyon(**kwargs):\n", " print(kwargs)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'isim': 'Murat', 'soyisim': 'Coşkun', 'numara': 12345}\n" ] } ], "source": [ "fonksiyon(isim = \"Murat\", soyisim = \"Coşkun\", numara = 12345)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dikkat ederseniz 2 yıldız koyarak keyword argümanlar ile (anahtar kelimeli argümanlar) fonksiyonumuzu tanımladık ve argümanlara isim vererek fonksiyonumuzu çağırdığımızda isimleri anahtar kelime , argüman değerlerini değer olarak alarak fonksiyonumuz sözlük oluşturdu. İşte keyword argümanlar bu şekilde kullanılabiliyor. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fonksiyon(**kwargs):\n", " for i,j in kwargs.items():\n", " print(\"Argüman İsmi:\",i,\"Argüman Değeri:\",j)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Argüman İsmi: isim Argüman Değeri: Murat\n", "Argüman İsmi: soyisim Argüman Değeri: Coşkun\n", "Argüman İsmi: numara Argüman Değeri: 12345\n" ] } ], "source": [ "fonksiyon(isim = \"Murat\", soyisim = \"Coşkun\", numara = 12345)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Şimdi de \\*args ve \\**kwargs argümanlarını beraber kullanalım." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fonksiyon(*args,**kwargs):\n", " for i in args:\n", " print(\"Argümanlar:\",i)\n", " print(\"------------------------------\")\n", " for i ,j in kwargs.items():\n", " print(\"Argüman İsmi:\",i,\"Argüman Değeri:\",j)\n", " " ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Argümanlar: 1\n", "Argümanlar: 2\n", "Argümanlar: 3\n", "Argümanlar: 4\n", "Argümanlar: 5\n", "Argümanlar: 6\n", "Argümanlar: 7\n", "------------------------------\n", "Argüman İsmi: isim Argüman Değeri: Murat\n", "Argüman İsmi: soyisim Argüman Değeri: Coşkun\n", "Argüman İsmi: numara Argüman Değeri: 12345\n" ] } ], "source": [ "fonksiyon(1,2,3,4,5,6,7,isim = \"Murat\",soyisim = \"Coşkun\", numara = 12345)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### İç içe fonksiyonlar\n", "\n", "\n", "Pythonda fonksiyonlar da birer obje oldukları için hem bir tane değişkene atanabilirler, hem de başka bir fonksiyonun içinde tanımlanabilirler. Şimdi bunlara bakmaya başlayalım." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def selamla(isim):\n", " print(\"Selam\",isim)\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Selam Ayşe\n" ] } ], "source": [ "selamla(\"Ayşe\")" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Bir tane değişkene atıyoruz.\n", "\n", "merhaba = selamla" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merhaba # Obje tipi fonksiyon oldu." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "selamla # Obje tipi fonksiyon" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Selam Ayşe\n" ] } ], "source": [ "merhaba(\"Ayşe\") # Fonksiyon olduğu için artık bu isimle de kullanabilirim." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "del selamla # Selamla fonksiyonunu siliyorum." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'selamla' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mselamla\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mNameError\u001b[0m: name 'selamla' is not defined" ] } ], "source": [ "selamla" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Selam Kemal\n" ] } ], "source": [ "merhaba(\"Kemal\") # selamla objesi silinmesine rağmen merhaba objesi silinmedi." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Şimdi de isterseniz iç içe fonksiyon tanımlamayı öğrenelim." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fonksiyon():\n", " def fonksiyon2():\n", " print(\"Küçük fonksiyondan Merhaba\")\n", " print(\"Büyük fonksiyondan Merhaba\")\n", " fonksiyon2() # Tanımladığım fonksiyonu kullanabilirim." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Büyük fonksiyondan Merhaba\n", "Küçük fonksiyondan Merhaba\n" ] } ], "source": [ "fonksiyon()" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'fonksiyon2' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mfonksiyon2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# Lokal bir değişken olduğu için fonksiyon() çağrısından sonra yok oldu.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mNameError\u001b[0m: name 'fonksiyon2' is not defined" ] } ], "source": [ "fonksiyon2() # Lokal bir değişken olduğu için fonksiyon() çağrısından sonra yok oldu." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fonksiyon(*args): # args : (1,2,3,4,5,6)\n", " \n", " def topla(args): # (1,2,3,4,5,6)\n", " toplam = 0\n", " for i in args:\n", " toplam += i\n", " return toplam\n", " \n", " print(topla(args))" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "21\n" ] } ], "source": [ "fonksiyon(1,2,3,4,5,6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "İşte bu kadar ! Bir sonraki dersimizde fonksiyonlara devam edeceğiz." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }