From 550b9c9f2ebf8ead67eb723d3b4256064e284b82 Mon Sep 17 00:00:00 2001 From: charalambosp Date: Sun, 16 Feb 2014 18:36:09 +0000 Subject: [PATCH 1/2] generators & decorators --- python.html.markdown | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/python.html.markdown b/python.html.markdown index 941ba9f4..fe0ddc8c 100644 --- a/python.html.markdown +++ b/python.html.markdown @@ -473,6 +473,54 @@ import math dir(math) +#################################################### +## 6. Advanced +#################################################### + +# Generators help you make lazy code +def double_numbers(iterable): + for i in iterable: + yield i + i + +# generator creates the value on the fly +# instead of generating and returning all values at once it creates one in each iteration +# this means values bigger than 15 wont be processed in double_numbers +# note range is a generator too, creating a list 1-900000000 would take lot of time to be made +_range = range(1, 900000000) +# will double all numbers until a result >=30 found +for i in double_numbers(_range): + print(i) + if i >= 30: + break + + +# Decorators +# in this example beg wraps say +# Beg will call say. If say_please is True then it will change the returned message +from functools import wraps + + +def beg(_say): + @wraps(_say) + def wrapper(*args, **kwargs): + msg, say_please = _say(*args, **kwargs) + if say_please: + return "{} {}".format(msg, "Please! I am poor :(") + return msg + + return wrapper + + +@beg +def say(say_please=False): + msg = "Can you buy me a beer?" + return msg, say_please + + +print(say()) # Can you buy me a beer? +print(say(say_please=True)) # Can you buy me a beer? Please! I am poor :( + + ``` ## Ready For More? From 3233394cd5079893acb725027f8d0a82e28c16cc Mon Sep 17 00:00:00 2001 From: charalambosp Date: Sun, 16 Feb 2014 18:37:02 +0000 Subject: [PATCH 2/2] fix section number --- python.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python.html.markdown b/python.html.markdown index fe0ddc8c..15f27d37 100644 --- a/python.html.markdown +++ b/python.html.markdown @@ -474,7 +474,7 @@ dir(math) #################################################### -## 6. Advanced +## 7. Advanced #################################################### # Generators help you make lazy code