<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 1. __path__ ` __init__.py`的常用變量__path__, 默認情況下只有一個元素, 就是當前包的路徑, 修改__path__, 可以修改此包內的搜索路徑. ~~~ if __name__ == '__main__': import pythonpackage # 導入pythonpackage包,其__init.py自動執行 ~~~ ![](https://box.kancloud.cn/4949e0c1096acd37b63d6177910a0218_1176x614.png) 當前此包的搜索路徑:['E:\\PythonTest\\pythonpackage'] ### 舉例1: 在Utils下增加2個目錄Linux和Windows, 并各有一個echo.py文件, 目錄如下 ~~~ Sound/Utils/ |-- Linux 目錄下沒有__init__.py文件, 不是包, 只是一個普通目錄 | `-- echo.py |-- Windows 目錄下沒有__init__.py文件, 不是包, 只是一個普通目錄 | `-- echo.py |-- __init__.py |-- echo.py |-- reverse.py `-- surround.py ~~~ 三個echo.py的文件內容如下: ~~~ ltt@hz171-14:~/tmp$cat Sound/Utils/echo.py print"I'm Sound.Utils.echo" ltt@hz171-14:~/tmp$cat Sound/Utils/Windows/echo.py print"I'm Windows.echo" ltt@hz171-14:~/tmp$cat Sound/Utils/Linux/echo.py print"I'm Linux.echo" ~~~ `Sound/Utils/__init__.py`是空文件,則結果如下: ~~~ >>>import Sound.Utils.echo # 此時導入是Utils下的echo模塊 I'm Sound.Utils.echo ~~~ 把`Sound/Utils/__init__.py`改成: ~~~ import sys import os print"Sound.Utils.__init__.__path__ before change:",__path__ dirname=__path__[0] if sys.platform[0:5]=='linux': __path__.insert(0,os.path.join(dirname,'Linux')) else: __path__.insert(0,os.path.join(dirname,'Windows')) print"Sound.Utils.__init__.__path__ AFTER change:",__path__ ~~~ 則結果如下: ~~~ # 導入echo模塊時,因為Utils包搜索路徑變成了:['Sound/Utils/Linux','Sound/Utils'],所以搜索到了Sound/Utils/Linux下的 # echo模塊,所以會執行可執行語句print >>>import Sound.Utils.echo Sound.Utils.__init__.__path__beforechange:['Sound/Utils'] Sound.Utils.__init__.__path__AFTERchange:['Sound/Utils/Linux','Sound/Utils'] I'm Linux.echo ~~~ ### 舉例2 ![](https://box.kancloud.cn/df3468e791b5562d43721d5c66f0ad34_390x149.png) ~~~ def walk_modules(path): """Loads a module and all its submodules from the given module path and returns them. If *any* module throws an exception while importing, that exception is thrown back. For example: walk_modules('scrapy.utils') """ from pkgutil import iter_modules # 遍歷所有python包 mods = [] mod = import_module(path) # 導入包中的__init__.py模塊,__init__.py模塊中含有__path__變量,指向當前包路徑 mods.append(mod) if hasattr(mod, '__path__'): for _, subpath, ispkg in iter_modules(mod.__path__): fullpath = path + '.' + subpath if ispkg: mods += walk_modules(fullpath) # 如果是包(含有__init.py文件),繼續遍歷 else: submod = import_module(fullpath) # 如果是模塊直接導入 mods.append(submod) return mods if __name__ == '__main__': module = walk_modules('pythonpackage') print(module) ~~~ ~~~ ['E:\\PythonTest\\pythonpackage'] # __init__.py模塊 print(__path__) ['E:\\PythonTest\\pythonpackage\\test'] # __init__.py模塊 print(__path__) [<module 'pythonpackage' from 'E:\\PythonTest\\pythonpackage\\__init__.py'>, <module 'pythonpackage.packagtest' from 'E:\\PythonTest\\pythonpackage\\packagtest.py'>, <module 'pythonpackage.settings' from 'E:\\PythonTest\\pythonpackage\\settings.py'>, <module 'pythonpackage.test' from 'E:\\PythonTest\\pythonpackage\\test\\__init__.py'>, <module 'pythonpackage.test.packagtest1' from 'E:\\PythonTest\\pythonpackage\\test\\packagtest1.py'>] ~~~ 注意: 1. 包的__init.py文件也會被當做模塊導入 2. from pkgutil import iter_modules遍歷包,返回 ## 2. ` __dict__` ~~~ __dict__是一個字典,鍵為屬性名,值為屬性值; dir()是一個函數,返回的是列表 list,dir()用來尋找一個對象的所有屬性,包括__dict__中的屬性,__dict__是dir()的子集; ~~~ ~~~ __author__ = 'dailin' import logging import sys class LogTest(object): def __init__(self, name=None, **kwargs): if name is not None: self.name = name elif not getattr(self, 'name', None): raise ValueError("%s must have a name" % type(self).__name__) self.__dict__.update(kwargs) @property def logger(self): logger = logging.getLogger(self.name) # 獲取一個logger對象 logger.setLevel(logging.INFO) # 設置日志級別 fmt = logging.Formatter("%(asctime)s - %(spider)s - %(message)s") # 輸出格式 h_console = logging.StreamHandler(sys.stdout) # 處理器 h_console.setFormatter(fmt) # 向處理器中添加輸出格式 logger.addHandler(h_console) # 把處理器添加到logger對象當中 return logging.LoggerAdapter(logger, {'spider': self}) if __name__ == '__main__': log = LogTest("tuna",hell='mimi') print(log.__dict__) print(log.logger.info("hello")) ~~~ 輸出: ~~~ {'name': 'tuna', 'hell': 'mimi'} 2018-04-08 16:48:20,161 - <__main__.LogTest object at 0x00000000025873C8> - hello None ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看