# 模塊
## 1\. Python中的模塊
有過C語言編程經驗的朋友都知道在C語言中如果要引用`sqrt函數`,必須用語句`#include <math.h>`引入math.h這個頭文件,否則是無法正常進行調用的。
那么在Python中,如果要引用一些其他的函數,該怎么處理呢?
在Python中有一個概念叫做模塊(module),這個和C語言中的頭文件以及Java中的包很類似,比如在Python中要調用`sqrt函數`,必須用import關鍵字引入math這個模塊,下面就來了解一下Python中的模塊。
說的通俗點:模塊就好比是工具包,要想使用這個工具包中的工具(就好比函數),就需要導入這個模塊
## 2\. import
在Python中用關鍵字`import`來引入某個模塊,比如要引用模塊math,就可以在文件最開始的地方用import math來引入。
形如:
~~~
import module1,mudule2...
~~~
當解釋器遇到import語句,如果模塊在當前的搜索路徑就會被導入。
在調用math模塊中的函數時,必須這樣引用:
~~~
模塊名.函數名
~~~
* 想一想:
> 為什么必須加上模塊名調用呢?
* 答:
> 因為可能存在這樣一種情況:在多個模塊中含有相同名稱的函數,此時如果只是通過函數名來調用,解釋器無法知道到底要調用哪個函數。所以如果像上述這樣引入模塊的時候,調用函數必須加上模塊名
~~~
import math
#這樣會報錯
print(sqrt(2))
#這樣才能正確輸出結果
print(math.sqrt(2))
~~~
有時候我們只需要用到模塊中的某個函數,只需要引入該函數即可,此時可以用下面方法實現:
~~~
from 模塊名 import 函數名1,函數名2....
~~~
不僅可以引入函數,還可以引入一些全局變量、類等
* 注意:
> * 通過這種方式引入的時候,調用函數時只能給出函數名,不能給出模塊名,但是當兩個模塊中含有相同名稱函數的時候,后面一次引入會覆蓋前一次引入。也就是說假如模塊A中有函數function( ),在模塊B中也有函數function( ),如果引入A中的function在先、B中的function在后,那么當調用function函數的時候,是去執行模塊B中的function函數。
>
> * 如果想一次性引入math中所有的東西,還可以通過from math import \*來實現
>
## 3\. from…import
Python的from語句讓你從模塊中導入一個指定的部分到當前命名空間中
語法如下:
~~~
from modname import name1[, name2[, ... nameN]]
~~~
例如,要導入模塊fib的fibonacci函數,使用如下語句:
~~~
from fib import fibonacci
~~~
### 注意
* 不會把整個fib模塊導入到當前的命名空間中,它只會將fib里的fibonacci單個引入
## 4\. from … import \*
把一個模塊的所有內容全都導入到當前的命名空間也是可行的,只需使用如下聲明:
~~~
from modname import *
~~~
### 注意
* 這提供了一個簡單的方法來導入一個模塊中的所有項目。然而這種聲明不該被過多地使用。
## 5\. as
~~~
In [1]: import time as tt
In [2]: time.sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-07a34f5b1e42> in <module>()
----> 1 time.sleep(1)
NameError: name 'time' is not defined
In [3]:
In [3]:
In [3]: tt.sleep(1)
In [4]:
In [4]:
In [4]: from time import sleep as sp
In [5]: sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-82e5c2913b44> in <module>()
----> 1 sleep(1)
NameError: name 'sleep' is not defined
In [6]:
In [6]:
In [6]: sp(1)
In [7]:
~~~
## 6\. 定位模塊
當你導入一個模塊,Python解析器對模塊位置的搜索順序是:
1. 當前目錄
2. 如果不在當前目錄,Python則搜索在shell變量PYTHONPATH下的每個目錄。
3. 如果都找不到,Python會察看默認路徑。UNIX下,默認路徑一般為/usr/local/lib/python/
4. 模塊搜索路徑存儲在system模塊的sys.path變量中。變量里包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
- 計算機組成原理和Python基礎知識
- 計算機組成原理
- 編程語言和Python
- 開發第一個Python程序
- 注釋
- 變量以及類型
- 標識符和關鍵字
- 輸出
- 輸入
- 運算符
- 數據類型轉換
- 判斷語句和循環語句
- 判斷語句介紹
- if語句
- 比較、關系運算符
- if...else...語句格式
- if...elif...else語句格式
- if語句的嵌套
- if應用:猜拳游戲
- 循環語句介紹
- while循環
- while循環應用
- while循環的嵌套以及應用
- for循環
- break和continue
- 字符串、列表、元組、字典
- 字符串介紹
- 字符串輸出
- 字符串輸入
- 下標和切片
- 字符串常見操作
- 列表介紹
- 列表的循環遍歷
- 列表的常見操作
- 列表的嵌套
- 元組
- 字典介紹
- 字典的常見操作1
- 字典的常見操作2
- 字典的遍歷
- 集合(擴展)
- 公共方法
- 4.函數(一)
- 4.1.函數介紹
- 4.2.函數定義和調用
- 4.3.函數的文檔說明
- 4.4.函數參數(一)
- 4.5.函數返回值(一)
- 4.6.函數的嵌套調用
- 4.7.函數應用:打印圖形和數學計算
- 5.函數(二)
- 5.1.局部變量
- 5.2.全局變量
- 5.3.多函數程序的基本使用流程
- 5.4.函數返回值(二)
- 5.5.函數參數(二)
- 5.6.拆包、交換變量的值
- 5.7.引用(一)
- 5.8.可變、不可變類型
- 5.9.引用(二)
- 5.10.函數使用注意事項
- 6.強化練習
- 6.1.函數應用:學生管理系統
- 6.2.遞歸函數
- 6.3. 匿名函數
- 6.4.列表推導式
- 6.5.set、list、tuple
- 6.6.高階函數: map reduce filter
- 7.文件操作,綜合應用
- 7.1.文件操作介紹
- 7.2.文件的讀寫
- 7.3.應用1:制作文件的備份
- 7.4.文件的相關操作
- 7.5.應用:批量修改文件名
- 7.6.綜合應用:學生管理系統(文件版)
- 8.面向對象(上)
- 8.1.認識面向對象編程
- 8.2.類和對象
- 8.3.定義類
- 8.4.創建對象
- 8.5.添加和獲取對象的屬性
- 8.6.在方法內通過self獲取對象屬性
- 8.7.魔法方法 - init()
- 8.8.魔法方法 - 有參數的__init__()方法
- 8.9.魔法方法 - str()方法
- 8.10.魔法方法 - del()方法
- 8.11.實操案例 - 烤土豆
- 9.面向對象(中)
- 9.1.實操案例 - 放家具
- 9.2.繼承的概念
- 9.3.單繼承
- 9.4.多繼承
- 9.5.子類重寫父類的同名屬性和方法
- 9.6.子類調用父類同名屬性和方法
- 9.7.多層繼承
- 9.8.通過super()來調用父類的方法
- 10.面向對象(下)
- 10.1.私有屬性和私有方法
- 10.2.修改私有屬性的值
- 10.3.多態
- 10.4.類屬性和實例屬性
- 10.5.靜態方法和類方法
- 11.異常處理與模塊初識
- 11.1.異常
- 11.2.捕獲異常
- 11.3.異常的傳遞
- 11.4.拋出自定義的異常
- 11.5.獲取異常完整信息的正確姿勢
- 11.6.認識模塊
- 11.7.開發模塊
- 11.8.模塊中的__all__(未完成)
- 11.9.python中的包(未完成)
- 12.課后加餐
- 12.1.基礎應用 - 進銷存管理系統(未完成)
- 12.2.基礎應用 - 員工信息管理系統(未完成)
- 12.1.編碼規范 - PEP8編碼規范(未完成)