【Python】0から10までの偶数を出力するコード

f:id:hira98:20190630150507p:plain

【結論】

  • 誰が書いても同じ書き方になることを目指すPythonですら、色々な書き方がある。

【目次】

はじめに

「英語みたいに自由に書けるプログラム言語を目指しているRubyと違って、Pythonは誰が書いても同じ書き方になるプログラミング言語を目指しているんだよ」と、google先生に教えてもらいました。

しかし、そんなPythonですら色々な書き方ができます。

その一端を垣間見るために、0から10の偶数を出力する簡単なプログラムをいろんな方法で書いてみました。

例1:while文とif文を使う

N = 10
i = 0
while(i<=N):
    if(i%2 == 0):
        print(i)
    i += 1

例2:for文とif文を使う

N = 10
for i in range(0, N+1):
    if(i%2 == 0):
        print(i)

例3:for文だけを使う

N = 10
for i in range(0, N+1, 2):
    print(i)

例4:for文を1行で書く

N = 10
print(*[i for i in range(0, N+1, 2) if i%2 == 0], sep="\n")

例5:for文とif文を1行で書く

N = 10
print(*[i for i in range(0, N+1, 2) if i%2 == 0], sep="\n")

例6:filterを使う

N = 10
def check(n):
    return (n%2 == 0)
print(*filter(check, [i for i in range(N+1)]), sep="\n")

例7:filterとlambdaを使う

N = 10
print(*filter(lambda n:n%2==0, [i for i in range(N+1)]), sep="\n")

例8:yield文を使う

def even(n):
    i = 0
    while(i <= n):
        yield i
        i += 2

N = 10
print(*[i for i in even(N)], sep="\n")

例9:yield文をclassに置き換える

class even(object):
    def __init__(self, max_num):
        self._max_num = max_num
        self._i = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self._i > self._max_num:
            raise StopIteration()
        value = self._i
        self._i += 2
        return value

N = 10
print(*[i for i in even(N)], sep="\n")

さいごに

filterlambdayieldを使った例をなんとかひねり出せた自分を褒め称えたい🎉

しかし、例9に関しては何を書いてるか良く分かっておらず、これで本当に動くの???と思いながら実装して、動いた時はびっくりしました😯

…とか言っている時点で、Pythonエンジニアとしてはまだまだな自覚はあります🤮