C系プログラマが始めるPython

#Pythonを勉強することになったきっかけ
前々から話題になっており触りたいと思っていたまま、時が過ぎてました...
つい最近、Python触れる子が周りにいたり、企業の人にも他の言語にも触れてみたらとアドバイスをもらったりしたので勉強するモチベが高くなったって感じです。

#余談
この画像は[ちょまど](https://twitter.com/chomado?s=20)さんが描かれたものです。Pythonちゃん可愛いですよね！
![pythonChan] (https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647793/2bd0d071-820c-0d07-ed79-424aa2d449cb.png)

#この記事を読む前に
投稿主は**C/C++**、**Java**、**C#**をすでに触っているため、そういったC系の言語と比較した視点で記事を書いていくので予めご了承ください。

#お〇ぱいそんを触りたい
ド下ネタな見出しですみません。ただ言いたいだけです。
ここから具体的なPythonの基本文法についてまとめてます。参考記事の内容を自分なりに省略しているので詳細は参考記事をご覧ください。

## セミコロンが要らない
タイトルの通り過ぎてこれ以上書くことがないですが、文末にセミコロン付けなくていいらしいので１タイプ手間が減りますね！！
個人的には普段C系の言語を触っているので違和感しか感じませんが笑

## 型の指定が要らない
C/C++などでは変数を宣言する際に型を明示しなければなりません。

```C++:C++
int num = 100;
```
これがPythonだとこうなります。

```Python:Python
num = 100
```
C++やC#でいうautoやvar（型推論）的なことをPythonはデフォルトでやってるみたいですね。**（動的型付け）**
ただ、明示した方が良いこともあるので一長一短ですね。
**ちなみに関数の引数や戻り値も同様に型指定がありません。**

## 中括弧が要らない（ifやforに括弧が要らない）
ないないだらけですね笑

```Python:Python
num = 77
if num % 2 == 0:
  print("偶数です")
else:
  print("奇数です")
```
中括弧がない代わりに**：（コロン）**で条件と処理を分けてるみたいですね。**インデントをすることで階層を判断するみたいです**
またifやfor、whileなどの条件に括弧をつけないそうです。
これなら中括弧の位置で戦争することが無いので平和だぁ...

## switch～case、do～whileが無い
タイトルの通りありません。do～whileについてはほぼ使わないんですけどね。
switchの代わりにif～elif～elseで代用するみたいです。else ifではなくて**elif**みたいなので注意。（なぜ省略したんだろ...）

## リストに型の制約がない
Cでいう配列なのですが、**配列と違いPythonのリストは型の制約がない**ので数値型や文字列が混在していても大丈夫なようです。

## Pythonのforは拡張for（C#でいうforeach）

```Python:Python
arrayList = ["cat",100,25.25,"Python"]

#リスト内をぶん回します
for array in arrayList:
   print(array)

#indexで指定してforを回したい場合
for index in range(0,10):
  print(index)
```
上のコードのコメントの通りです。rangeを使うことで0から9の配列を用意しています。
ちなみにコメントは**// の代わりが # で /＊～＊/ の代わりが ''' ～ '''**です。

## 演算子系
- インクリメント・デクリメント演算子が存在しない**（+=や-=では使える）**
- //（小数点以下を切り捨て、整数値を低い方に合わせる）や**（べき乗）がある
- 論理演算の&& や || 、! が **and、 or、 not**という予約語として扱われる。

## 関数
Pythonの関数は関数オブジェクトとして扱われています。

```Python:Python
def Add(x,y):
  return x + y
```
前述したとおり型指定が要らないのでこういう風に描けます。手前に**def**を付けたら関数です。物凄くシンプルで好き。
しかもこれの凄いところが型指定が無いのでこんなこともできます。

```Python:Python
print(Add(2,5))
print(Add(1.6,4.8))
print(Add("Hello","World"))
```
C++やC#でいうテンプレート関数として扱えます。（<>で型指定しないのが便利すぎる）
ただ関数のオーバーロードが出来ないそうです。似たようなことをしようと思ったらデフォルト引数を用いればできるみたい。

## pass文
pass文っていう処理書かなくてエラー出ずに通るっていう文があります。

```Python:Python
def AddPosition():
  #TODO:後で実装
  pass
```
こんな感じで後で実装したいときとかにpass文を使うそうです。なるほどーって感じです。

## その他
- import が Cでいう #include 
- 連想配列(dict)、タプルが標準で使える
- const や readonly、finalなどの定数のキーワードが無い。（慣習で大文字の変数は定数と扱っているみたい）
- public や private などのアクセス指定子がない。（慣習でprivateなものには _を １つ付けるとかなんとか）
- virtualやoverrideがない。（継承して同名のメソッドを定義すれば可能）
- 多重継承が可能。（その代わりjavaでいうインターフェースがない）

#まとめ
ぱーっと基本的な文法についてはこんなものかなと思います。C++やC#でもあるような機能は省いています。詳細は参考記事をご覧ください。
軽く勉強してみて感じたのは可読性の高いコードを書きやすいなと思いました。
今後はPythonを用いて自動化やAIについての勉強もできたらなと思います。

またPythonについてご意見やアドバイスがありましたら気軽にコメントくださると嬉しいです！

#参考記事
C言語系プログラマのためのPython入門
https://qiita.com/shiracamus/items/fd35c685e9679323471f

C#エンジニアが初めてpythonを学習して感じた違い
https://qiita.com/CEML/items/29944cbeb8e38171a630

C#からPythonに乗りかえるための両者の比較
https://qiita.com/kent-u/items/e6b210d38ca39b4cd107

C#erがPythonを勉強したので、違いについて比較しながら述べてみる　その１　構文
https://hiroronn.hatenablog.jp/entry/20170717/1500281854

Python入門
https://python.keicode.com/