# 完全に個人的なメモ ### hydrogenを使ってplotlyが実行できない。 何をやってもエラーが解決されず、絶望したが再起動したら直った。色々やったので直接的な解決策がこれで正しいいのか分からないが、おそらく以下の通りであろう。 1. ipythonをインストール 2. エラー時に表示されるコマンドを実行して再起動すると直った。 ### ファイルを開く際にUnicodeDecodeErrorに襲われる。 ` UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position ` こンな感じのエラーだ。Pythonのエンコードはデフォルトで`utf-8`なのでそれ以外のファイルを開くと言いそうな。 簡単な解決方法として読み込むファイルの文字コードを`utf-8`に変換するそれだけで良い。 openメソッドの引数は以下のようになっている。 ```python open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) ``` 引数のmodeは以下のような設定が可能. | 文字 | 意味 | |------|----------------------------------------------------------| | 'r' | 読み込み用に開く (デフォルト) | | 'w' | 書き込み用に開き、まずファイルを切り詰める | | 'a' | 書き込み用に開き、ファイルが存在する場合は末尾に追記する | | 'x' | 排他的な生成に開き、ファイルが存在する場合は失敗する | | 'b' | バイナリモード | | 't' | テキストモード (デフォルト) | | '+' | ディスクファイルを更新用に開く (読み込み/書き込み) | | 'U' | ユニバーサル改行 モード (非推奨) | | | | ### 関数の可変長引数 引数の先頭に`*`をつけることで可変長引数とすることができる。 ```python # 引数2つ、戻り値なしの関数の定義 def function(*arg): print(sum(arg)) # 引数2つを入れて、関数の呼び出し function(2, 4) ``` この時、`arg`はタプル型であることに注意しなければならない。 ## 正規表現に関して ```python import re ``` で使う。 使える関数は以下の通り * 文字列の先頭がパターンにマッチするかを調べる`match()` * 先頭に限らずパターンにマッチするかを調べる`search()` * マッチする部分すべてをリストで返す`findall()` * マッチする部分すべてをイテレータで返す`finditer()` * マッチした部分を置換する`sub()、subn()` * パターンで文字列を分割する`split()` * 正規表現オブジェクトをコンパイルする`compile()` 検索を行う前に正規表現のパターンをコンパイルするか、関数の引数にそのままパターンを渡す方法がある。 パターンをコンパイルするというのは、compile()関数を使ってコンパイルしたパターンをメソッド?クラス?として使うようだ。 ```python import re regex = r'ab+' text = "abbabbabaaabb" pattern = re.compile(regex) matchObj = pattern.match(text) ``` この時、パターンの前にある`r`は文字列のバックスラッシュをそのままバックスラッシュとして扱えるようにするための物 またパターンにそのまま引数として与える場合は以下のようにかく。 ```python import re regex = r'ab+' text = "abbabbabaaabb" matchObj = re.match(regex, text) ``` ## Hydrogenに関するメモ ### 実行結果の表示を別ウィンドで command+shift+pで`Hydrogen : Toggle Output Area` とするといい。 ### 実行結果の削除 実行を繰り返しながらコードを書いていると実行結果が鬱陶しくなる時がある。 そんな時は`Ctrl+Shift+BackSpace` ## クラスに関して [【Python入門】Pythonにおけるclassの使い方とは?-Qiita](https://qiita.com/Morio/items/0fe3abb58fcaff229f3d) ### if __name__ == ‘__main__’:について pythonのファイルは直接実行されると__name__という変数が自動で作られ、さらに実行しているスクリプトのモジュール名が自動的に代入される。 Pythonスクリプトを直接実行した時には、そのスクリプトファイルは「__main__」という名前のモジュールとして認識される。 「if __name__ == ‘__main__’:」の意味は、「直接実行された場合のみ実行し、それ以外の場合は実行しない」という意味 ちなみに、atomで`ifmain`とタイプすると自動補完で出せる。 ## リスト全体に同じ関数を適用 [map関数 listの全て要素に対して同じ処理を行う](http://www.python.ambitious-engineer.com/archives/670)