Python開發【第六篇】:Python基礎之模塊

一、模塊&包

模塊(modue)的概念:

在計算機程序的開發過程中,隨着程序代碼越寫越多,在一個文件裏代碼就會越來越長,越來越不容易維護。

爲了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼就相對較少,很多編程語言都採用這種組織代碼的方式。在Python中,一個.py文件就稱之爲一個模塊(Module)。

使用模塊有什麼好處?

最大的好處是大大提高了代碼的可維護性。

其次,編寫代碼不必從零開始。當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。

所以,模塊一共三種:

  • python標準庫
  • 第三方模塊
  • 應用程序自定義模塊

另外,使用模塊還可以避免函數名和變量名衝突。相同名字的函數和變量完全可以分別存在不同的模塊中,因此,我們自己在編寫模塊時,不必考慮名字會與其他模塊衝突。但是也要注意,儘量不要與內置函數名字衝突。

模塊導入方法

1. import 語句

import module1[, module2[,... moduleN]

當我們使用import語句的時候,Python解釋器是怎樣找到對應的文件的呢?答案就是解釋器有自己的搜索路徑,存在sys.path裏。

['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 

2. from…import 語句

from modname import  name1[, name2[, ... nameN]]

這個聲明不會把整個modulename模塊導入到當前的命名空間中,只會將它裏面的name1或name2單個引入到執行這個聲明的模塊的全局符號表。

運行本質

#1 import test
#2 from test import add  

無論1還是2,首先通過sys.path找到test.py,然後執行test腳本(全部執行),區別是1會將test這個變量名加載到名字空間,而2只會將add這個變量名加載進來。  

包(package)

如果不同的人編寫的模塊名相同怎麼辦?爲了避免模塊名衝突,Python又引入了按目錄來組織模塊的方法,稱爲包(Package)。

請注意,每一個包目錄下面都會有一個init.py的文件,這個文件是必須存在的,否則,Python就把這個目錄當成普通目錄(文件夾),而不是一個包。init.py可以是空文件,也可以有Python代碼,因爲init.py本身就是一個模塊,而它的模塊名就是對應包的名字。

如果我們是直接執行某個.py文件的時候,該文件中那麼”name == 'main'“是True,但是我們如果從另外一個.py文件通過import導入該文件的時候,這時name的值就是我們這個py文件的名字而不是main

這個功能還有一個用處:調試代碼的時候,在”if name == 'main'“中加入一些我們的調試代碼,我們可以讓外部模塊調用的時候不執行我們的調試代碼,但是如果我們想排查問題的時候,直接執行該模塊文件,調試代碼能夠正常運行!

二、time模塊

三種時間表示

  • 時間戳(timestamp) : 通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。
  • 格式化的時間字符串
  • 元組(struct_time) : struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,夏令時)
import time

# 1 time() :返回當前時間的時間戳
time.time()  #1473525444.037215

# 2 localtime([secs])
# 將一個時間戳轉換爲當前時區的struct_time。secs參數未提供,則以當前時間爲準。
time.localtime() #time.struct_time(tm_year=2016, tm_mon=9, tm_mday=11, tm_hour=0,
# tm_min=38, tm_sec=39, tm_wday=6, tm_yday=255, tm_isdst=0)
time.localtime(1473525444.037215)

# 3gmtime([secs]) 和localtime()方法類似,gmtime()方法是將一個時間戳轉換爲UTC時區(0時區)的struct_time。

# 4 mktime(t) : 將一個struct_time轉化爲時間戳。
print(time.mktime(time.localtime()))#1473525749.0

# 5 asctime([t]) : 把一個表示時間的元組或者struct_time表示爲這種形式:'Sun Jun 20 23:21:05 1993'。
# 如果沒有參數,將會將time.localtime()作爲參數傳入。
print(time.asctime())#Sun Sep 11 00:43:43 2016

#----------------------------------------------------------

# 6 ctime([secs]) : 把一個時間戳(按秒計算的浮點數)轉化爲time.asctime()的形式。如果參數未給或者爲
# None的時候,將會默認time.time()爲參數。它的作用相當於time.asctime(time.localtime(secs))。
print(time.ctime())  # Sun Sep 11 00:46:38 2016

print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016

# 7 strftime(format[, t]) : 把一個代表時間的元組或者struct_time(如由time.localtime()和
# time.gmtime()返回)轉化爲格式化的時間字符串。如果t未指定,將傳入time.localtime()。如果元組中任何一個
# 元素越界,ValueError的錯誤將會被拋出。
print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56

# 8 time.strptime(string[, format])
# 把一個格式化時間字符串轉化爲struct_time。實際上它和strftime()是逆操作。
print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))

#time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
#  tm_wday=3, tm_yday=125, tm_isdst=-1)

#在這個函數中,format默認爲:"%a %b %d %H:%M:%S %Y"。

# 9 sleep(secs)
# 線程推遲指定的時間運行,單位爲秒。

# 10 clock()
# 這個需要注意,在不同的系統上含義不同。在UNIX系統上,它返回的是“進程時間”,它是用秒錶示的浮點數(時間戳)。
# 而在WINDOWS中,第一次調用,返回的是進程運行的實際時間。而第二次之後的調用是自第一次調用以後到現在的運行
# 時間,即兩次時間差。

Python開發【第六篇】:Python基礎之模塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章