Академический Документы
Профессиональный Документы
Культура Документы
Glib Ivashkevych
junior researcher, NSC KIPT
is equivalent to:
newlist = [somefunc(elem) for elem in oldlist]
is equivalent to:
zlist = [func(x,y) for x in xlist for y in ylist]
is equivalent to:
zlist = [f(x,y) for x in xlist for y in ylist if cond(x,y)]
Generators rationale
for elem in somelist: do_something(elem)
A lot better now. Generators know how to get next element (some_generator.next())
is equivalent to:
sgen = (f(i) for i in xrange(huge_number))
uses
LstClass.__iter__(lst) obj = SomeClass(args)
uses
SomeClass.__new__(SomeClass, args) SomeClass.__init__(obj, args)
and
Decorators rationale
Add functionality without changing the code
Decorators rationale
def wrapper(f): def inner(*args): print Gonna call %s % f.func_name f(*args) return inner def func(*args): do_something func = wrapper(func) #additional functionality
Decorators rationale
def wrapper(f): def inner(*args): print Gonna call %s % f.func_name f(*args) return inner @wrapper def func(*args): do_something
Decorators rationale
And now magic happens: wrapper can be used to decorate any function. Code reuse, good design - PROFIT! ... @wrapper def f1(*args): do_something @wrapper def f2(*args): do_something_else ...
Decorators parametrized
What if your decorator depends on some value? Thats ok.
def dec(a): def wrapper(f): This is actual decorator def inner(*args): print Func is %s, param is %s % (f.func_name,str(a)) f(*args) return inner return wrapper @dec(Some string parameter) def func(*args): ...
Cool. Really.
Metaprogramming rationale
class IsothermalIdealGas(object): pressure = 1. temp = 1. volume = 1. quant = 1.
Developer of IsothermalIdealGas never heard about equation of state. Lets patch it.
for block
{% for item in iterable %} ... {% endfor %}
if block
{% if var%} ... {% endif %}
Ok, now we can generate code at runtime. Usually, for C/CUDA code.
Metaprogramming warning Never, evertrust other peoples data when using it to generate executable code. Always assume the worst. They all want to crash your code. Always.
(google it, yeah. something like python eval dangerous)
Python
With great power comes great responsibility.
- Uncle Ben from SpiderMan or, for those who prefer classic:
Questions?