Pythonチュートリアルまとめ


#print文

```python:print文
%s # 文字列
%r・・・
%d # 整数
%f # 固定小数点表記
%1.5f # 固定小数点表記(,5のところは小数以下桁)
%e # 指数表記
```

```ruby
print("数値1=%f, 数値2=%.3f" % (1/3, 1/3))
数値1=0.333333, 数値2=0.333
```

引数"end"に値を入れることで、末尾に何をつけるかを設定

```ruby
print("a", end=",")
print("b", end=",")
print("c")
```

#対話モード時に最後に表示した式を格納している変数

```ruby
>>> tax = 12.5 / 100
>>> price= 100.5
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_,2)
113.06
```
#モジュールの検索パス

1.ビルトインモジュールの中
2.sys.path変数で得られるディレクトリのリスト
3.入力スクリプトのあるディレクトリ
4.PYTHONPATH
5.インストールごとのデフォルト



#コーディングスタイル
Pythonのコーディングスタイルを **PEP8** という

```python:コーディングスタイル
・インデントはスペース４つ
・タブ禁止
・４スペースは狭いインデントと広いインデントのちょうどよい妥協点。
・コメント行の独立。
・docstring
・エンコーディングは、UTF-8(default)・ASCII
・演算子の周囲やカンマの後ろにスペースを入れる
・カッコのすぐ内側にはスペースを入れない
```

#シーケンスオブジェクトの比較

```
・どちらかのシーケンスがなくなるまで比較
・同じ要素は比較しない
・違う要素の比較結果
```

#クラス変数とインスタンス変数
・クラス変数とは・・・**すべて**のインスタンスが**共有**するメモリ
・インスタンス変数とは・・・**各**インスタンスに**固有**のメモリ 

以下は間違いの例・・・クラス変数にmutable(変更可)を使ってはいけない

```python:クラス変数とインスタンス変数
class Sample:
  c_list = []・・・クラス変数の使い方を間違えた例
  def add_c_list(self,data):
    self.c_list.append(data)

print("出力結果:", end=" ")
sample1 = Sample()
sample1.add_c_list("データ1")

sample2 = Sample()
sample2.add_c_list("データ2")

for item_data in sample1.c_list:
  print(item_data, end=" ")
=============================
出力結果: データ1 データ2
```

#エスケープシーケンスの無効化
#len関数

```
エスケープシーケンスは１文字でカウント
改行の\nは１文字としてカウント
```
#range関数

```python:range関数
>>>print(range(5))
range(0,5)

・range関数は反復可能体（イテラブル）
・range関数はオブジェクト
```

#ビルトイン関数

```python:ビルトイン関数
>>>dir(モジュール名) #dirがビルトイン関数。モジュールが定義している名前をすべて表示。
```
#1章 食欲をそそってみようか

```python:
・データ型の一般性が高く、問題領域は、Awk・Perlより広く、他言語と同等以上
```
#2章　インタープリタの使い方

```python:インタープリタの起動
>>> python -c コマンド
>>> python -m モジュール名
>>> 
```

#3章　気楽な入門編

```python:演算子
・べき乗演算子は、他の演算子より優先順位が高いため例外的に右から左へと評価される
・演算対象の型が混同していた場合(int,float)、整数は浮動小数点に変換される
```

```python:文字列の特徴
>>> word[10000] # 大きすぎるインデックスを指定するとエラー
IndexError  Traceback (most recent call last)
<ipython-input-4-47f442646512> in <module>
----> 1 Zen[50]

IndexError: string index out of range

>>> word[10000:20000] # 範囲外のスライシングはうまく処理
''
```

```python:複数行にまたがる改行文字を取り消す
print("""\
Usage:thingy[options]
    -h                Display this usage message
    -H hostname       Hostname to connect to
""")
```

```python:対話モードの電卓。アンダースコア
最後に表示した式を変数「_」（アンダースコア）に代入してある。
>>> tax = 12.5/100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_,2)
113.006
```

```python:対話モード
列挙された文字リテラルは自動的に連結される

>>> 'Py' 'thon'
'Python'
```


#4章　制御構造ツール

```python:リストのアンパック
>>> list(range(3,6)) # 一般的な個別の引数を使ったコール
[3,4,5]

>>> args = [3,6] # ここからは特殊な方法
>>> list(range(*arg))　# *arg を使うとアンパックされる。ただの　3,6　になる。
[3,4,5] # range(3,6) と同じ

>>> 
```


```python:ドキュメンテーション(docstring)
・１行目：簡潔な要約。大文字始まる、ピリオド終わり。
・２行目：空白
・３行目：
```

```python:関数アノテーション
def 関数名(arg1: 'arg1の説明', arg2: 'arg2の説明', , ,)->'戻り値の説明':
    処理
```

```python:docstringと関数アノテーションの例
def my_func(n: 'この値から足し始める', m:'この値まで足す') -> 'nからmの合計値':
    """ nからmまでの合計を返す関数 """
    ret = 0
    for i in range(n, m+1):
        ret += i 
    return ret
```




#5章　データ構造

```python:リストをキューとして使う
>>> from collections import deque
>>> queue = deque(["A","B","C"]) # キューを作った
>>> queue.append("D") # Dを追加
>>> queue.popleft() # 最初を取出
>>> queue.pop() # 最後を取出
>>> queue.pop(idx) # idx番目を取出
```

```python:ディクショナリ
・キー：変更不能型
・値：変更可能型
・キーkeyの存在を確認、取得（検索）: in演算子
・値valueの存在を確認、取得（検索）: in演算子, values()
・キーkeyと値valueの組み合わせの存在を確認: in演算子, items()
```


```python:多次元リストのソート

```
```python:演算子
比較演算子 < <= == != is  is not  in  not in
```

```python:条件についての補足
・比較演算子 in および not in ・・・シーケンスの値の有無
・演算子 is および is not ・・・オブジェクトの比較
・ブール演算子 and および or・・・短絡演算子
・比較の組み合わせ（複数条件） if x<y and x>z
```

```python:演算子の優先順位
数値演算子　＞　比較演算子
```

```python:シーケンスの比較、その他の型の比較
・2つが基本的に同じシーケンスで、片方の長さが短い時は、この短い方が小となる。
・文字列の辞書的順序には、個々の文字のUnicodeコードポイント番号で比較
```

#6章　モジュールとパッケージ

```python:dir関数
>>> import sys,fibo
>>> dir(fibo)

・モジュールが定義している名前を確認するのに使う。
```
**モジュールの検索は、○○モジュールの場合、○○.pyを以下の順番で検索する**

```python:モジュールの検索パス
１．ビルトインモジュール内で探す
２．sys.path変数で得られるディレクトリのリストを使ってspam.pyを検索
　　２－１．入力スクリプトのあるディレクトリ
　　２－２．PYTHONPATH
　　２－３．インストールごとのデフォルト
```


```python:module
・モジュールは、ファイルである
・モジュールのファイルは、「.py」
```

```python:package
・パッケージはフォルダーである

>>> from パッケージ名 import モジュール名 #これを使うとモジュールを参照する際に短くてフルネームにする必要がない
>>> import パッケージ名.モジュール名 #これを使うとモジュールを参照する際に長くてフルネームにする必要がある。[ドット区切りモジュール名]と呼ぶ。
```

```python:package実装例

>>> import sound.effects.echo
>>> sound.effects.echo.echofilter()#サブモジュールのロード。参照はフルネーム。長くてダメ！！

>>> from sound.effects import echo
>>> echo.echofilter()#参照が短くて良い！！
```
```python:コンパイル済みPythonファイル
・Pythonは .py 以外に、Pythonコードをコンパイルした .pyc というファイルも実行できる
・インタプリタなので１行ごとにバイナリファイルに変換
・コンパイラはまとめてバイナリファイルに変換
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/c959c20c-d923-761f-2768-0d87db5e1808.png)

#8章 エラーと例外

```python:概要
・”エラー”は、「構文エラー」と「例外」に大別される
・"構文エラー"は「パース上のエラー」「構文解釈エラー」と呼ばれる
・”例外”は「文や式が正しくても、実行すると起こるエラー」である
```
```python:例外
ZeroDivisionError
NameError
TypeError
KeyboardInterrupt # キーボード割込例外 [Ctrl]+[c]
```
#9章　クラス


#10章　標準ライブラリめぐり（モジュール）
```python:モジュール名を参照短縮
>>> from パッケージ名.サブモジュール名 import モジュール名 # これを使うとモジュールを参照する際に短くてフルネームにする必要がない
>>> from パッケージ名.モジュール名 import クラス名 　　　　# これを使うとモジュールを参照する際に短くてフルネームにする必要がない
>>> from sklearn.preprocessing import StandardScaler
>>> import パッケージ名.モジュール名 #これを使うとモジュールを参照する際に長くてフルネームにする必要がある。[ドット区切りモジュール名]と呼ぶ。
```

```python:module
import os # オペレーティングシステムとやり取りする関数
import glob # ファイルをワイルドカード検索
import sys # コマンドライン引数を処理する
import re # 正規表現
import math # 浮動小数点数学
from struct import * # バイナリー
import random # ランダム
import collections # リスト
import logging # ログ取り
```
```python:コマンドライン引数
>>> import sys
>>> print(sys.argv)
```
```python:randomモジュール・・・無作為抽出のツール
>>> import random
>>> random.choice(['apple','banana','lemon']) # choice はリスト内から選択
'apple'
>>> random.sample(range(100),10) # sample は、第１引数から第２引数個を重複なく抽出
>>> random.random() # ランダムな浮動小数点

>>> radom.randrange(6) # range(6)からランダムに選んだ整数
```




#11章　標準ライブラリめぐり

```python:ログ取り
・ログ出力なのか、ユーザ(プログラム実行者)に伝えたい情報としての出力なのかを切り分けられる
・ログの種類をErrorやDebugのように、レベル分けが可能
・フォーマットを指定すれば、簡単に統一化された出力が可能
```
```python:ログの優先順位（左から優先順位が低い）
低い＜－　　　　　　　　　　　　－＞高い
DEBUG、INFO、WARNING、ERROR、CRITICAL
```


#12章　仮想環境とパッケージ

```python:pipによるパッケージ管理
>>> pip install パッケージ名 # 最新バージョンのパッケージをインストール 
>>> pip install パッケージ名 ==2.6.0 # 特定バージョンのパッケージをインストール
>>> pip install --upgrade パッケージ名 # 最新バージョンにアップグレード
>>> pip uninstall パッケージ名 # パッケージをアンインストール
>>> pip list # インストール済み確認
>>> pip freeze # インストール済み確認(出力形式がpip install)
>>> pip show パッケージ名 # パッケージの詳細表示　version,author,summar,説明hp
```

```python:仮想環境
>>> deactivate # 仮想環境終了
```

#14章　対話環境での入力行編集とヒストリ置換
```python:ソースコード・エンコーディング
・Pythonソースコードのエンコーディング：UTF-8
・敢えてエンコードを変える時は以下になる
#-*- coding:エンコーディング名 -*-
```

```python:インタープリタの終了
ctrl+d
>>>exit()
>>>quit()
```

```python:タブ補完とヒストリ編集
```

```python:対話型インタープリタ
bpython
IPython
```
```python:アクティベート状態から抜ける

```
```python:対話モードのプライマリプロンプト／セカンダリプロンプト
>>> 
...
```