Python3 文法メモ

クロージャ

def closure(param):
    def inner():
        return "Hello %s" % param
    return inner

c1 = closure("MARIO")
print(c1()) # Hello MARIO
c2 = closure("LUIGI")
print(c2()) # Hello LUIGI

ラムダ

def hello(names, func):
    for name in names:
        func(name)

names = ["MARIO", "LUIGI", "DONKY"]

hello(names, lambda name: print(name+"!"))

ジェネレータ

def my_range(first=0, last=10, step=1):
    number = first
    while number < last:
        yield number
        number += step

ranger = my_range(1,5)
for i in ranger:
    print(i)

デコレータ

def document_it(func):
    def new_function(*args, **kwargs):
        print('Running function:', func.__name__)
        print('Positional arguments:',args)
        print('Keyword arguments:',kwargs)
        result = func(*args, **kwargs)
        print('Result:',result)
        return result
    return new_function

@document_it
def add_ints(a,b):
    return a+b

print(add_ints(3,5))

プロパティ

class Duck():
    def __init__(self,input_name):
        self.__name = input_name

    @property
    def name(self):
        print("inside the getter")
        return self.__name

    @name.setter
    def name(self, input_name):
        print("inside the setter")
        self.__name = input_name

f = Duck("Howard")
print(f.name)
f.name = "One"
print(f.__name) # ここでエラーを吐く

参考文献

入門 Python 3

入門 Python 3