Skip to content

Commit 5a1a2c9

Browse files
committed
Fonksiyonlara yeni örnekler eklendi. İsimsiz fonksiyonlar eklendi.
1 parent e63900b commit 5a1a2c9

File tree

1 file changed

+336
-1
lines changed

1 file changed

+336
-1
lines changed

Fonksiyonlar.ipynb

+336-1
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,341 @@
449449
"y = cos(2*pi*t)\n",
450450
"plot(x, y, linewidth=2, color=\"red\", linestyle=\"dashed\")"
451451
]
452+
},
453+
{
454+
"cell_type": "markdown",
455+
"metadata": {},
456+
"source": [
457+
"Basit birkaç sayısal örnek yapalım.\n",
458+
"Örneğin, bir dikdörtgenin iki kenarını parametre olarak alıp, alanını veren bir fonksiyon yazalım. İkinci kenar uzunluğunun varsayılan değeri 1 olsun."
459+
]
460+
},
461+
{
462+
"cell_type": "code",
463+
"execution_count": 4,
464+
"metadata": {
465+
"collapsed": true
466+
},
467+
"outputs": [],
468+
"source": [
469+
"def dikd_alan(en, boy=1):\n",
470+
" return en*boy"
471+
]
472+
},
473+
{
474+
"cell_type": "code",
475+
"execution_count": 5,
476+
"metadata": {
477+
"collapsed": false
478+
},
479+
"outputs": [
480+
{
481+
"name": "stdout",
482+
"output_type": "stream",
483+
"text": [
484+
"15\n",
485+
"3\n",
486+
"10\n"
487+
]
488+
}
489+
],
490+
"source": [
491+
"print dikd_alan(3,5)\n",
492+
"print dikd_alan(3)\n",
493+
"print dikd_alan(boy=2, en=5)"
494+
]
495+
},
496+
{
497+
"cell_type": "markdown",
498+
"metadata": {},
499+
"source": [
500+
"Son örnekte, parametrelerin isimlerini kullandığımız için, fonksiyonda tanımlanmış sıralarını kullanmak zorunda kalmadık (yani önce en, sonra boy vermek zorunda değiliz)."
501+
]
502+
},
503+
{
504+
"cell_type": "markdown",
505+
"metadata": {},
506+
"source": [
507+
"Daha doğal bir varsayım olarak diyelim ki, sadece `en` verildiğinde `boy`'un da aynı değere sahip olmasını istiyoruz. Yani tek bir kenar ölçüsü verildiğinde dikdörtgenimizin kare olduğunu varsayıyoruz. Bunu yapmanın doğrudan bir yolu yok, ama şöyle bir numara yapabiliriz: `boy` için varsayılan değeri `None` olarak veririz, ve bu değer değiştirilmediyse `en`'e eşitleriz."
508+
]
509+
},
510+
{
511+
"cell_type": "code",
512+
"execution_count": 7,
513+
"metadata": {
514+
"collapsed": false
515+
},
516+
"outputs": [],
517+
"source": [
518+
"def dikd_alan(en, boy=None):\n",
519+
" if boy == None:\n",
520+
" boy = en\n",
521+
" return en*boy"
522+
]
523+
},
524+
{
525+
"cell_type": "code",
526+
"execution_count": 8,
527+
"metadata": {
528+
"collapsed": false
529+
},
530+
"outputs": [
531+
{
532+
"name": "stdout",
533+
"output_type": "stream",
534+
"text": [
535+
"15\n",
536+
"9\n"
537+
]
538+
}
539+
],
540+
"source": [
541+
"print dikd_alan(3,5)\n",
542+
"print dikd_alan(3)"
543+
]
544+
},
545+
{
546+
"cell_type": "markdown",
547+
"metadata": {},
548+
"source": [
549+
"1'den başlayarak, verilen bir sayıya kadar tamsayıları toplayan bir fonksiyon:"
550+
]
551+
},
552+
{
553+
"cell_type": "code",
554+
"execution_count": 32,
555+
"metadata": {
556+
"collapsed": true
557+
},
558+
"outputs": [],
559+
"source": [
560+
"def toplam(N):\n",
561+
" t = 0\n",
562+
" i = 1\n",
563+
" while i<=N:\n",
564+
" t += i\n",
565+
" i += 1\n",
566+
" return t"
567+
]
568+
},
569+
{
570+
"cell_type": "code",
571+
"execution_count": 33,
572+
"metadata": {
573+
"collapsed": false
574+
},
575+
"outputs": [
576+
{
577+
"name": "stdout",
578+
"output_type": "stream",
579+
"text": [
580+
"5050\n"
581+
]
582+
}
583+
],
584+
"source": [
585+
"print toplam(100)"
586+
]
587+
},
588+
{
589+
"cell_type": "markdown",
590+
"metadata": {},
591+
"source": [
592+
"Bunu genelleştirelim; `ilk`'den `N`'ye kadar `adim` adımlarla ilerleyerek elde edilen aritmetik dizinin toplamını veren bir fonksiyon yazalım. Varsayılan değerler `ilk` için 0 ve `adim` için 1 olsun."
593+
]
594+
},
595+
{
596+
"cell_type": "code",
597+
"execution_count": 18,
598+
"metadata": {
599+
"collapsed": true
600+
},
601+
"outputs": [],
602+
"source": [
603+
"def toplam(N, ilk=0, adim=1):\n",
604+
" t = 0\n",
605+
" i = ilk\n",
606+
" while i <= N:\n",
607+
" t += i\n",
608+
" i += adim\n",
609+
" return t"
610+
]
611+
},
612+
{
613+
"cell_type": "code",
614+
"execution_count": null,
615+
"metadata": {
616+
"collapsed": false
617+
},
618+
"outputs": [],
619+
"source": []
620+
},
621+
{
622+
"cell_type": "code",
623+
"execution_count": 19,
624+
"metadata": {
625+
"collapsed": false
626+
},
627+
"outputs": [
628+
{
629+
"name": "stdout",
630+
"output_type": "stream",
631+
"text": [
632+
"5050\n",
633+
"5005\n",
634+
"1050\n"
635+
]
636+
}
637+
],
638+
"source": [
639+
"print toplam(100) # 0 + 1 + 2 + ... + 100\n",
640+
"print toplam(100,10) # 10 + 11 + ... + 100\n",
641+
"print toplam(100, adim=5) # 5 + 10 + ... + 100"
642+
]
643+
},
644+
{
645+
"cell_type": "markdown",
646+
"metadata": {},
647+
"source": [
648+
"Madem genelliyoruz, aritmetik dizilerin ötesine geçelim. Sözgelişi, genel bir _f_ fonksiyonu için $\\sum_{i=0}^{N} f(i)$ toplamını hesaplayacak bir fonksiyon yazalım.\n",
649+
"\n",
650+
"Burada, `toplam` fonksiyonuna başka bir fonksiyonu parametre olarak vermeliyiz. Python'da her şey gibi fonksiyonlar da bir nesne olduğu için, bunu basit şekilde halledebiliriz."
651+
]
652+
},
653+
{
654+
"cell_type": "code",
655+
"execution_count": 20,
656+
"metadata": {
657+
"collapsed": true
658+
},
659+
"outputs": [],
660+
"source": [
661+
"def toplam(N, f):\n",
662+
" t = 0\n",
663+
" i = 0\n",
664+
" while i<=N:\n",
665+
" t += f(i)\n",
666+
" i += 1\n",
667+
" return t"
668+
]
669+
},
670+
{
671+
"cell_type": "markdown",
672+
"metadata": {},
673+
"source": [
674+
"Tabii bu toplamı yapabilmek için sayısal değer veren bir fonksiyon ismini kullanmalıyız. Sözgelişi, `math` modülünden karekök alma fonksiyonunu alalım."
675+
]
676+
},
677+
{
678+
"cell_type": "code",
679+
"execution_count": 21,
680+
"metadata": {
681+
"collapsed": false
682+
},
683+
"outputs": [
684+
{
685+
"name": "stdout",
686+
"output_type": "stream",
687+
"text": [
688+
"22.4682781862\n"
689+
]
690+
}
691+
],
692+
"source": [
693+
"from math import sqrt\n",
694+
"print toplam(10, sqrt) # sqrt(0) + sqrt(1) + ... + sqrt(10)"
695+
]
696+
},
697+
{
698+
"cell_type": "markdown",
699+
"metadata": {},
700+
"source": [
701+
"Veya, kendimiz bir fonksiyon tanımlayalım."
702+
]
703+
},
704+
{
705+
"cell_type": "code",
706+
"execution_count": 22,
707+
"metadata": {
708+
"collapsed": false
709+
},
710+
"outputs": [
711+
{
712+
"name": "stdout",
713+
"output_type": "stream",
714+
"text": [
715+
"2.18087457778\n"
716+
]
717+
}
718+
],
719+
"source": [
720+
"def f(x):\n",
721+
" return 1.0/(2*x+1)\n",
722+
"print toplam(10, f) # 1/3 + 1/5 + ... + 1/21"
723+
]
724+
},
725+
{
726+
"cell_type": "markdown",
727+
"metadata": {},
728+
"source": [
729+
"Bu ve benzeri şekilde, bir fonksiyon nesnesi beklenen durumlarda başka bir alternatifimiz _isimsiz fonksiyonlardır_. Yukarıdaki örneği isimsiz fonksiyonlarla şöyle yazarız."
730+
]
731+
},
732+
{
733+
"cell_type": "code",
734+
"execution_count": 24,
735+
"metadata": {
736+
"collapsed": false
737+
},
738+
"outputs": [
739+
{
740+
"name": "stdout",
741+
"output_type": "stream",
742+
"text": [
743+
"2.18087457778\n"
744+
]
745+
}
746+
],
747+
"source": [
748+
"print toplam(10, lambda x: 1.0/(2*x+1))"
749+
]
750+
},
751+
{
752+
"cell_type": "markdown",
753+
"metadata": {},
754+
"source": [
755+
"Buradaki `lambda`, isimsiz fonksiyon yaratma komutudur. Ardından parametre listesi yazılır, iki nokta üstüste konur, ve geri verilecek değer yazılır. İstenirse, aşağıdaki gibi, isimlere atanıp tekrar kullanılabilirler de."
756+
]
757+
},
758+
{
759+
"cell_type": "code",
760+
"execution_count": 29,
761+
"metadata": {
762+
"collapsed": false
763+
},
764+
"outputs": [
765+
{
766+
"name": "stdout",
767+
"output_type": "stream",
768+
"text": [
769+
"0.75\n",
770+
"1.5\n"
771+
]
772+
}
773+
],
774+
"source": [
775+
"f = lambda x: x/(x+1.0)\n",
776+
"g = lambda x,y: 1.0*(x+y)/(x*y)\n",
777+
"print f(3)\n",
778+
"print g(1,2)"
779+
]
780+
},
781+
{
782+
"cell_type": "markdown",
783+
"metadata": {},
784+
"source": [
785+
"İsimsiz fonksiyonlar, tek seferlik \"kullan at\" fonksiyon oluşturmaya yararlar. Hesaplamalı bilimde integral almak, kök bulmak, optimizasyon gibi, fonksiyonlar alarak işlemler yapan fonksiyonlarda kullanılabilirler."
786+
]
452787
}
453788
],
454789
"metadata": {
@@ -467,7 +802,7 @@
467802
"name": "python",
468803
"nbconvert_exporter": "python",
469804
"pygments_lexer": "ipython2",
470-
"version": "2.7.9"
805+
"version": "2.7.6"
471806
}
472807
},
473808
"nbformat": 4,

0 commit comments

Comments
 (0)