11B: Değişken Kapsamı - Computer Science Circles
Python 1. ihtimale göre davranacaktır. Çünkü, bir fonksiyon çağrıldığı zaman, fonksiyonun dışında tanımlanmış hiçbir değişken etkilenmez ...
11B: Değişken Kapsamı \| Computer Science Circles

\[Python eBook\]

[![](https://cscircles.cemc.uwaterloo.ca/wp-content/plugins/pybox/files/wordmark-uw.gif)](http://www.uwaterloo.ca)[![](https://cscircles.cemc.uwaterloo.ca/wp-content/plugins/pybox/files/wordmark-cemc.png)](http://cemc.uwaterloo.ca)

[![](https://cscircles.cemc.uwaterloo.ca/wp-content/themes/pybox2011childTheme/images/header.jpg)](https://cscircles.cemc.uwaterloo.ca/ack/)

### Ana menü

[Birincil içeriğe geç](#content "Birincil içeriğe geç")

[İkincil içeriğe geç](#secondary "İkincil içeriğe geç")

- [\[TR\] Using This Website](https://cscircles.cemc.uwaterloo.ca/tr-using-this-website/)
- [\[TR\] Console](https://cscircles.cemc.uwaterloo.ca/tr-console/)
- [\[TR\] Visualize](https://cscircles.cemc.uwaterloo.ca/visualize)
- [\[TR\] Run Python At Home](https://cscircles.cemc.uwaterloo.ca/tr-run-python-at-home/)
- [\[TR\] Resources](https://cscircles.cemc.uwaterloo.ca/tr-resources/)
- [\[TR\] Cheatsheet](https://cscircles.cemc.uwaterloo.ca/tr-cheatsheet/)
- [\[TR\] Contact](https://cscircles.cemc.uwaterloo.ca/tr-contact/)
- [\[TR\] Thanks](https://cscircles.cemc.uwaterloo.ca/tr-thanks/)
- [\[TR\] My Progress](https://cscircles.cemc.uwaterloo.ca/tr-my-progress/)
- [0: Merhaba](https://cscircles.cemc.uwaterloo.ca/tr/)
- [1: Değişkenler](https://cscircles.cemc.uwaterloo.ca/1-tr-degiskenler/)
- [2: Fonksiyonlar](https://cscircles.cemc.uwaterloo.ca/2-tr-functions/)
  - [2X: Alıştırmalar](https://cscircles.cemc.uwaterloo.ca/2x-tr-extra-practice/)
- [3: Yorumlar ve Metinler](https://cscircles.cemc.uwaterloo.ca/3-tr-comments-and-quotes/)
- [4: Tipler](https://cscircles.cemc.uwaterloo.ca/4-tr-types/)
- [5: Input](https://cscircles.cemc.uwaterloo.ca/5-tr-input/)
- [6: If/Eğer](https://cscircles.cemc.uwaterloo.ca/6-tr-if/)
  - [6D: Tasarım, Hata Ayıklama ve Kurabiyeler](https://cscircles.cemc.uwaterloo.ca/6d-tr-design-debugging-and-donuts/)
- [7: Zengin Editör](https://cscircles.cemc.uwaterloo.ca/7-tr-rich-editor/)
  - [7A: Stringler](https://cscircles.cemc.uwaterloo.ca/7a-tr-strings/)
  - [7B: Matematik](https://cscircles.cemc.uwaterloo.ca/7b-tr-math/)
  - [7C: Döngüler](https://cscircles.cemc.uwaterloo.ca/7c-tr-loops/)
- [8: Remix](https://cscircles.cemc.uwaterloo.ca/8-tr-remix/)
- [9: Else, And, Or, Not](https://cscircles.cemc.uwaterloo.ca/9-tr-else-and-or-not/)
- [10: def](https://cscircles.cemc.uwaterloo.ca/10-tr-def/)
- 11
  - [11A: Küçük Harf](https://cscircles.cemc.uwaterloo.ca/11a-tr-lower-case/)
  - [11B: Değişken Kapsamı](https://cscircles.cemc.uwaterloo.ca/11b-tr-variable-scope/)
  - [11C: Geometri](https://cscircles.cemc.uwaterloo.ca/11c-tr-geometry/)
- [12: İpuçları](https://cscircles.cemc.uwaterloo.ca/12-tr-tips/)
- [13: Listeler (Array)](https://cscircles.cemc.uwaterloo.ca/13-tr-lists-array/)
- [14: Metotlar](https://cscircles.cemc.uwaterloo.ca/14-tr-methods/)
- 15
  - [15A: Termination Determination](https://cscircles.cemc.uwaterloo.ca/15a-tr-termination-determination/)
  - [15B: Python Pushups](https://cscircles.cemc.uwaterloo.ca/15b-tr-python-pushups/)
  - [15C: \[TR Caesar's JVTIVK JRCRU IVTZGV\]](https://cscircles.cemc.uwaterloo.ca/15c-tr-caesars-jvtivk-jrcru-ivtzgv/)
- [16: Recursion](https://cscircles.cemc.uwaterloo.ca/16-tr-recursion/)
- [17: Is](https://cscircles.cemc.uwaterloo.ca/17-tr-is/)
- [18: Verimlilik](https://cscircles.cemc.uwaterloo.ca/18-tr-efficiency/)
- [Search Results](https://cscircles.cemc.uwaterloo.ca/search_gcse/)

# 11B: Değişken Kapsamı

_11\. derste bulunan A, B, C bölümlerini istediğiniz sırayla tamamlayabilirsiniz._

Bu derste değişken kapsamı olarak adlandırılan bir kavramı ele alacağız. Ana fikir, iki farklı değişkene farklı kapsamlarda yer aldıkları her durumda aynı ismin verilebilmesidir. Bu, özellikle de geniş çaplı programları yazmayı ve düzenlemeyi kolaylaştırır. Ayrıca bu kavrama, daha ileride göreceğimiz yineleme konusunda ihtiyacımız olacak.

## Değişken Kapsamına Bir Örnek

Bu örnekte kullanacağımız programın bir bölümü şöyle:

```
def kare(x):
   değer = x * x
   return değer
```

Bu, `x`, sayısının karesini hesaplayan bir fonksiyon, yani `kare(5)` return sonucu `25` olacak. Şimdi diyelim,  `kare` fonksiyonunu, programın `değer`  adlı değişkeni başka bir amaçla kullandığı bir bölümünde tekrar çağırdık:

```
# Programın ana gövdesi burada başlıyor
değer = 17
beşinKaresi = kare(5)
print(beşinKaresi, değer)
```

Soru şu, program çıktı olarak ne yazdıracak? İki ihtimal var, eğer Python'un nasıl çalıştığını bilmiyorsak:

1. Birinci ihtimal, Python iki `değer` değişkeninin bir şekilde ayrı tutulması gerektiğini anlayacak. Böylece `kare` 25 sonucunu verirken, `değer` değişkeni ana gövdede 17 olduğu gibi kalacak, ve program `25 ` `17` sonucunu verecek.
2. Diğer ihtimal de, `kare` fonksiyonu işleme konduğunda  `değer` değişkeninin mevcut karşılığı yerine 25 getirilecek ve sonuç olarak da program `25 ` `25` çıktısını verecek.

Bakalım gerçekte ne olacak!

Python 1. ihtimale göre davranacaktır. Çünkü, _bir fonksiyon çağrıldığı zaman, fonksiyonun dışında tanımlanmış hiçbir değişken etkilenmez_. Değişkenlere atanmış değerler sadece "yerel" işlemleri, yani fonksiyonun "içindeki" işlemleri etkiler. Python ve diğer çoğu programlama dillerinde bunu yapabilmemizin sebebi; bu şekilde içinde pek çok fonksiyon bulunan çok uzun programları daha basit olarak yazabiliriz. Yeni bir fonksiyon tanımladığımızda, fonksiyonun içinde herhangi bir değişken adını ( `result,` `temp` ve `i` gibi son derece genel kelimeler de dâhil) kullanmaya her zaman izin verilir, isterse bu değişkenler programın başka yerlerinde, hatta başka fonksiyonların içinde defalarca kullanılmış olsun.

Bunu detaylı olarak görmek için, görüntüleyicide 8 adımın 6.sına bakabilirsiniz. Burada `değer` adıyla tanımlanmış iki farklı değişken göreceksiniz; bir tanesi `kare` fonksiyonunun içinde diğeri de dışarıda ("global" kısımda).

![](https://cscircles.cemc.uwaterloo.ca/wp-content/plugins/pybox/files/icon.png)

Multiple Choice Exercise: İç ve Dış

Bu program hangi çıktıyı verir?

```
x = "dış"
def xDeğiş(değer):
   x = değer
xDeğiş("iç")
print(x)
```

Your choice: Select oneiçBurada bir hata verir.dış

Doğru! `x = değer` ifadesi sadece `x` değişkeninin yerel versiyonudur ve sadece fonksiyonun içinde geçerlidir. `x` değişkeninin global versiyonu değişmez. (Yani, `xDeğiş` fonksiyonunun hiçbir etkisi olmayacaktır.)

Kapsama ( _scope_) benzeyen başka bir kavram da _isim alanı_ dır ( _namespace_); isim alanı paketin kapsamı gibidir. Diyelim bir yerde `x`  değişkenini kullanan bir paket ithal ( `import`) ederseniz ( `math` matematik gibi), buradaki `x`  hiçbir şekilde programın diğer yerlerindeki `x`  değişkeni ile karışmaz, çünkü farklı isim alanlarında yer almaktadırlar.

## Kapsama Kuralları: Dışarı Yolla

Bazı durumlarda lokal ve global kapsamdaki değişkenleri birlikte kullanmak isteyebiliriz. Yaygın bir örnek olarak, programın ilk kısmında oluşturduğunuz genel bazı değişkenlerin fonksiyonunuzun içinde de okunmasını istersiniz.

Example

Global değişkeni fonksiyonun içinde okumak

Burada, yerel kapsamda `neliPizza` diye bir değişkenimiz yok, _ama bu bir hataya yol açmıyor_. Python, değişkenleri ele alırken, eğer bir değişken, kendisine ihtiyaç duyulan lokal kapsamda yer almıyorsa, onu global kapsamda arar. Bizim örneğimizde `neliPizza` değişkeni global kapsamda var. (Bir fonksiyon gövdesinin başka bir fonksiyon gövdesini çağırdığı daha genel bir durumda, bu kez üç kapsam elde ederiz; Python daima önce "en yerel" olanı denetler ve değişkeni bulana kadar adım adım kapsamları tarar.)

![](https://cscircles.cemc.uwaterloo.ca/wp-content/plugins/pybox/files/warning.png) Yukarıdaki örneklerin ikisi, `pizzaSiparişi` ve `xDeğiş`, fonksiyonları sentaks olarak aynıdır. Pekiyi, Python `xDeğiş` fonksiyonunda yeni bir lokal değişken olarak `x` değişkenini yaratırken, yeni bir `neliPizza` değişkenini `pizzaSiparişi` fonksiyonu için neden oluşturmadı? Python'un bu konudaki kuralı şöyledir: Eğer değişkeni sadece okuyorsanız, yeni lokal değişken yaratılmaz; ama eğer değişkeni en az bir kez de olsa yazdıysanız, değişken tüm fonksiyon gövdesi boyunca lokal kapsamda değerlendirilir. (Bu durum [`UnboundLocalError`](https://cscircles.cemc.uwaterloo.ca/tr-console/?consolecode=x%20%3D%201%0Adef%20f%28%29%3A%0A%20%20%20print%28x%29%0A%20%20%20x%20%3D%202%0Af%28%29) hatasının en yaygın sebebidir: Python resmi sayfalarında yer alan şu iki soruya göz atın \[ [1](http://docs.python.org/py3k/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value), [2](http://docs.python.org/py3k/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python)\].)

Fonksiyon argümanları _her zaman_ lokal değişken olarak kabul edilir. Buradaki kırık program parçasından görebilirsiniz ( `g` değişkenini `0` olarak resetlemeye çalışıyor ama işe yaramıyor).

## `global` Değişiklikler

Diğer pek çok şey gibi, yukarıda anlatılan normal akış tüm durumların %99'u için geçerlidir, ama kalan %1'lik durumlar için bir fonksiyon içine yerleştirdiğiniz global bir değişkenin yerine başka bir isim seçmeniz gerekebilir. Python'da bunu `global` bir ifade kullanarak yapabilirsiniz.

Yukarıda geçen `xDeğiş` örneğini burada farklı bir şekilde yazdık; değişkeni fonksiyon içinde global olarak ilan etmek, değişkenin global değerini fonksiyonun içinden değiştirmemize izin verir.

Bir fonksiyonun içerisinde global kapsamda tanımlanmış bir değişkene bir değer atadığımızda; global değişken güncellenmiş olmaz, sadece lokal kapsamda aynı isimle yeni bir değişken yaratılmış olur. Eğer global kapsamlı değişkenin değerini fonkisyon içinde güncellemek isterseniz, fonksiyonun içerisinde "global <değişken adı>" ifadesini kullanmanız gerekir. Böylece Python, değişkenin değerinde yaptığımız değişikliğin global kapsamdaki değişken için de geçerli olacağını anlar. Dersimizi bu bilgi ile bitiriyoruz!

[11A: Küçük Harf](https://cscircles.cemc.uwaterloo.ca/11a-tr-lower-case/ "11A: Küçük Harf")11B: Değişken Kapsamı [Next 12: İpuçları](https://cscircles.cemc.uwaterloo.ca/12-tr-tips/ "12: İpuçları") [13: Listeler (Array)](https://cscircles.cemc.uwaterloo.ca/13-tr-lists-array/ "13: Listeler (Array)")

[![](/wp-content/plugins/pybox/files/cc.png)\
2010–2024.](http://cemc.uwaterloo.ca/copyright.html) Computer Science Circles is a free service of the [Centre for Education in Mathematics and Computing](http://www.cemc.uwaterloo.ca/) at the [University of Waterloo](http://www.uwaterloo.ca).

Total number of exercises completed by all users: **3515103**

CEMC \|
University of Waterloo, MC 5104 \|
200 University Avenue West \|
Waterloo, Ontario, Canada N2L 3G1 \|
Phone: 519 888 4808 \|
[contact us](https://cscircles.cemc.uwaterloo.ca/tr-contact/)

[en](https://cscircles.cemc.uwaterloo.ca/11b-how-functions-work/)
[fr](https://cscircles.cemc.uwaterloo.ca/11b-fr/)
[de](https://cscircles.cemc.uwaterloo.ca/11b-de/)
[nl](https://cscircles.cemc.uwaterloo.ca/11b-variable-scope-nl/)
[lt](https://cscircles.cemc.uwaterloo.ca/11b-kintamuju-galiojimo-sritis/)
[zh](https://cscircles.cemc.uwaterloo.ca/zh-11b/)

[Araç çubuğuna atla](#wp-toolbar)

- [Computer Science Circles](https://cscircles.cemc.uwaterloo.ca/tr/)

- [Create free account / login\
\
to save your progress](https://cscircles.cemc.uwaterloo.ca/wp-login.php?redirect_to=%2F11b-tr-variable-scope%2F)
- Ara

- ![](https://cscircles.cemc.uwaterloo.ca/wp-content/plugins/pybox/files/up.png)