基本自分で何か作り始める時はnode.jsでやってしまうので、既存のプロジェクトに参加する時とか他者のコードを読む時くらいしかpythonを使ってませんでした。ふと、ここらでおさらいしようと思いまして、node.js(JavaScript)ベースの知識からpythonを始める際のとっかかりをまとめてみました。基本Python3系で確認してます。
環境設定
node.jsユーザーならnとかnvmとかのバージョン管理ツールや、パッケージマネージャーとしてnpmを活用していたことでしょう。pythonではそれがpyenvだったりpipだったりになります。この辺は導入記事がすぐにみつかるのでググった方が早いでしょうw
- n -> pyenv
- npm -> pip
テスト(doctest)
pythonにはdoctestというテストのためのモジュールがあるそうです。非常に便利そうなので紹介します。
import doctest
def hoge():
'''hoge function test
>>> hoge()
'hote'
'''
return 'hoge'
if __name__ == "__main__":
doctest.testmod()
こんなふうに'''
で囲んだ領域にテストを書いて、doctest.mod()
を実行します。この例では>>> hoge()
を実行すると'hote'
が返ってくるというテストになります。test.py
を実行すると、hoge()
は'hoge'
を返すので、期待の動作と違うよとエラーが返ってきます。正しく動作したときは何も出力されませんが、下のように-v
をつけるとテストの詳細が出力されます。
python test.py -v
if __name__ == "__main__":
の意味
参考:【Python入門】モジュールを扱う際に重要な「if name == ‘main’:」とは?
__name__
にはモジュール名が入り、直接ファイルを実行した場合はモジュール名が__main__
になるので、if __name__ == "__main__":
はファイルを直接実行した場合に処理することを示すそうです。
辞書型 と json型
参考:PythonにおいてのJSONファイルの取扱いあれこれ
jsonみたいな書き方するとpythonでは辞書型として扱われます。
def print_dict():
''' print_dict test
>>> print_dict()
<class 'dict'>
1
2
{'hoge': 1, 'fuga': 2}
'''
dict = {'hoge':1,'fuga':2}
print(type(dict))
print(dict['hoge'])
print(dict['fuga'])
print(dict)
jsonファイルを読み込みたいときはjsonモジュールを使います。json.load
で読み込むと、辞書型で扱われるようです。外部コンフィグファイルなどを利用する場合は下のようにopen
で開いてjson.load
すれば良さそうです。
import json
def print_json():
''' print_json test
>>> print_json()
<class 'dict'>
{'hoge': 1, 'fuga': 2}
'''
json_file = open('config.json','r')
json_dict = json.load(json_file)
print(type(json_dict))
print(json_dict)
おまけ
辞書型のデータへは[]
でkey
を指定して要素にアクセスしますが、JavaScripterのみなさんは.
でアクセスしたくなるでしょう。その方法がPython dictに対しAttributeでアクセスできるようにするに掲載されていました。ご参考まで。
httpリクエスト
pythonでhttpリクエストするのに、requests
モジュールを使います。シンプルにGET
リクエストを送るのは以下の通り。
import requests
requests.get(url)
よくありがちなheader
を指定してjson
データをPOST
送信。ベーシック認証も。というような時は以下のような形になります。
import requests
import json
url = 'http://...'
headers = {'Content-Type':'text/plain'}
jsonData = {'hoge':'fuga'}
requests.post(
url,
headers=headers,
data=json.dumps(jsonData),
auth=(user,passwd)
)
モジュール化
参考
node
ではmodule.exports
してrequire
したり、最近だとimport
とかを使ったりするかと思います。おなじように(?)python
で簡単なclassを作ってモジュール化し、読み込んで使ってみたいと思います。
Mymodule
クラスを作ってみます。pythonのコンストラクタは__init__()
で定義するようです。
class Mymodule(object):
def __init__(self, hoge):
self.hoge = hoge
def print_hoge(self):
print(self.hoge)
~.py
はすべてモジュールだそうです。下のようにmymodule
モジュールからMymodule
クラスをimport
します。
from mymodule import Mymodule
mymodule = Mymodule('fuga')
mymodule.print_hoge()
#fuga が出力される
おわりに
情報が間違えているとか、もっとこうした方がイケてるなどあればご指摘ください〜