<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      之乎者也,阿彌陀佛

      軟件設計的原則就是,化繁為簡,化難為易,把人的思維集中在簡單的領域,然后通過有序的組合實現復雜的邏輯。

        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      python中的Module是比較重要的概念。常見的情況是,事先寫好一個.py文 件,在另一個文件中需要import時,將事先寫好的.py文件拷貝 到當前目錄,或者是在sys.path中增加事先寫好的.py文件所在的目錄,然后import。這樣的做法,對于少數文件是可行的,但如果程序數目很 多,層級很復雜,就很吃力了。
      有沒有辦法,像Java的Package一樣,將多個.py文件組織起來,以便在外部統一調用,和在內部互相調用呢?答案是有的。
      主要是用到python的包的概念,python __init__.py在包里起一個比較重要的作用
      要弄明白這個問題,首先要知道,python在執行import語句時,到底進行了什么操作,按照python的文檔,它執行了如下操作:
      第1步,創建一個新的,空的module對象(它可能包含多個module);
      第2步,把這個module對象插入sys.module中
      第3步,裝載module的代碼(如果需要,首先必須編譯)
      第4步,執行新的module中對應的代碼。

      在執行第3步時,首先要找到module程序所在的位置,其原理為:
      如 果需要導入的module的名字是m1,則解釋器必須找到m1.py,它首先在當前目錄查找,然后是在環境變量PYTHONPATH中查找。 PYTHONPATH可以視為系統的PATH變量一類的東西,其中包含若干個目錄。如果PYTHONPATH沒有設定,或者找不到m1.py,則繼續搜索 與python的安裝設置相關的默認路徑,在Unix下,通常是/usr/local/lib/python。
      事實上,搜索的順序是:當前路徑 (以及從當前目錄指定的sys.path),然后是PYTHONPATH,然后是python的安裝設置相關的默認路徑。正因為存在這樣的順序,如果當前 路徑或PYTHONPATH中存在與標準module同樣的module,則會覆蓋標準module。也就是說,如果當前目錄下存在xml.py,那么執 行import xml時,導入的是當前目錄下的module,而不是系統標準的xml。

      了解了這些,我們就可以先構建一個package,以普通module的方式導入,就可以直接訪問此package中的各個module了。

      Python中的package定義很簡單,其層次結構與程序所在目錄的層次結構相同,這一點與Java類似,唯一不同的地方在于,python中的package必須包含一個__init__.py的文件。
      例如,我們可以這樣組織一個package:

      package1/
          __init__.py
          subPack1/
              __init__.py
              module_11.py
              module_12.py
              module_13.py
          subPack2/
              __init__.py
              module_21.py
              module_22.py
          ……

      __init__.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。當然,__init__.py中也可以設置相應的內容,下文詳細介紹。

      好了,現在我們在module_11.py中定義一個函數:

      def funA():
          print "funcA in module_11"
          return

      在頂層目錄(也就是package1所在的目錄,當然也參考上面的介紹,將package1放在解釋器能夠搜索到的地方)運行python:

      >>>from package1.subPack1.module_11 import funcA
      >>>funcA()
      funcA in module_11

      這樣,我們就按照package的層次關系,正確調用了module_11中的函數。

      細心的用戶會發現,有時在import語句中會出現通配符*,導入某個module中的所有元素,這是怎么實現的呢?
      答案就在__init__.py中。我們在subPack1的__init__.py文件中寫

      __all__ = ['module_13', 'module_12']

      然后進入python
      >>>from package1.subPack1 import *
      >>>module_11.funcA()
      Traceback (most recent call last):
        File "", line 1, in
      ImportError: No module named module_11

      也就是說,以*導入時,package內的module是受__init__.py限制的。

      好了,最后來看看,如何在package內部互相調用。
      如果希望調用同一個package中的module,則直接import即可。也就是說,在module_12.py中,可以直接使用
      import module_11

      如果不在同一個package中,例如我們希望在module_21.py中調用module_11.py中的FuncA,則應該這樣:
      from module_11包名.module_11 import funcA

       

      包機制

      # a.py
      def add_func(a,b):
          return a+b

      # b.py
      from a import add_func # Also can be : import a

      print ("Import add_func from module a")
      print ("Result of 1 plus 2 is: ")
      print (add_func(1,2))    # If using "import a" , then here should be "a.add_func"

      module可以定義在包里面.Python定義包的方式稍微有點古怪,假設我們有一個parent文件夾,該文件夾有一個child子文件夾.child中有一個module a.py . 如何讓Python知道這個文件層次結構?很簡單,每個目錄都放一個名為_init_.py 的文件.該文件內容可以為空.這個層次結構如下所示:

      parent 
        --__init_.py
        --child
          -- __init_.py
          --a.py

      b.py
      那么Python如何找到我們定義的module?在標準包sys中,path屬性記錄了Python的包路徑.你可以將之打印出來:
      import sys

      print(sys.path)
      通常我們可以將module的包路徑放到環境變量PYTHONPATH中,該環境變量會自動添加到sys.path屬性.另一種方便的方法是編程中直接指定我們的module路徑到sys.path 中:
      import sys
      import
       os
      sys.path.append(os.getcwd()+'\\parent\\child'
      )
      print
      (sys.path)
      from a import
       add_func
      print
       (sys.path)
      print ("Import add_func from module a"
      )
      print ("Result of 1 plus 2 is: "
      )
      print
       (add_func(1,2))

      知識點:

            如何定義模塊和包

            如何將模塊路徑添加到系統路徑,以便python找到它們

            如何得到當前路徑

      原文地址:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html

      posted on 2013-01-02 12:23  搏擊的小船  閱讀(14577)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 99热这里只有成人精品国产 | 亚洲精品一区二区三区色| 国产美女永久免费无遮挡| 光棍天堂在线手机播放免费| 精品黄色av一区二区三区| 粉嫩在线一区二区三区视频| 一本色道婷婷久久欧美| 午夜精品区| 一区二区中文字幕av| 国产一区二区三区小说| 18黑白丝水手服自慰喷水网站| 宅男噜噜噜66网站高清| 在线 欧美 中文 亚洲 精品| 免费无码影视在线观看mov| 成人免费亚洲av在线| 欧美变态口味重另类在线视频| 精品国产乱码久久久久久影片| 色噜噜噜亚洲男人的天堂| 国产精品99中文字幕| 亚洲区中文字幕日韩精品| 亚洲嫩模一区二区三区 | 久久这里都是精品二| 国产日韩欧美亚洲精品95| 国产精品有码在线观看| 色综合久久精品中文字幕| 有码中文字幕一区三区| 不卡一区二区国产在线| 国产亚洲一区二区三区av| 婷婷亚洲综合五月天小说| 91高清免费国产自产拍| 人妻中出无码中字在线| 国产午夜亚洲精品国产成人| 午夜精品福利一区二区三| 国产精品欧美亚洲韩国日本久久| 色噜噜狠狠一区二区三区果冻| 亚洲国产成人av国产自| 99国产精品永久免费视频| 国产日韩精品一区二区三区在线| 深夜福利啪啪片| 亚洲欧美日韩成人综合一区| 云浮市|