Python的from和import用法


import使一個變量名引用整個模塊對象,因此必須通過模塊名稱來得到該模塊的屬性,比如我們導入一個數學計算的模塊 math:

import math
print math.pi #導出圓周率的值

>>>3.14159265359
    我們導入math模塊,在python模塊學習中我們會知道,這樣做會得到名math的對象,這個模塊對象包含了pi這樣的常量,以及一些其它的方法。我們如果直接訪問 pi,不加math這個前綴會發生什么情況呢?

print pi

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    print pi
NameError: name 'pi' is not defined
      程序拋出了一個名為“NameError”的錯誤。這個時候我們可以用from這個方法來實現可以直接用pi這個方法。from會把變量名復制到另一個作用域,所以它就可以直接在腳本中使用復制后的變量名,而不用通過模塊,例如:

from math import pi
print pi
>>>3.141592653589793
這樣我們就可以直接輸出 pi的值了,而不會報錯,不需要加那個模塊名加句號。有的朋友可能感覺還是比較麻煩,有會有更快速、更省事的Python模塊導入方法呢?還真有。

from math import *
pi
cos(pi)
>>>3.141592653589793
>>> -1.0
     這樣就不需要一個一樣導入模塊內部的方法了,一次性的將所有python 調用函數方法導入,好處是代碼看起來非常簡潔,但是如果同時導入多個模塊,要考慮模塊方法名沖突等這些問題,至於怎么樣使用,要看你的使用環境 。

from :https://www.iplaypy.com/jinjie/from-import.html

 

from語句有破壞命名空間的潛質。如果使用from導入變量,變量碰巧和作用域中現有變量重名,變量就會被悄悄的覆蓋掉。
使用import語句時就不存在這種問題,因為必須通過模塊名才能獲取其內容。不過,使用from時,只要你了解並預料到可能發生這種事,在實際情況下這就不是一個大問題了,尤其是當你明確列出導入變量名時(例如,from module import x, y, z)。
另一方面,from module import *形式的確可能破壞命名空間,讓變量名難以理解,尤其是在導入一個以上的文件時。
  比較務實的建議是:簡單的模塊一般傾向於使用import,而不是from。多數的from語句是用於明確列舉想要的變量,而且限制在每個文件中只用一次from *形式。這樣一來,任何無定義的變量名都可以認為是存在於from *所引用的模塊內。當你必須使用兩個不同模塊內定義的相同變量名變量時,才真的必須使用import,這種情況下不能使用from。

 

二、Python中的模塊和包
    每個.py文件都是可以認為是一個Python模塊,.py文件中可以包含類、方法、變量和常量(Python還沒有嚴格意義上的常量,只是約定大寫的變量作為常量),文件內也可以直接寫所有的邏輯語句並在加載時從上之下直接執行,這與其他解釋型語言是類似的。例如我們選擇在文件夾ModuleAndPackage中創建一個文本文件person.py文件即創建了一個簡單的Python模塊,

      Python需要去某些固定的路徑下去查找Python模塊,上面我們設置在ModuleAndPackage中查找。但是這些路徑下也是有目錄層次的,Python是如何查找子目錄中的模塊呢?特別是引用第三方包時,我們也需要知道一定的層次關系。實際上,Python通過目錄和文件構建包結構,並且包是層層嵌套的,這樣就構成了包內的訪問路徑。例如我們在ModuleAndPackage文件夾下,創建一個文件夾animal,里面創建一個文本文件pet.py。

     那么如何引用pet.py這個模塊呢?按照Python的約定,需要在animal文件夾中創建名為__init__.py的空文本文件,以標識animal文件夾是一個包。倘若animal文件夾內還有文件夾作為包,也必須包含__init__.py文件。這樣就層層標識了訪問的路徑。

   簡答來說,只要Python模塊在其執行環境配置的搜索路徑中,並且其所在位置是包結構的一部分,那么我們就可以引用該模塊。

from:https://www.cnblogs.com/qingspace/archive/2016/03/16/5284480.html
————————————————
版權聲明:本文為CSDN博主「菜鳥知識搬運工」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_30815237/article/details/93203934

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM