#author("2022-12-06T19:56:52+09:00;2021-02-13T14:09:42+09:00","default:inoue.ko","inoue.ko") #author("2023-08-29T11:02:51+09:00;2021-02-13T14:09:42+09:00","default:inoue.ko","inoue.ko") * Python Syntax Python の基本文法 ~ ***CONTENTS #contents2_1 ~ ~ **変数・数値・文字列 ***変数 Pythonの変数には、オブジェクトの代入が可能です。数値も文字列もオブジェクトの一つとして扱われます。 >>> x = 256 >>> a = "hello" 対話型の操作では、変数名+ [Enter] で変数の内容が表示されます。 >>> a "hello" ~ ***数値 整数と浮動小数点数の2種類があります。 -整数の範囲に事実上上限がありません。 -浮動小数点は 64bit幅です。 ~ ***文字列 -文字コードは Unicode です。 -文字列を囲む記号には、シングルクォート、ダブルクォート、トリプルシングルクォート、トリプルダブルクォートが使えます。トリプルを使うと、改行コードを含む複数行の文字列を扱うことができます。 >>> text = """ I have a pen. . . . You have a notebook.""" >>> print(text) I have a pen. You have a notebook. -+演算子で文字列の連結ができます。 >>> text ="abcdefg" >>> text += "hijklmn" >>> text 'abcdefghijklmn' -*演算子で繰り返しが可能です。 >>> text ="abc"*3 >>> text 'abcabcabc' -[ ]を使うと文字列のスライス(抽出)が可能です。 形式 [ 開始位置 : 終了位置 : ステップ ] ) >>> text = "ABCDEFG" >>> text[1] 'B' >>> text[2:] 'CDEFG' >>> text[3:5] 'DE' >>> text[1:7:2] 'BDF' -その他、.split、.join、.find など様々なメソッドがあります。 [[Google:Python 文字列処理]] ~ ***コレクション型 コレクション型とは、複数の値をまとめるデータ型で、一般の配列に相当する「リスト」と「タプル」、また一般の連想配列に相当する「辞書」と「集合」、計4つの型が存在します。 -''リスト''|list リスト型は [ ] 内に複数要素をカンマ区切りで定義します。リストは数値や文字列のように変数に代入して利用することができます(ミュータブル)。 x = [ ] (空のリスト) data = [ 60, 70, 85, 40, 65 ] colorlist = [ "Blue", "Red", "Green" ] person = [ 25, "Yamada", True ] (異なるデータ型の指定も可) -''タプル''|tuple タプル型は ( ) 内に複数要素をカンマ区切りで定義します。タプルは「要素の値を変更きない(イミュータブル)」仕様なので、使用頻度は低くなります。 x = () (空のタプル) data = ( 5, 8, 2, 9, 3 ) colorlist = ( "Blue", "Red", "Green" ) person = ( 100, "Tokyo", True ) (異なるデータ型の指定も可) -''辞書''|dict 辞書は「キー: 値」という連想配列の形式で要素を管理します。辞書は、データの書き換えが可能です(ミュータブル)。 >>> data = { "left":100 , "right":80 } >>> data["left"] 100 参考:[[JSON]] ~ ***付記:Pythonの配列について Python で言う「配列」は 「リスト」のことで、[ ] を使って表記しますが、「異なる型のデータを混在できる」、「事後的にデータの追加ができる(要素数を増やせる)」など、他の言語の配列とは様子が異なります。 -空の配列(リスト)を初期化して、要素を追加していく例 x = [] for i in range(10): x.append( i ) print(x) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -一定数の配列(リスト)を「0埋め」で初期化する例 x = [0] *10 print(x) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -連続する整数配列で初期化する例( range とlist を組み合わせます) x = list( range(0,10) ) print(x) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ~ ~ **演算子 ***算術演算子 Python で用意されている演算子には以下のようなものがあります。 |演算子|意味|例|出力|h |+|加算|2+1|3| |-|減算|3−4|-1| |*|乗算|4*5|20| |/|除算|7/8|0.875| |%|剰余|8%3|2| |//|切り捨て除算|9/2|4| |**|指数|7**2|49| |divmod|商と余り|divmod(8,3)|(2,3)| ~ ***比較演算子 Python で用意されている比較演算子は以下。結果は True または False です。 |演算子|意味|h |x == y|x と y が等しい| |X != y|x と y が等しくない| |x != y|x と y が等しくない| |x > y|x は y よりも大きい| |x < y|x は y よりも小さい| |x >= y|x は y と等しいか大きい| |x <= y|x は y と等しいか小さい| |x in y|x という要素 が y に存在する| |x not in y|x という要素 が y に存在しない| ~ ***論理演算子 Python で用意されている論理演算子は以下。結果は True または False です。 |演算子|意味|解説|h |x or y | 論理和|どちらか 1 つが True なら True それ以外は False| |x and y|論理積|x と y がどちらも True なら True それ以外は False| |not x|否定|x が True なら False、 x が False なら True| ~ ~ **制御文 ***ブロックとインデント if 文や for 文などの制御では複合文の記載が必要になるます。JavaScript や PHP では { から } までが複合文が書かれる「ブロック」となりますが、Pythonでは、囲み記号を使わず、同じインデント(字下げ)がなされている文をブロックとして扱います。 if 文や for 文などの制御では複合文の記載が必要になります。JavaScript や PHP では { から } までが複合文が書かれる「ブロック」となりますが、Pythonでは、囲み記号を使わず、同じインデント(字下げ)がなされている文をブロックとして扱います。 if 条件式: ブロック内の処理1 ブロック内の処理2 インデントの位置をさらにずらすことでブロックの「入れ子」が実現します。 if 条件式: ブロック内の処理1 ブロック内の処理2 if 条件式: ブロック内の処理1 ブロック内の処理2 ~ ***条件分岐|if if 条件式1: 条件式1が真の時に実行する文 ... elif 条件式2: 条件式1が偽で条件式2が真の時に実行する文 ... else: すべての条件式が偽のときに実行する文 ... ~ ***繰り返し| for -for 文は一定回数処理を繰り返します。基本的な書式は次の通りです。 for 変数 in イテラブルオブジェクト: 実行する文 1 実行する文 2 実行する文 3 -イテラブルオブジェクトとは「要素を順番に取り出すことができるオブジェクト」のことで、文字列、リスト、タプル、辞書などがそれに該当します。イテラブルオブジェクトの要素の数だけその後の「ブロック」を順に実行します。 -記載例1:リストを使った一定回数の繰り返し x = [ "Orange", "Apple", "Lemon" ] for val in x: print( val ) Orange Apple Lemon -記載例2:range関数を使った一定回数の繰り返し for i in range(10): print( i ) 0 1 : ~ ***繰り返し|while -while 文は条件が真の間処理を繰り返します。基本的な書式は次の通りです。 while 条件式: 条件式が真の時に実行する文1 条件式が真の時に実行する文2 条件式が真の時に実行する文3 -条件式が真の間、その後に記述された「ブロック」の実行を繰り返します。 -記載例 n = 0 while n < 6: print( "n = " + str( n ) ) n += 1 n = 1 n = 2 n = 3 n = 4 n = 5 ~ ~ **関数 ***関数の定義 -関数は以下のように定義します。 def 関数名( 引数1, 引数2, ... ) : 関数内で実行する処理1 関数内で実行する処理2 関数内で実行する処理3 : return 戻り値 -関数名に続く ( ) の中に仮引数を記述します。仮引数が不要な場合は何も記載せず、複数指定する場合はカンマで区切って列挙します。 -関数が呼び出されると、ブロック内の処理が順に実行されます。 -関数は return 文を使って関数の呼び出し元に値を返すことができます。return 文は必要なければ記述する必要はありません(None が返ります)。 ~ ***関数の利用 定義した関数は、以下のようにして主たるプログラムで利用できます。 -記載例 # 自作関数の定義 def MyFunc(x): # 入力:引数(ひきすう)として x を受け取る y = 2*x+1 # 処理 return y # 出力:戻り値として y を返す #自作関数を利用したメインプログラム s = input("数を入力して下さい >>>") # 入力 x = float(s) # 処理(文字列を数値に変換) y = MyFunc(x) # 処理(計算) print("計算結果:", y) # 出力 --- 実行結果 --- 数字を入力して下さい >>> 2.5 計算結果: 6 ~ ~ **クラス オブジェクト指向プログラミングでは、プロパティ(属性)とメソッド(関数)をカプセル化したクラスを定義するとともに、そのクラス(雛形)からインスタンス(オブジェクトの実体)を生成させて、利用します。 プロパティやメソッドは、以下のように [ . ] 接続で記述します。 -インスタンス名 . 変数名:プロパティ -インスタンス名 . 関数名( ):メソッド ~ ***クラスの定義 -クラスは以下のように定義します。 class クラス名 : # ここにコード -クラスのコード部分には、一般に ''プロパティ(変数)'' と ''メソッド(関数)''を記述します。 ~ ***インスタンス変数 -インスタンス変数は、''インスタンス.変数名'' のかたちで表現される ''インスタンスごとに独立した変数'' で、一般にメンバ変数と言われるものです。これは、通常コンストラクタの中で初期化されます。コンストラクタとは、クラスからインスタンスを初期化(生成)する際に実行されるメソッド(関数)です。 class MyClass: def __init__( self ): # コンストラクタ self.name = "" # インスタンス変数 myInstance = MyClass() myInstance.name = "John" print( myInstance.name ) ------実行結果------- John ~ ***クラス変数 -クラス変数は、''クラス名.変数名'' のかたちで表現されるもので、すべてのインスタンスで共通の変数となります。 class MyClass: PI = 3.14 #クラス変数 print( MyClass.PI) ------実行結果------- 3.14 -以下は、クラス変数の活用事例で、インスタンスが生成される都度、カウントが進むサンプルです。当該クラスから生成されたオブジェクトの数を把握するのに利用することができます。 class MyClass: count = 0 # クラス変数を初期化 def __init__( self ): # コンストラクタ MyClass.count += 1 # クラス変数をカウントアップ myInstance1 = MyClass() myInstance2 = MyClass() print( MyClass.count ) ------実行結果------- 2 ~ ***メソッド メソッドとはクラスが持つ関数です。メソッドの第一引数には、クラスのインスタンスを指定し、第二引数以降で、メソッドの引数を受けます。 class MyClass: def setName( self, name ): # 第一引数は self self.name = name myInstance = MyClass() myInstance.setName("John") print( myInstance.name ) ------実行結果------- John ~ ***サンプルプログラム # クラスの定義 class myClass: def __init__( self ): # コンストラクタ(メソッドの一種) self.a = 0 # インスタンス変数1 self.b = 0 # インスタンス変数2 def add( self , a, b ): # メソッド self.a = a # インスタンス変数1 self.b = b # インスタンス変数2 s = self.a + self.b # 合計を計算 return s # メインプログラム obj1 = myClass() #初期化 obj2 = myClass() #初期化 print("初期のインスタンス変数:", obj1.a , obj1.b, obj2.a , obj2.b ) sum1 = obj1.add( 3 , 5 ) #メソッドの実行 sum2 = obj2.add( 7 , 8 ) #メソッドの実行 print("実行後のインスタンス変数:", obj1.a , obj1.b, obj2.a , obj2.b ) print("実行後の戻り値:", sum1, sum2 ) --- 実行結果 --- 初期化時点の変数: 0 0 0 0 メソッド実行後の変数: 3 5 7 8 メソッド実行後の戻り値: 8 15 ~ ~ **モジュール Pythonが機能を分類する単位をモジュールといいます。例えば、sin関数などの数学関連の機能は math という名前のモジュールに含まれていて、これを利用する場合は、まずそのモジュールを import 文でインポートします。 ~ ***モジュールの利用 -import 文 の形式 import モジュール名 import モジュール名 as 略称名 --例えば・・ import math import pandas as pd -モジュール内の関数を利用するには、 モジュール名.関数名() 略称名.関数名() --例えば y = math.sin(x) df = pd.read_csv(https://・・・・・.csv) ~ ***自作関数のモジュール化 自作関数は、以下のように別ファイルとして利用することができます。 以下、myModule と main.py が同じフォルダ内にある場合の例です。 -''myModule.py'' def myFunc( a, b ): s = a + b return s -''main.py'' import myModule as mm a = input("数を入力して下さい a = ") b = input("数を入力して下さい b = ") x = float(a) y = float(b) s = mm.myFunc( x, y ) print( "計算結果:", s ) -実行結果 数を入力して下さい a = 5.2 数を入力して下さい b = 2.8 計算結果: 8.0 ~ ~ **コメント Python では # 記号以降はコメントとして扱われます。プログラム上で文の機能を一時的に無効にする(コメントアウト)場合にも利用可能です。 ~ ***インラインコメント #から行末までは実行時に無視されます。#より前のコードは有効です。 a = 1 # comment ~ ***ブロックコメント(行全体) 行頭に#を書くと、行全体コメントとなり、実行時には無視されます。 a = 1 # b = 2 # c = 3 d = 4 ~ ~