1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-08-18 12:31:22 +02:00
This commit is contained in:
Eray Aydın
2015-03-26 15:36:05 +02:00
parent 4d74369df3
commit fde928afa6

View File

@@ -564,56 +564,54 @@ dir(math)
#################################################### ####################################################
## 7. Advanced ## 7. Gelişmiş
#################################################### ####################################################
# Generators help you make lazy code # Oluşturucular uzun uzun kod yazmamanızı sağlayacak ve yardımcı olacaktır
def double_numbers(iterable): def kare_sayilar(nesne):
for i in iterable: for i in nesne:
yield i + i yield i + i
# A generator creates values on the fly. # Bir oluşturucu(generator) değerleri anında oluşturur.
# Instead of generating and returning all values at once it creates one in each # Bir seferde tüm değerleri oluşturup göndermek yerine teker teker her oluşumdan
# iteration. This means values bigger than 15 wont be processed in # sonra geri döndürür. Bu demektir ki, kare_sayilar fonksiyonumuzda 15'ten büyük
# double_numbers. # değerler işlenmeyecektir.
# Note range is a generator too. Creating a list 1-900000000 would take lot of # Not: range() da bir oluşturucu(generator)dur. 1-900000000 arası bir liste yapmaya çalıştığınızda
# time to be made # çok fazla vakit alacaktır.
# We use a trailing underscore in variable names when we want to use a name that # Python tarafından belirlenen anahtar kelimelerden kaçınmak için basitçe alt çizgi(_) kullanılabilir.
# would normally collide with a python keyword
range_ = range(1, 900000000) range_ = range(1, 900000000)
# will double all numbers until a result >=30 found # kare_sayilar'dan dönen değer 30'a ulaştığında durduralım
for i in double_numbers(range_): for i in kare_sayilar(range_):
print(i) print(i)
if i >= 30: if i >= 30:
break break
# Decorators # Dekoratörler
# in this example beg wraps say # Bu örnekte,
# Beg will call say. If say_please is True then it will change the returned # Eğer lutfen_soyle True ise dönen değer değişecektir.
# message
from functools import wraps from functools import wraps
def beg(target_function): def yalvar(hedef_fonksiyon):
@wraps(target_function) @wraps(hedef_fonksiyon)
def wrapper(*args, **kwargs): def metot(*args, **kwargs):
msg, say_please = target_function(*args, **kwargs) msj, lutfen_soyle = hedef_fonksiyon(*args, **kwargs)
if say_please: if lutfen_soyle:
return "{} {}".format(msg, "Please! I am poor :(") return "{} {}".format(msj, "Lütfen! Artık dayanamıyorum :(")
return msg return msj
return wrapper return metot
@beg @yalvar
def say(say_please=False): def soyle(lutfen_soyle=False):
msg = "Can you buy me a beer?" msj = "Bana soda alır mısın?"
return msg, say_please return msj, lutfen_soyle
print(say()) # Can you buy me a beer? print(soyle()) # Bana soda alır mısın?
print(say(say_please=True)) # Can you buy me a beer? Please! I am poor :( print(soyle(lutfen_soyle=True)) # Ban soda alır mısın? Lutfen! Artık dayanamıyorum :(
``` ```
## Ready For More? ## Ready For More?