LoginSignup
3
2

More than 5 years have passed since last update.

Node.jsユーザーのためのpython事始め

Last updated at Posted at 2018-04-02

基本自分で何か作り始める時はnode.jsでやってしまうので、既存のプロジェクトに参加する時とか他者のコードを読む時くらいしかpythonを使ってませんでした。ふと、ここらでおさらいしようと思いまして、node.js(JavaScript)ベースの知識からpythonを始める際のとっかかりをまとめてみました。基本Python3系で確認してます。

環境設定

node.jsユーザーならnとかnvmとかのバージョン管理ツールや、パッケージマネージャーとしてnpmを活用していたことでしょう。pythonではそれがpyenvだったりpipだったりになります。この辺は導入記事がすぐにみつかるのでググった方が早いでしょうw

  • n -> pyenv
  • npm -> pip

テスト(doctest)

参考:Pythonでdoctestを試してみる

pythonにはdoctestというテストのためのモジュールがあるそうです。非常に便利そうなので紹介します。

test.py
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では辞書型として扱われます。

main.py
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すれば良さそうです。

main.py
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送信。ベーシック認証も。というような時は以下のような形になります。

main.py
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__()で定義するようです。

mymodule.py
class Mymodule(object):
    def __init__(self, hoge):
        self.hoge = hoge

    def print_hoge(self):
        print(self.hoge)

~.pyはすべてモジュールだそうです。下のようにmymoduleモジュールからMymoduleクラスをimportします。

main.py
from mymodule import Mymodule

mymodule = Mymodule('fuga')
mymodule.print_hoge()
#fuga が出力される

おわりに

情報が間違えているとか、もっとこうした方がイケてるなどあればご指摘ください〜

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2