Python基礎備忘録その2

#記事概要
Pythonを少しでも読めるようになってみようと思い、[参考書](#参考文献)に沿って学習した備忘録になります。
Javaと比較して自身が気になった点、便利と感じた点をまとめております。
その1は[こちら](https://qiita.com/tk10/items/12a3c09b0c0f9a1499f7)
<strong>※かなり基礎的な内容になります。</strong>

#関数定義
pythonはメソッドのオーバーロードが出来ない代わりに、デフォルト引数を設定可能。

<strong>引数無し</strong>
def doFunc():
　　関数処理

<strong>引数あり</strong>
def doFunc(a, b, c, ...):
　　関数処理

#####例
```java:java
//引数無し
void doFunc1() {
    print("関数が呼び出されました。");
}

//引数あり
void doFunc2(a, b) {
    print("a + b = " + (a + b));
}

//return あり
int doFunc3(a, b, c) {
    retrun a + b + c;
}

//オーバーロード
void overFunc() {
    print("文字列はありません。")
}

void overFunc(String str) {
    print("文字列は" + str + "です。")
}
```

```python:python
#引数無し
def doFunc1():
    print("関数が呼び出されました。")

#引数なし
def doFunc2(a, b):
    print("a + b = " + str(a + b))

#return あり
def doFunc3(a, b, c):
    return a + b + c

#デフォルト引数を使用
def overFunc(str = None):
    if str is None:
        print("文字列はありません")
    else:
        print("文字列は" + str + "です。")
```

#ディクショナリ
JavaのMapのようなもの（？）
キーとバリューを格納する。

#####例
```java:java
Map<int, String> maps = new HashMap<>();
maps.put(1, "one");
maps.put(2, "two");
maps.put(3, "three");
maps.put(4, "four");
maps.put(5, "five");

//fiveを取り出す
maps.get(5);
```

```python:python
maps = {
    1: "one",
    2: "two",
    3: "three",
    4: "four",
    5: "five"
}

#fiveを取り出す
maps[5]
```

#set(集合)
集合を扱うために実装された機能。
要素が重複しないリスト。
~~リスト要素の追加、取り出しは行えない。~~
リストやディクショナリを要素としての追加は行えない。
~~要素の取り出しは行えない。~~
インデックス参照は行えない
※Javaにはない機能！

| 求めたい集合 | 演算子 |
|:-:|:-:|
|和集合| ｜ |
|差集合| - |
|論理積| & |
|排他的論理和| ^ |
|部分集合| >= または <= |

####例
```python:python
set1 = {1, 2, 3, 4, 5}
set2 = {3, 5, 7}

#和集合
wa = set1 | set2
#差集合
sa = set1 - set2
#論理積
seki = set1 & set2
#排他的論理和
haita = set1 ^ set2
#部分集合
bubun = set1 <= set2
```

#タプル
要素の変更は行えない。
要素の追加、取り出しは可能。

####例
```python:python
tuple1 = (1, 2, 3, 4, 5)
tuple2 = (6, 7, 8, 9, 10)

tuple2[2]
>>8

tuple3 = tuple1 + tuple2

tuple3[9]
>>10
```

#組み込みデータ型
ここまで書いていて、その1、その2で出てきたデータ型について整理を行わないと混同して覚えてしまいそうなので、一度書き出してみます。
参考文献を見て、使えそう、便利そうと感じたものを抜粋して残しています。

```python
#データ型を調べるにはtypeメソッドを使用する
type(object)
```

* bool（immutable）

　True or False のみを扱う

* int（immutable）

　整数を扱う

* float（immutable）

　少数点を含む数字を扱う

* str（immutable）

　複数の文字を扱う

* list（mutable）

　複数の要素をまとめて扱う

>要素の<strong>追加、削除、並べ替え、要素の検索、特定の要素の取得</strong>が行える

```python
list = [要素1, 要素2, ...]
```

* tuple（immutable）

　複数の要素をまとめて扱う

>・要素の<strong>追加、特定の要素の取得</strong>が行える
>・利点
>　⇒ディクショナリのキーや、setの要素に出来る

```python
tuple = (要素1, 要素2, ...)
```

* set（mutable）

　集合を扱う

>・重複しない要素を格納する
>・順番を持たない
>・要素にアクセスできない
>・要素の変更は可能
>・<strong>集合演算は可能</strong>

```python
set = {要素1, 要素2, ...}
```

* dict（mutable）

　複数の要素をまとめて扱う
　<strong>キーとバリューを紐づける</strong>

```python
dict = {
    要素1キー: 要素1,
    要素2キー: 要素2,
    ...
}
```

* bytes（immutable）

　（エンコードされていない）複数の文字を扱う

>ファイルやインターネットから取り込んだ文字列はbytes型として取り込まれる

#bytes型の変換について掘り下げ
Webサイト作成やデータをやり取りする際にbytes型の変換が必須になりそうと思ったので、少し掘り下げて調べました。

>encode([エンコード名[, エラー処理方法]])
>decode([エンコード名[, エラー処理方法]])

```python:python
str = "こんにちは"

#文字列⇒バイト型
enStr = str.encode("shift-jis", "strict")

#バイト型⇒文字列
deStr = enStr.decode("shift-jis", "strict")

```

#あとがき
その1のコメントで教えていただいた、

>Pythonにはプリミティブ型が無い

という点は勘違いせずに覚えなければと思います。
複数の要素をまとめて扱うデータ型の違いを理解して利用できるように理解を進めていきたいです。
ここまではオブジェクト指向について触れていないので、オブジェクト指向についてもまとめていこうかと思います。

#参考文献
柴田淳(2016)「みんなのPython 第4版」SBクリエイティブ株式会社
[Python公式リファレンス](https://www.python.org/)
[組み込みデータ型について、参考にさせていただいた記事](https://gammasoft.jp/blog/python-built-in-types/)