読者です 読者をやめる 読者になる 読者になる

猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

モジュールの読み込み

Ryuソースコード
>>> import itertools
>>> app_lists = ['app1', 'app2,app3']
>>> app_lists = [app for app in itertools.chain.from_iterable(app.split(',') for app in app_lists)]
>>> print app_lists                                                            
 ['app1', 'app2', 'app3']
>>> type(app.split(',') for app in app_lists)
<type 'generator'>

itertools.chain.from_iterableに関して

 ここを参考にしました。あまり見かけることのない構文ですが、以下の関数と同じ働きをします。

@classmethod
def from_iterable(iterables):
    # chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
    for it in iterables:
        for element in it:
            yield element

 引数としてイテレータを生成するジェネレータを、ジェネレータ式から生成して用いています。ジェネレータに関してはここを参照してください。

>>> from ryu import utils
>>> import inspect
>>> from ryu.base.app_manager import RyuApp
>>> name = 'ryu.app.rest.py'
>>> mod = utils.import_module(name)
>>> print mod
<module 'ryu.app.rest' from '/Library/Python/2.7/site-packages/ryu/app/rest.pyc'>


>>> clses = inspect.getmembers(mod, lambda cls: (inspect.isclass(cls) and
...                                                      issubclass(cls, RyuApp)))
>>> print clses
[('RestAPI', <class 'ryu.app.rest.RestAPI'>)]
>>> type(clses)
<type 'list'>
>>> clses[0]
('RestAPI', <class 'ryu.app.rest.RestAPI'>)
>>> type(clses[0])
<type 'tuple'>
>>> type(clses[0][1])
<type 'type'>
>>> clses[0][1]
<class 'ryu.app.rest.RestAPI'>
>>> clses[0][0]
'RestAPI'