====== Pythonマニュアル ====== == 記法 == ファイルの冒頭には以下のおまじないを記載して拡張子「.py」で保存(utf-8の場合)。なお「#」は、行末までのコメントアウトを意味する。 #!/usr/bin/env python # -*- coding: utf-8 -*- 実行は例えばコマンドプロンプトで以下の通り。 > python ファイル名.py == Hello, World ! == print('Hello, World !') == 文字列 == text_a = "テキストA" text_b = text_a + "とテキストB" text_b #'テキストAとテキストB' text_b += "とテキストC" #複合演算子が使用可能 text_b #'テキストAとテキストBとテキストC' text_c = """このように クオーテーションを3つ重ねれば 改行コードを含む文字列が定義可能""" #raw文字列。自動的にエスケープが適用される。引用符の前に「r」を記載して使用。 text=r"C:¥a¥b¥c" #'C:¥¥a¥¥b¥¥c' == 算術 == 3**2 #9 累乗 == アンパック代入 == var1=10 var2=20 var2,var1=var1,var2 print(var1,var2) #20,10 == リスト == list_a = [1, 2, 3, 4, 5] list_a[0] #1 list_b = [6, 7, 8] list_a + list_b #[1, 2, 3, 4, 5, 6, 7, 8] #連結 list_b[2] = 9 list_b #[6, 7, 9] #置き換え del list[0] list_b #[7, 9] #del でリストの要素を削除 list_a[1:3] #[2, 3] #スライス # リスト名[最初の要素のインデックス:最後の要素のインデックス+1] でリストの一部を抽出できる。 list_a[1:] #[2, 3, 4, 5] #コロンの後ろがなければ最後まで list_a[:4] #[1, 2, 3, 4] #コロンの前がなければ最初から sum(list_a) #15 #合計数 max(list_a) #5 #最大数 min(list_a) #1 #最小数 len(list_a) #5 #要素数 == ディクショナリ == #ディクショナリの定義 ディクショナリ名={キー1:値1,キー2:値2...} #要素の取り出し ディクショナリ名[要素のキー] #要素の変更。新しい要素のキーに以下の式を適用すると要素の追加となる。 ディクショナリ名[要素のキー]=変更後の値 #要素の削除 del ディクショナリ名[要素のキー] #for文にディクショナリを適用するとキーに対するループとなる for 変数 in ディクショナリ: print(変数, ディクショナリ[変数]) #キーと値が出力される == set(集合) == *setの要素にはリストを登録できないがタプルを登録できる。 #setの定義。同一の要素を記載しても単数で管理される。 set名={要素,要素...} #「|」を使えばsetの和集合が求められる。差集合の場合は「-」、積集合の場合は「&」、排他的論理和の場合は「^」を使用 set1={a,a,c,e} set2={b,d,f} set3=set1|set2 #{a,b,c,d,e,f} == タプル == *タプルは要素の変更ができない。 #タプルの定義。なお、()は無くともよい。 タプル名=(要素,要素...) #タプルから要素を取り出す タプル名[インデックス] #タプルの連結 タプル3=タプル1+タプル2 == for文 == #シーケンス型には、リスト型、タプル型、レンジ型が含まれる。 #この例のように、インデントの前には「:」の入力が必要。 for 変数 in シーケンス: ループ内実行文 for hoge in range(5): print(hoge) #0~4が出力される #なお、range関数が返す値は以下の通り range(5) #[0,1,2,3,4] == if文 == #pythonにはswitch文は無い if 条件式1: 条件式1が成り立つときに実行されるブロック elif 条件式2: 条件式1が成り立たず、条件式2が成り立つときに実行されるブロック else: どちらの条件式も成り立たなかったときに実行されるブロック #文字列に文字列が含まれるかを判定 if "bcd" in "abcde": #true print("abcdeにはbcdという文字が含まれています") #リストに要素が含まれるかを判定 if a in [a,b,c,d,d]: #true print("このリストにはaという要素が含まれています") #複数の条件をまとめる場合、「and」や「or」を使う。 if 条件式1 and 条件式2: print("この文は条件式1,2の両方が真の場合に出力されます。") == while文 == #while文の文法。条件式が真である限り、ループ内の文が繰り返される。 while 条件式: ループ内で実行されるブロック #pythonの場合、「else」は、while文、for文と組み合わせることができる。 while 条件式1: if 条件式2: break … else: 式 #この式は、breakによらずwhile文を抜けた場合にのみ実行される。 == 関数 == #以下の式で関数を呼び出す 関数名(引数1,引数2...) #以下の式で関数を定義。引数は0個でも可 #戻り値はreturnで定義 def 関数名(引数1,引数2...): 関数ブロック #引数にはデフォルト値を設定することができる。 #デフォルト引数は、引数郡の後ろ側にまとめる。 def 関数名(引数1=デフォルト値,引数2=デフォルト値...): 関数ブロック #関数を呼び出す場合、引数のキーワード指定を行えば引数の順番を入れ替えられる。 int(base=値,x=値) #シーケンスを戻り値とすることもできる。 return [var0,var1] #上記のような戻り値を返す関数func1を使うと、list[0]のようにインデックスで値にアクセスできる。 list=func1() list[0] #var0 #このように戻り値を受け取ることもできる。 hoge0,hoge0=func1 #hoge0:var0, hoge1:var1 #関数を定義するときにアスタリスク*を付けると引数の数が可変になる。 def bar(a,b,c,*d) return(a,b,c,d) #この関数を呼び出すと hoge=bar(1,2,3,4,5,6) #hoge:1,2,3,(4,5,6) となる。 #関数を定義するときにアスタリスク*を2つ付けると未定義の引数がディクショナリになる。 def foo(a,b,c,**d) return(a,b,c,d) #この関数を呼び出すと hoge=foo(1,2,3,var0=4,var1=5) #hoge:1,2,3,{'var0':4,'var1',5} == ファイルを扱う == #open関数を使う。モードは、r:読み込み, w:書き出し, a:追記 等 open(ファイル名[,モード[,エンコード[,エラー処理]]]) #例 file=open("bar.txt","r",encoding="utf-8") text=file.read() #ファイルの内容を文字列型にする。 file.close() #最後にはファイルを閉じる == モジュールをインポートする == *pythonのモジュールは、https://docs.python.org/ja/3/ から検索可能 #以下の式でモジュールを読み込む。以後、任意の名称.関数名()で関数を使用可能 #as以下は省略可能。 import モジュール名 as 任意の名称 #以下の式で関数を読み込む。from文を使った場合は、以後モジュール名を記載する必要が無い from モジュール名 import 関数名など == メソッド == #メソッド呼び出し。ここでいう「データ」とは例えばリスト。 データ.メソッド名(引数1,引数2...) #リストに含まれる要素の数 リスト名.count() #文字列の変換 str1="あいうえお" str1.replace("あ","か") #かいうえお == リスト内包表記 == #シーケンスの各要素が繰り返し変数として式が評価され、その評価値を各要素とするリストが返される。 [式 for 繰り返し変数 in シーケンス] #例 [tem+1 for tem in [1,2,3]] #[2,3,4] #最後にif文を入れると、(通常、繰り返し変数を含む)条件式が真の場合にのみ、式の評価値が要素となる。 [式 for 繰り返し変数 in シーケンス if 条件式] == ディクショナリ内包表記 == {キー:値 for 繰り返し変数 in シーケンス[ if 条件式]} == セット内包表記 == {式 for 繰り返し変数 in シーケンス[ if 条件式]} == クラス == #selfとは生成されるインスタンス自体を指す。 #初期化メソッドのメソッド名は、「__init__()」という名前である必要がある。 class クラス名: def メソッド名(self[,引数]): 関数ブロック #インスタンスの作成 クラス名() #例1 class Hoge: def __init__(self,a,b): self.a=a self.b=b #例1の場合、以下のようにインスタンスを作成 foo=Hoge(1,2) #インスタンスには独自の変数を追加できる。この機能をアトリビュート代入という。 foo.var=10 #クラスの継承 class クラス名(スーパークラス名1[, スーパークラス名2, ... ]): 関数ブロック