キーワードとは、Pythonで予約されている単語です。 キーワードを変数名、関数名、その他の識別子として使用することはできません。
Pythonプログラミングの全キーワード一覧
| False | await | else | import | pass |
| なし | ブレーク | 除く | イン | レイズ |
| 真 | クラス | 最後 | is | 戻り |
| と | ||||
| continue | for | lambda | try | |
| as | def | from | nonlocal | while |
| assert | del | global | not | with |
| async | elif | if | or | yield |
上記のキーワードはPythonのバージョンにより変更される可能性があります。 追加されるものもあれば、削除されるものもあるかもしれません。
>>> import keyword>>> print(keyword.kwlist)
Description of Keywords in Python with examples
True, False
True and False are truth values in Python. Pythonの比較演算や論理(Boolean)演算の結果です。 例えば、
>>> 1 == 1True>>> 5 > 3True>>> True or FalseTrue>>> 10 <= 1False>>> 3 > 7False>>> True and FalseFalse
ここで、最初の3つの文は真なので、インタプリタはTrueを返し、残りの3つの文はFalseを返すことがわかります。 PythonのTrueとFalseは、1と0と同じ意味です。 これは次の例で正当化できます:
>>> True == 1True>>> False == 0True>>> True + True2
None
NoneはPythonの特別な定数で、値がないこと、またはNULL値を表わします。 複数のNoneオブジェクトを作ることはできませんが、変数に代入することは可能です。 これらの変数は互いに等しくなります。
None が False, 0 または空のリスト、辞書、文字列などを意味しないことに特に注意する必要があります。 例えば、
>>> None == 0False>>> None == False>>> None == FalseFalse>>> x = None>>> y = None>>> x == yTrue
何も返さないボイド関数は、自動的にNoneオブジェクトを返します。 Noneは、プログラムフローがreturnステートメントに遭遇しない関数でも返されます。 例えば、
def a_void_function(): a = 1 b = 2 c = a + bx = a_void_function()print(x)
Output
None
このプログラムでは、内部で何らかの演算を行うものの、値を返さない関数があります。 ですから、xを表示すると、自動的に(暗黙のうちに)返されるNoneが得られます。 同様に、別の例を示します。
def improper_return_function(a): if (a % 2) == 0: return Truex = improper_return_function(3)print(x)
Output
None
この関数にはreturn文がありますが、すべてのケースで到達しているわけではありません。 この関数は入力が偶数のときだけTrueを返します。
この関数に奇数を与えると暗黙のうちにNoneが返されます。
and, or , not
and, or, not はPythonの論理演算子です。 and はオペランドがともに True のときのみ True になる。 andの真理値表は以下の通りである。
| A | B | A と B |
|---|---|---|
| 真 | 真 | False |
| 真 | FalseFalse | |
| False | True | |
| False | FalseFalse |
or はオペランドのいずれかがTrueであれば、Trueとなる。 orの真理値表は以下のとおりです。
| A | B | A or B |
|---|---|---|
| 真 | 真 | FalseTrue |
| False | True | |
| False | False |
not演算子は真実値の反転に使用される。 notの真理値表は以下の通りです。
| A | not A |
|---|---|
| True | False |
| False | True |
以下に使用例を示します。
>>> True and FalseFalse>>> True or FalseTrue>>> not FalseTrue
as
as は、モジュールをインポートする際に別名を作成するために使用されます。
例えば、Python には math という標準モジュールがあります。 例えば、πの余弦が何であるかを別名を用いて計算したいとします。 as:
>>> import math as myAlias>>>myAlias.cos(myAlias.pi)-1.0
ここで、mathモジュールをmyAliasという名前を付けてインポートしています。 これで、mathモジュールをこの名前で参照できるようになった。
assert
assert はデバッグのために使われます。
プログラミングをしていると、内部の状態を知りたくなったり、仮定が正しいかどうかをチェックしたくなったりすることがあります。 assertはこのような場合に役立ち、より便利にバグを見つけることができます。 assert の後には条件が続きます。
条件が真であれば、何も起こりません。 しかし、条件が偽の場合、AssertionErrorが発生する。 例えば、
>>> a = 4>>> assert a < 5>>> assert a > 5Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module>AssertionError
理解を深めるために、AssertionErrorと一緒に表示されるメッセージも用意することができる。
>>> a = 4>>> assert a > 5, "The value of a is too small"Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module>AssertionError: The value of a is too small
この時点で、
assert condition, message
は
if not condition: raise AssertionError(message)
async, await
キーワード async と await は Python の asyncio library が提供するものであることがわかるだろう。 これらはPythonで並列コードを記述するために使用される。 例えば、
import asyncioasync def main(): print('Hello') await asyncio.sleep(1) print('world')
プログラムを実行するには、
asyncio.run(main())
上記のプログラムでは、asyncキーワードで関数が非同期に実行されることを指定しています。
ここでは、最初のHelloが表示されています。 awaitキーワードで1秒待たされる。
break は、for と while ループの中で、その通常の動作を変更するために使用されます。
これは次の二つの例で説明できる。
for i in range(1,11): if i == 5: break print(i)
Output
1234
ここで、forループは1から10までの数字を表示するつもりである。 しかし、iが5になるとifの条件が満たされ、ループを抜ける。
for i in range(1,11): if i == 5: continue print(i)
出力
1234678910
ここで、continueを使って同じプログラムをしています。 つまり、条件を満たすとそのイテレーションはスキップされる。 しかし、ループを抜けるわけではありません。 したがって、5以外のすべての値が出力されます。
Python break と continue 文についてもっと知る。
class
class は Python で新しいユーザー定義クラスを定義するために使われます。
クラスとは実際の状況を表現しようとする関連した属性とメソッドのコレクションです。 データと機能をクラスでまとめるこの考えは、オブジェクト指向プログラミング (OOP) の概念の中心です。
クラスはプログラムのどこででも定義することができます。 しかし、モジュールで単一のクラスを定義するのは良い習慣である。
class ExampleClass: def function1(parameters): … def function2(parameters): …
Python オブジェクトとクラスについてもっと知る。
def
def はユーザー定義関数を定義するために使用されます。
def の使用法を以下に示します。
def function_name(parameters): …
Python 関数についてもっと知る。 Pythonではすべてがオブジェクトです。 変数の参照を削除するには del
>>> a = b = 5>>> del a>>> aTraceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module>NameError: name 'a' is not defined>>> b5
ここで、変数aの参照が削除されたことが分かります。 つまり、それはもう定義されていない。
del はリストや辞書から項目を削除するためにも使われます。
>>> a = >>> del a>>> a
if, else, elif
if, else, elif は条件分岐や意思決定に使われます。
ある条件をテストしてその条件が真のときだけブロックを実行したい場合、if と elif が使用されます。 elifはelse ifの略。 elseは条件が偽の場合に実行されるブロックである。 これは、次の例で明らかになります:
def if_example(a): if a == 1: print('One') elif a == 2: print('Two') else: print('Something else')if_example(2)if_example(4)if_example(1)
Output
TwoSomething elseOne
ここで、関数は入力された数字をチェックし、それが1または2であれば結果を表示します。 これ以外の入力があると、elseの部分が実行されます。
Python if と if…else Statement についてもっと知る。
except, raise, try
except, raise, try は Python で例外とともに使われます。
例外とは基本的には、プログラム実行中に何か問題が起こったというエラーを指します。 IOError, ValueError, ZeroDivisionError, ImportError, NameError, TypeError などはPythonの例外のいくつかの例です。 try...except ブロックは Python で例外をキャッチするために使用されます。
我々は raise キーワードを使用して明示的に例外を発生させることができます。 以下はその例です。
def reciprocal(num): try: r = 1/num except: print('Exception caught') return return rprint(reciprocal(10))print(reciprocal(0))
出力
0.1Exception caughtNone
ここで、関数reciprocal()は入力された数値の逆数を返します。
10を入力すると、通常の出力である0.1が得られます。 しかし、0を入力すると自動的にZeroDivisionErrorが発生します。
これをtry…exceptブロックで捕らえ、Noneを返しています。
if num == 0: raise ZeroDivisionError('cannot divide')
finally
finally はリソースやファイルストリームを閉じるために try…except ブロックと共に使用されます。
finally を使用すると、処理されない例外があってもその中のコードブロックが実行されることを保証します。 たとえば、
try: Try-blockexcept exception1: Exception1-blockexcept exception2: Exception2-blockelse: Else-blockfinally: Finally-block
ここで Try-block に例外があった場合、それは except または else ブロックで処理されます。 しかし、どのような順番で実行が流れても、エラーがあってもFinally-blockが実行されるので安心である。 これはリソースの後始末に便利です。
Pythonプログラミングの例外処理について詳しく見る
for
forはループ処理に使用されます。 一般的には、ループさせたい回数がわかっているときにforを使います。
Pythonでは、リストや文字列などのあらゆるタイプのシーケンスで使用することができます。
names = for i in names: print('Hello '+i)
Output
Hello JohnHello MonicaHello StevenHello Robin
Python for loop についてもっと知る。
from, import
import キーワードは現在のネームスペースにモジュールをインポートするために使用されます。 from…import は、特定の属性や関数を現在の名前空間にインポートするために使用されます。 例えば、
import math
は math モジュールをインポートします。 これで、math.cos()としてその中のcos()関数を使用することができます。 しかし、もし cos() 関数だけをインポートしたい場合は、from as
from math import cos
これで cos() 関数だけを使うことができ、 math.cos() と書く必要はありません。
Python モジュールと import 文についてもっと知りたい方はこちら。
global
globalは、関数内の変数がグローバル(関数外)であることを宣言するために使います。
グローバル変数の値を読む必要がある場合、globalと定義する必要はないのです。 これは理解できる。
もし我々が関数内部でグローバル変数の値を変更する必要があるなら、globalで宣言しなければならない。
globvar = 10def read1(): print(globvar)def write1(): global globvar globvar = 5def write2(): globvar = 15read1()write1()read1()write2()read1()
Output
1055
ここで、read1()関数は単にglobvarの値を読み取っています。 そのため、globalと宣言する必要はありません。 しかし、write1()関数は値を変更しているので、変数をglobalと宣言する必要があります。
出力では、変更が行われたことがわかります(10が5に変更されています)。 write2() もこの値を変更しようとしています。 しかし、global.
として宣言していません。したがって、新しいローカル変数globvarが作成され、この関数の外からは見えません。 このローカル変数を15に変更しても、グローバル変数は変更されない。 4240>
in
in はシーケンス(リスト、タプル、文字列など)が値を含んでいるかどうかをテストするために使用されます。 値があれば True を、なければ False を返します。
for i in 'hello': print(i)
Output
hello
is
is は Python でオブジェクトの同一性をテストするために使用されます。 ==演算子が2つの変数が等しいかどうかをテストするために使われるのに対し、isは2つの変数が同じオブジェクトを参照しているかどうかをテストするために使われます。
オブジェクトが同じならTrue、違うならFalseが返されます。
>>> True is TrueTrue>>> False is FalseTrue>>> None is NoneTrue
PythonではTrue、False、Noneのインスタンスは1つだけなので、それらは同一であることがわかっています。
>>> == True>>> is False>>> {} == {}True>>> {} is {}False
空のリストや辞書は別の空のものと等しくなります。 しかし、これらはメモリ上に別々に配置されているため、同一のオブジェクトではありません。
>>> '' == ''True>>> '' is ''True>>> () == ()True>>> () is ()True
リストや辞書と異なり、文字列やタプルは不変(一度定義された値を変更できない)であるためである。 したがって、2つの同じ文字列またはタプルは、同様に同一である。
lambda
lambda は、匿名関数(名前のない関数)を作成するために使用されます。 これは、returnステートメントを含まないインライン関数である。 評価されて返される式で構成されています。 例:
a = lambda x: x*2for i in range(1,6): print(a(i))
Output
246810
ここで、lambdaステートメントを使用して、値を2倍にするインライン関数を作成しました。
Pythonのラムダ関数についてもっと知る
nonlocal
nonlocalキーワードの使用方法はglobalキーワードと非常によく似ています。 nonlocalは、ネストされた関数(関数の中の関数)内の変数がローカルでないこと、つまり外側の包含関数にあることを宣言するために使用されます。 ネストされた関数内の非ローカル変数の値を変更する必要がある場合、nonlocalで宣言する必要がある。 そうしないと、その名前のローカル変数がネストされた関数の中に作られます。
def outer_function(): a = 5 def inner_function(): nonlocal a a = 10 print("Inner function: ",a) inner_function() print("Outer function: ",a)outer_function()
Output
Inner function: 10Outer function: 10
ここで、inner_function()はouter_functionの中にネストされています。
変数aはouter_function()の中に入っています。 そのため、inner_function()で変更したい場合は、nonlocalで宣言する必要があります。 aはグローバル変数ではないことに注意してください。
したがって、出力から、変数が入れ子のinner_function()内部で正常に変更されたことがわかります。 nonlocal キーワードを使用しない場合の結果は次のようになります:
def outer_function(): a = 5 def inner_function(): a = 10 print("Inner function: ",a) inner_function() print("Outer function: ",a)outer_function()
Output
Inner function: 10Outer function: 5
ここで、ネストした関数内の変数aがnonlocalであることを宣言していません。 したがって、同じ名前の新しいローカル変数が作成されますが、非ローカルaは出力に見られるように変更されません。
pass
pass は Python の null 文です。 これが実行されると何も起こりません。 これはプレースホルダーとして使用されます。
まだ実装されていないが、将来的に実装したい関数があるとします。 プログラムの途中に,
def function(args):
と書くだけでは、IndentationErrorとなる。 その代わりにpass文で空白のボディを構成する。
def function(args): pass
空のclassでも同じことができる。
class example: pass
return
return 文は関数内でそれを終了し値を返すために使われる。
値を明確に返さない場合は自動的にNoneが返される。
def func_return(): a = 10 return adef no_return(): a = 10print(func_return())print(no_return())
Output
10None
while
while はPythonのループ処理に使われる。
while ループ内の文は while ループの条件が False になるか break 文に遭遇するまで実行を継続され続ける。
i = 5while(i): print(i) i = i – 1
Output
54321
0はFalseに等しいことに注意。
Python whileループについてもっと知りたい方はこちら。
with
with 文は、コンテキストマネージャによって定義されたメソッドの中でコードブロックの実行をラップするために使われます。
コンテキストマネージャは、__enter__ と __exit__ メソッドを実装するクラスです。 with ステートメントの使用は、__exit__ メソッドがネストされたブロックの最後で呼び出されることを保証します。 この考え方は、try…finallyブロックの使い方と似ている。 4240>
with open('example.txt', 'w') as my_file: my_file.write('Hello world!')
この例では、テキスト Hello world! をファイル example.txt に書き込んでいます。 Fileオブジェクトには__enter__と__exit__メソッドが定義されているので、それ自体がコンテキスト・マネージャとして機能する。
最初に__enter__メソッドが呼ばれ、次にwith文の中のコードが実行され、最後に__exit__メソッドが呼ばれる。 __exit__メソッドはエラーがあっても呼び出されます。
yield
yield は return 文のように関数内で使用されます。 しかし、yieldはジェネレータを返します。
ジェネレータは、一度に1つのアイテムを生成するイテレータです。 大きな値のリストは多くのメモリを消費します。 ジェネレータはこのような状況で、すべての値をメモリに格納する代わりに、一度に1つの値だけを生成するので便利です。 例えば、
>>> g = (2**x for x in range(100))
とすると、2の99乗までの累乗を生成するジェネレータgが生成される。
>>> next(g)1>>> next(g)2>>> next(g)4>>> next(g)8>>> next(g)16
のように、next()関数を使って数字を生成することができる。このタイプのジェネレータは、関数からyieldステートメントで返される。 以下はその例です。
def generator(): for i in range(6): yield i*ig = generator()for i in g: print(i)
Output