Python基礎_備忘録

#概要

本記事ではUdemyの講座からPythonの基本的な文法を学習した感想を書かせていただきます。
自分は他の言語でプログラミングを経験していたため、if文や関数など基本的な文法はすぐに理解できました。しかし、デフォルト引数や内包表記など、Pythonを学習してから初めて知ったポイントも多くありました。そのため、それらを本記事に纏めたいと考えました。

本記事にて掲載されているコードは全てUdemyの講座から抜粋しております。また、事前にUdemy講座の講師から許可を頂いています。(参考文献参照)

#目次

[1.開発環境](#1-開発環境)
[2.リスト・タプル・セット・辞書](#2-リスト・タプル・セット・辞書)
[3.for文](#3-for文)
[4.スコープ](#4-スコープ)
[5.with構文](#5-with構文)
[6.関数](#6-関数)
[7.オブジェクト指向プログラミング](#7-オブジェクト指向プログラミング)

#1-開発環境

 - 開発環境は Google Colaboratory を使用、主に下記4点の概念が存在

||内容 |
|---|---|
|セッション<br>Session  |ある活動を継続して行っていた状態のこと<br>接続を確立してから切断するまでの一連の通信のこと  |
|インスタンス<br>Instance  |ソフトウェアとして実装された仮想的なマシンを起動したもの<br>オブジェクト指向におけるインスタンスとは異なる  |
|90分ルール  |ノートブックのセッションが切れてから90分経過すると、<br>インスタンスが落とされる  |
|12時間ルール  |新しいインスタンスを起動してから12時間経過すると、<br>インスタンスが落とされる  |

#2-リスト・タプル・セット・辞書

 - 一つのリストの中に様々な型の要素を追加できる
 - append
    - リストに要素を追加する
 
```Python
mixList = ["Py", 543.21, 79, "thon", [2018, 2019, 2020, 2021]]
print(mixList)

mixList.append(2022)
print(mixList)
```

> ['Py', 543.21, 79, 'thon', [2018, 2019, 2020, 2021]]
> ['Py', 543.21, 79, 'thon', [2018, 2019, 2020, 2021], 2022]

 - リストとタプルの違い
    - リストは要素の値を書き換えれるがタプルは書き換えれない
    - 要素を変更する必要が無い場合はタプルがベター
 - 要素が一つのタプルは以下のように　,　が必要

> (3,)

 - セットはリストと似ているが、重複した値を持つことはできない
    - タプルと異なり、値の変更はできる
 - 辞書はキーと値の組み合わせ
 - リストやタプルは下記の通りまとめて代入可能

```Python
a = [1, 2, 3]
a1, a2, a3 = a
print(a1, a2, a3)
 
b = (4, 5, 6)
b1, b2, b3 = b
print(b1, b2, b3) 
```

 - 内包表記
    - リストの要素を操作した上で、新しいリストを作成

```Python
a = [1, 2, 3, 4, 5, 6]
b = [c*3+1 for c in a]    # aの要素を3倍して1を足し新たなリストを作る
print(b)
```

#3-for文

 - リストを用いたループとrange演算子を用いたループがある

```Python
for a in [4, 7, 10]:    # リストを使ったループ
    print(a)
    
for a in range(3):      # rangeを使ったループ
    print(a)
```

#4-スコープ

 - 関数内でグローバル変数を用いる場合、ローカル変数としてみなされないように注意する必要あり

```Python
a = 123
 
def setLocal():
    a = 456         # aはローカル変数とみなされる
    print("Local:", a)
    
setLocal()
print("Global:", a)
```

> Local: 456
> Global: 123

 - グローバル変数として対策として、下記の通りglobalもしくはnonlocalを用いる


```Python
a = 123
 
def setGlobal():
    global a            # nonlocalでも可
    a = 456
    print("Global:", a)
    
setGlobal()
print("Global:", a)
```
> Global: 456
> Global: 456

#5-with構文

 - write:ファイルの書き込み

```Python
greetings = "Good morning!\nGood afternoon!\nGood evening!\nGood night!"
 
with open("greetings.txt", "w") as f:
    f.write(greetings)  # ファイルに保存
```

 - read:ファイルの読み込み

```Python
with open("greetings.txt", "r") as f:
    print(f.read())  # ファイルの読み込み
```

> Good morning!
> Good afternoon!
> Good evening!
> Good night!

#6-関数

 - デフォルト引数：関数を呼び出す際はその引数を省略できる

```Python
def add(a, b=4):        # 第2引数にデフォルト値を設定
    c = a + b
    return c
 
print(add(3))           # 第2引数は指定しない
```
> 7

 - アスタリスクをつけたタプルを用いて複数の引数を一度に渡す

```Python
def add(a, b ,c):
    d = a + b + c
    print(d)
 
e = (1, 2, 3)
add(*e)           # 複数の引数を一度に渡す
```
> 6

#7-オブジェクト指向プログラミング

 - Pythonではオブジェクト指向プログラミングが可能
    - オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方

|概念|内容 |
|---|---|
|クラス<br>class  |設計図のようなもの `class`の表記で定義 <br>クラスから複数のインスタンスの生成が可能<br>クラス内で複数のメソッドを定義  |
|インスタンス  |実体  |
|オブジェクト  | クラスとインスタンスを総称  |
|継承  | 既存のクラスを引き継いで新たなクラスを定義  |

 - クラス内でdefを用いてメソッドを定義する
    - 下記の通り特殊なメソッドも存在する

|特殊なメソッド|内容 |
|---|---|
|`__init__`  |コンストラクタ<br>インスタンスの初期設定を行う特殊なメソッド  |
|`__call__`  |クラス内で実装することにより<br>インスタンス名からメソッドを呼び出すことも可能  |

```Python
class initHello:
    # コンストラクタ
    def __init__(self, name):
        self.name = name

class callHello(initHello): # initHelloクラスを継承
    def __call__(self):
        print("Hello " + self.name + "!")

h = callHello("AI") # インスタンスを生成し、変数hに代入
h()  # インスタンス名hを使って__call__メソッドを呼ぶ

callHello("Python")()  # 上に同じ
```

> Hello AI!
> Hello Python!

#感想

 - Pythonの勉強で初めてクラスについて学習したので理解するのに時間がかかりました。
    - 今回の講座ではインスタンスメソッドが紹介されていましたが、他にもクラスメソッドやスタティックメソッドがあるそうです。
 - リストの内包表記について、理解するのに時間がかかりましたが、一度理解すれば便利に表記できそうと感じました。
 - スコープについて、ローカル変数・グローバル変数を正しく使用できているかチェックが必要だと感じました。
 - 今回の講座では、Pythonの代表的な文法を紹介されていましたので、より詳しく学習したい方は別途専用の講座を学習する必要があると感じました。

#参考文献

 - [AIパーフェクトマスター講座 -Google Colaboratoryで隅々まで学ぶ実用的な人工知能/機械学習-](https://www.udemy.com/course/ai-master/)
 - [みんなのデータサイエンス講座 -Python、Colab、Kaggleで基礎から学び親しむ「データ」の世界-](https://www.udemy.com/course/learning-ds/)