Python’da __future__ modülü ne işe yarar?

__future__ modülü eski versiyonda yazılmış Python kodu içerisinde yeni versiyon özelliklerini kullanmanızı sağlayan bir modüldür. Yani mesela kullandığınız özelliğin yeni versiyonda başka bir işlevi olsun, __future__ modülünü kullanarak mevcut Python versiyonundaki özelliği değil de daha yeni versiyondaki özelliği kullanmasını söylersiniz.

Başka bir deyişle, __future__ modülü ile derleyiciye dersiniz ki; mevcut versiyondaki davranışları sergilemek yerine Python’ın standardı haline gelmiş ileri versiyondaki davranışları sergile.

Örnekler

Bölme işlemi (from __future__ import division)

Bölme işlemi sonucu Python 2.x versiyonlarında int dönüyor. Python 3.x versiyonlarında ise float dönüyor. Görelim:

Python 2.x

Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 9/4
2

Python 3.x

Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 9/4
2.25

Bu noktada varsayılan bölme işleminin Python 2.x içerisinde Python 3.x’deki davranması için from __future__ import division kodunu ekliyoruz:

Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 9/4
2
>>> from __future__ import division
>>> 9/4
2.25

Diğer bir örnek: print (from __future__ import print_function)

Herhalde Python 2.x ile 3.x geçişinde en yaygın karşılaşılan farklılıklardan birisi print olmuştur.

print Python 2.x’de sadece özel bir anahtar kelime iken Python 3.x’de fonksiyona dönüşüyor. Görelim:

Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print

>>> from __future__ import print_function
>>> print
<built-in function print>

Daha ne örnekler var?

__future__ modülü ile uygulayabileceğiniz tüm özellikleri aşağıdaki tabloda bulabilirsiniz. feature satırında geçen özellikler optional in satırında belirten Python sürümünde isteğe bağlı olarak geliyor. mandatory in satırında ise artık varsayılan özellik olarak geliyor. effect satırında ise bu özelliklerin “neden” değiştiği ile ilgili kapsamlıca bilgi bulabilirsiniz.

featureoptional inmandatory ineffect
nested_scopes2.1.0b12.2PEP 227Statically Nested Scopes
generators2.2.0a12.3PEP 255Simple Generators
division2.2.0a23.0PEP 238Changing the Division Operator
absolute_import2.5.0a13.0PEP 328Imports: Multi-Line and Absolute/Relative
with_statement2.5.0a12.6PEP 343The “with” Statement
print_function2.6.0a23.0PEP 3105Make print a function
unicode_literals2.6.0a23.0PEP 3112Bytes literals in Python 3000
generator_stop3.5.0b13.7PEP 479StopIteration handling inside generators
annotations3.7.0b14.0PEP 563Postponed evaluation of annotations

Bitirirken

__future__ modülünün en çok nerede işe yarayacağı ile ilgili benim aklıma gelen örnek senaryo şu: Python 2.x’de yazılmış bir koda ekleme yapmanız gerekiyor ve bu kodu gelecekte Python 3.x’e geçirmeyi planlıyorsanız. Bu durumda hazırdaki Python 2.x koduna yeni yapacağınız eklemeleri ileride tekrar Python 3.x’e çevirmekle uğraşmamak için __future__ modülü ile şimdiden Python 2.x içerisinde Python 3.x yazar gibi yazmaya başlayabiliyorsunuz.

Son

Stackoverflow yorumlarının bir tanesinde geleceğe dönüş filmine atıfta bulunulmuş. Back to the __future__ 🙂

Kaynaklar:

0 0 vote
Article Rating
Subscribe
Bildir
4 Yorum
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Görkem Irmak Sine
5 ay önce

Çok sade bir dille anlatmışsın teşekkürler.

Ekrem TIKAN
4 ay önce

Teşekkür ederiz,emeğine saglık

Hüseyin
2 ay önce

İşime yaradı teşekkürler 🙂

4
0
Would love your thoughts, please comment.x
()
x