今さらだけどPythonのメモ(^^;)

関数

関数定義は次のようになる。

def hoge(val1, val2="hoge"):
    print("hoge:" + val1 + ":" + val2)

def 関数名(仮引数): で関数を宣言する。仮引数名=値 で引数を省略したときのデフォルト値を設定できる。

この関数を呼ぶ方法は次のようになる。

hoge("abcdef")      # hoge:abcdef:hoge と表示される。

あ、値を返すのを忘れていた。

def hoge5():
    return 5

print(hoge5())          # 5 と表示される

関数のローカル変数とグローバル変数の参照

関数内のローカル変数は普通に変数を使えばそのままローカル変数になる。関数内からグローバル変数にアクセスするには関数内でglobalで宣言しておけば関数内からグローバル変数にアクセスできるようになる。

gval1 = "def"        # グローバル変数
gval2 = "ghi"
def hoge2(val1):
    val2 = "abc"    # ローカル変数
    global gval1    # グローバル変数gvalにアクセスできるようにする。
    gval1 = val1
    gval2 = val2    # ここのgval2はglobal宣言されていないので
                    # gval2はローカル変数になる。
    print(val2)

hoge2("hogehoge")   # abcと表示される。
print(gval1)        # hogehogeと表示される。
print(gval2)        # ghiと表示される。hoge2関数内で変更しているつもりだが、
                    # global宣言せずに代入しているのでgval2は変更されない。
#print(val2)        # エラーになる(のでとりあえずコメントアウト)

クラス

クラスの定義は次のようになる。

class Hoge3:
    val = 0
    __val2 = "hoge" # __(アンダーバー2つ)でプライベート変数扱いになる
                    # メソッドも同様に__(アンダーバー2つ)で関数名を始めるとプライベートになる。

    def __init__(self, val):        # コンストラクタになる。
        print("Hoge3:コンストラクタ")
        self.val = val

    def printVal(self):
        print("Hoge3:val=" + str(self.val))
    
    def __del__(self):              # デストラクタになる。
        print("Hoge3:デストラクタ")

hoge3 = Hoge3(234)
hoge3.printVal()            # Hoge3:val=234 と表示される。
#print(hoge3.__val2)         # __val2 はプライベート変数扱いなのでエラーになる(のでとりあえずコメントアウト)
del hoge3

クラスの継承

Hoge3クラスを継承したHoge4クラスを定義する。次のようになる。

# クラスの継承
class Hoge4(Hoge3):                             # Hoge3を継承する
    def printVal(self):                         # Hoge3にある同名のメソッドを定義すると
                                                # 上書きされたような感じになる。
        print("Hoge4:val=" + str(self.val))
    def printVal2(self):
        super().printVal2()                     # super()で継承元(スーパークラス)のメソッドを参照できる。

hoge4 = Hoge4(567)
hoge4.printVal()            # Hoge4:val=567 と表示される
hoge4.printVal2()           # hoge3:val2=hoge と表示される
del hoge4