パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Python3.7.2の予約語を全部使ってみる1(def in yield nonlocal try except finally for raise )

2018-12-31 | python入門(すぐさまマスター)
Pyrhon3.7.2の予約語
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield

参考文献の2.3.1. Keywordsより

<参考文献>
2. Lexical analysis

個人的にこの中でよく使うもの、たまに使うもの、ほぼ使わないもの、使った記憶のないものに分けてみると

よく使うもの
else import pass break in return and for def while if or

たまにつかうもの
False True class continue assert del global not elif

ほぼ使わないもの
None except is lambda try as yield finally

使った記憶のないもの
await raise nonlocal async with


printが入っていないのが意外。変数に代入できない。defで再定義できないものが対象なのかな。


最初はdef yield for in を使ってみます。


def test(a,b):
    yield "a+b",a+b
    yield "a-b",a-b
    yield "a*b",a*b
    yield "a/b",a/b
    
for x in test(100,20):
    print(x)


実行結果
('a+b', 120)
('a-b', 80)
('a*b', 2000)
('a/b', 5.0)

処理の途中で一時中断して値を返すことができるようです。テストとかで途中経過を確認するために使えるかも。


def test(a,b):
    print("0")
    yield "a+b",a+b
    print("1")
    yield "a-b",a-b
    yield "a*b",a*b
    yield "a/b",a/b

test(100,20)
test(100,20)
print("2")


これだと"2"しか表示されません。0は表示してもよさそうなのですが。



次にnonlocal、関数内関数でglobal変数のように使いたいというものでしょうか。

x=5
def test(x):
    def double():
        nonlocal x
        x*=2
    double()
    print(x)
test(x)
print(x)


実行結果
10
5

次にraise、例外エラーを発生させます。ついでに例外エラーをコントロールするtry except finallyも!

def test(s):
    raise NameError(s)

try:
    test("hi error")
except:
    print("block")
finally:
    print("finish")

test("hello error")   


実行結果
block
finish
NameError: hello error
at Answer.py. in test on line 2
at Answer.py. in <module> on line 11

(エラーは実行環境によって多少変わります)


わかっているとおもっているものを一行で説明(意訳)してみます。

else でなければ

import 本棚もってきて

pass 今は考えたくない

break 以上撤収

in これだけ

return よしとして帰ろう

and と

for やってくれ

def ここにまとめておく随時使って

while やってくれ

if もし

or か



False ちがう

True そうそう

class いまから編成を発表する

continue 次いってみよう(つづけるといっておいて一回休みのようなもの)

assert 追加オーダー

del 取り消し

global 周知事項

not じゃなくてー

elif じゃなかったらもし



None いないよ

except できなかったらこっち

finally 例外だろうが、なかろうが実行

is です

lambda ま、こんな感じで

try まあやってみ

as 略して

yield ちょっとたちどまってみよう


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。