- Python3.5從零開始學
- 劉宇宙
- 1757字
- 2020-11-28 16:07:07
6.2 import的使用
語言的學習只有在不斷深入后才能進一步發(fā)現(xiàn)其中隱藏的驚人特性,即使是簡單的print函數(shù),在不斷使用后也會發(fā)現(xiàn)更多使用方式,import將帶你進入一個更快捷的編程模式。
6.2.1 import語句
在講解import語句之前先看一個示例:
import math r=5 print('半徑為5的圓的面積為:%.2f' %(math.pi*r**2))
保存文件名為import_test.py。在cmd命令窗口執(zhí)行如下命令:
D:\python\workspace>python import_test.py 半徑為5的圓的面積為:78.54
上面的程序使用了import語句。
import math的意思為從Python標準庫中引入math.py模塊,這是Python中定義的引入模塊的方法。import的標準語法如下:
import module1[, module2[, ... moduleN]]
表示允許一個import導入多個模塊,但各個模塊間需要用逗號隔開。
當解釋器遇到import語句時,如果模塊在當前搜索路徑就會被導入。搜索路徑是一個解釋器,會先搜索所有目錄的列表。
當我們使用import語句時,Python解釋器怎樣找到對應的文件呢?這涉及Python的搜索路徑,搜索路徑由一系列目錄名組成,Python解釋器會依次從這些目錄中尋找引入的模塊。看起來很像環(huán)境變量,事實上可以通過定義環(huán)境變量的方式確定搜索路徑。搜索路徑是在Python編譯或安裝時確定的,被存儲在sys模塊的path變量中。查看搜索路徑的方式如下:
import sys print('Python的搜索路徑為:%s' % sys.path)
保存文件名為import_sys.py,在cmd命令窗口執(zhí)行結果如下:
D:\python\workspace>python import_sys.py Python的搜索路徑為:['D:\\python\\workspace','E:\\python\\pythoninstall\\python 35.zip','E:\\python\\pythoninstall\\DLLs','E:\\python\\pythoninstall\\lib','E:\\python\\pythoninstall', 'E:\\python\\pythoninstall\\lib\\site-packages']
由以上輸出結果看到,sys.path輸出了一個列表,第一項輸出的是執(zhí)行文件所在的目錄,即我們執(zhí)行Python解釋器的目錄(如果是腳本,就是運行腳本所在的目錄)。
了解搜索路徑的概念后,可以在腳本中修改sys.path引入一些不在搜索路徑中的模塊。
上面我們初步引入了import語句,除了用import引入模塊外,還有另一種方式引入模塊,先看交互模式下輸入的示例:
>>> from math import pi >>> print (pi) 3.141592653589793
上面的操作使用了from math import pi的方式,這是什么意思呢?
在Python中,from語句可以從模塊中導入指定部分到當前命名空間中,語法如下:
from modname import name1[, name2[, ... nameN]]
例如,from math import pi語句就是從math模塊中導入pi到當前命名空間,該語句不會將math整個模塊導入。比如在math模塊中還有sin、exp函數(shù),在這個語句里這兩個函數(shù)都使用不了,而在導入整個math模塊的語句中可以使用。在交互模式下輸入:
>>> import math >>>print(math.pi) #math.pi可以被輸出 3.141592653589793 >>>print(math.sin(1)) #math.sin(1)可以被輸出 0.8414709848078965 >>>print(math.exp(1)) #math.exp(1)可以被輸出 2.718281828459045 >>> from math import pi >>>print (pi) #pi可以被輸出 3.141592653589793 >>>print(sin(1)) #sin(1)不可以被輸出 Traceback (most recent call last): File "<pyshell#51>", line 1, in <module> print(sin(1)) NameError: name 'sin' is not defined >>>print(exp(1)) #exp(1)不可以被輸出 Traceback (most recent call last): File "<pyshell#52>", line 1, in <module> print(exp(1)) NameError: name 'exp' is not defined
由以上輸出結果可知,如果導入模塊,就會得到模塊中所有對象;如果指定導入某個對象,就只能得到該對象。
這樣做的好處是什么呢?先看如下示例:
>>>import math >>> print(math.pi) 3.141592653589793 >>> print(pi) Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> print(pi) NameError: name 'pi' is not defined >>> from math import pi >>> print(pi) 3.141592653589793
由上面的輸出結果可知,如果在導入math模塊時訪問pi對象,需要使用math.pi,直接使用pi訪問不了,會報錯。使用import語句后,可以直接訪問pi對象,不需要加上模塊名進行訪問。
如果要訪問模塊中多個對象,是否需要一個一個導入呢?如果要訪問math中的pi和sin,是否要寫兩個from math import語句?例如:
from math import pi from math import sin
當然不用,可以直接使用如下語句:
from math import pi, sin
可以從一個導入語句導入多個函數(shù),多個函數(shù)之間用逗號分割。
如果要訪問模塊中多個對象,是否需要一個一個導入呢?當然不用,可以直接使用如下語句:
from math import *
使用該語句可以將math中所有對象都引入,比如上面幾個報錯的情況就可以成功輸出結果了,例如:
>>> from math import * >>>print(pi) #pi可以被輸出 3.141592653589793 >>>print(sin(1)) #sin(1)可以被輸出 0.8414709848078965 >>>print(exp(1)) #exp(1)可以被輸出 2.718281828459045
由輸出結果看到,pi、sin、exp等函數(shù)都可以被正確輸出了。這是一個簡單地將項目中所有模塊都導入的方法。在實際開發(fā)中,這種聲明不建議過多使用,這樣不利于編寫清晰、簡單的代碼。只有想從給定模塊導入所有功能時才使用這種方式。
除了上述幾種方式外,還可以為模塊取別名,例如:
>>> import math as m >>> m.pi 3.141592653589793
由輸出結果看到,給模塊取別名的方式為:在導出模塊的語句末尾增加一個as子句,as后面跟上別名名稱。
既然可以為模塊取別名,當然也可以為函數(shù)取別名,例如:
>>> from math import pi as p >>> p 3.141592653589793
由輸出結果可知,我們?yōu)閜i取了別名為p,為函數(shù)取別名的方式和為模塊取別名的方式類似,也是在語句后面加上as, as后跟上別名名稱。
6.2.2 使用逗號輸出
我們在前面的章節(jié)已經看到許多使用逗號輸出的示例,例如:
>>> student=’小智’ >>> print(’學生稱呼:', student) 學生稱呼: 小智
這種方式還可以輸出多個表達式,只要將多個表達式用逗號隔開就行,例如:
>>> greeting=’大家好!' >>> intriduce=’我叫小智,' >>> comefrom=’我來自智慧城市。' >>> print(greeting, intriduce, comefrom) 大家好! 我叫小智,我來自智慧城市。
由輸出結果看到,不使用格式化的方式也可以同時輸出文本和變量值。
- 計算機網(wǎng)絡
- Instant Testing with CasperJS
- Python快樂編程:人工智能深度學習基礎
- Learning ArcGIS Pro 2
- Git高手之路
- 精通API架構:設計、運維與演進
- Learning ELK Stack
- KnockoutJS Starter
- C和C++游戲趣味編程
- Android開發(fā)三劍客:UML、模式與測試
- Spring技術內幕:深入解析Spring架構與設計原理(第2版)
- Angular應用程序開發(fā)指南
- MongoDB Cookbook(Second Edition)
- TypeScript圖形渲染實戰(zhàn):2D架構設計與實現(xiàn)
- Leaflet.js Essentials