1. 程式人生 > >python模塊第一篇

python模塊第一篇

cal localtime 列表 orm 系統環境 color round 打破 全局變量

  一個函數封裝一些數據,那模塊可以對函數進行再一次打包,使用模塊能極大地提高自身的開發效率,省去自己開發的時間,同時便於查找和修改,更有利於我們進行後期的維護

  在python中,模塊主要分為三類:內置模塊,第三方模塊和自定義模塊;內置模塊是python中自帶的模塊,編程過程中,用import導入的一般都是內置模塊;python擁有強大的第三方模塊,可以在pypi.org中查找相關的第三方模塊拿來使用;那自定義模塊對於我們來說,一個朋友py文件就是一個自定義模塊.

模塊導入:

  模塊的導入有兩種方式,一種是import+模塊名,另一種是from 模塊名 import

  import + 模塊名,模塊名是不需要加後綴名的,每個模塊都是一個獨立的名稱空間,定義在這個模塊中的函數,把這個模塊的名稱空間當做全局名稱空間,這樣我們在編寫模塊時,就不用擔心我們定義在自己模塊中的變量會在被導入時與使用者的全局變量沖突

import 模塊名
import 模塊名
import 模塊名
import 模塊名
import 模塊名

執行結果: 只打印一次
from the yiyi.py

  但是import導入時有一個缺點,就是它會把文件下的所有內容都導入進去,大量的占用內存,而在python中對它進行了優化,多次導入時會放到內存裏,隨時用隨時取,避免重復導入.

  另外一種導入模式就是 from 模塊名 import ,可以指定導入的內容,也可以導入多個內容

  from 模塊名 import *,就相當於是import+模塊名,這是不推薦使用的;此外,發from 模塊名 import 導入多個模塊時和import導入多個模塊時是一樣的,建議一行一行導入,最後結果顯示也是一個

  為了更加便捷的導入模塊,我麽可以給模塊起別名.在文件操作中有句柄,那在模塊導入中,as就相當於給模塊起別名.

  如:import 模塊名 as 別名

   from 模塊名 import 功能1 as 別名 功能2 as 別名

__all__ = [‘ ‘],

  自定義指定使用*的時候導入的內容,在導入的模塊中寫一個__all__ = [‘ ‘],這樣就能在調用模塊的文件中只導入後面列表中的內容

py文件的兩種功能:

  編寫好的一個python文件可以有兩種用途: 一:腳本,一個文件就是整個程序,用來被執行 二:模塊,文件中存放著一堆功能,用來被導入使用

  當文件被當做腳本執行時:__name__ 等於‘__main__‘

  當文件被當做模塊導入時:__name__等於模塊名

if __name__ == ‘__main__‘: (自己寫的代碼,做測試)
  __name__在被當做模塊導入的時候,__name__就會變成被導入的模塊名
  __name__在本文件內就是‘__main__‘(字符串類型)
if __name__ == ‘__main__‘: # 當前文件的測試
  pass # 要執行測試的內容
foo(‘我在當做模塊在使用‘)

模塊中路徑的搜索:

  在from中,一個點是下一級;  ../是返回上一級

  from 模塊名 import 功能,當模塊名和當前文件在一個大的目錄下時.可以直接寫文件的名字

  當模塊名和當前文件不在一個大的目錄下時,就需要進行跨盤操作,首先要導入sys模塊,把要使用的模塊路徑添加到系統的環境變量中

import sys
sys.path.insert(0,文件路徑)        系統環境變量

模塊重載:

  一個文件當做模塊被使用的時候,如果改變了模塊中的一些代碼,在這時就需要重新運行一次,導入這個新的文件

test.py,
print(111)
foo.py
from test import *

循環導入:這是一個經常會犯得錯誤,會報錯;在導入的時候形成了一個環狀,解決的方法就是加入一些條件,打破循環

編譯文件:被導入的模塊會生成一個pyc後綴名的字節碼,這樣能提升加載,編譯的效率,當原文件修改時,就會把pyc文件重新寫一份
  test.cpython-36,此文件的後綴是pyc,是字節碼,能提高編譯的效率

time模塊

在time模塊中,有三種方式:時間戳,字符串時間,結構化時間

  時間戳: 通常來說,時間戳表示的是自1970年1月1日00:00:00開始按秒計算的。我們運行“type(time.time())”,返回的是浮點數,float類型

    通過time.time()來獲取時間戳  

  字符串時間: 格式化的時間字符串(Format String): ‘1999-12-06’    ‘%Y-%m-%d %H:%M:%S‘(年-月-日 時:分:秒)

python中時間日期格式化符號:
%y 兩位數的年份表示(00-99%Y 四位數的年份表示(000-9999%m 月份(01-12%d 月內中的一天(0-31%H 24小時制小時數(0-23%I 12小時制小時數(01-12%M 分鐘數(00=59%S 秒(00-59%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身

結構化時間:元組(struct_time) struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)

在這三種時間形式中有一個轉化關系:

  時間戳轉結構化時間:localtime,  是北京時間,和倫敦相差8個小時

            gmtime,  UTC時間,與英國倫敦當地時間一致

  print(time.gmtime(時間戳)), 不寫默認使用當前的時間戳

  print(time.localtime(時間戳)),不寫默認使用當前的時間戳

時間戳和字符串時間的相互轉換:

  時間戳和字符串時間是不能直接進行相互轉換的,需要經過結構化時間這個中間人

時間戳轉字符串時間:

  1,print(time.localtime(時間戳))        轉結構化時間

  2,time.strftime(time.localtime(時間戳))     結構化轉字符串時間

字符串時間轉時間戳:

  1,t = time.strptime(‘字符串時間‘,‘要轉入的格式‘) 字符串時間轉為結構化時間

  2,print(time.mktime(t))            結構化轉時間戳

t = time.strptime(2008-08-08 08:08:08,%Y-%m-%d %H:%M:%S)
print(time.mktime(t))

datetime,Python中的一個標準庫

  from datetime import datetime

在datetime中,

  獲取當前時間:print(datetime.now()),

  時間類型轉時間戳:  print(datetime.timestamp(datetime.now()))  或  print(datetime.now().timestamp())

  時間戳轉時間類型:  print(datetime.fromtimestamp(time.time()))

  

  字符串轉時間類型:  datetime.strptime(‘字符串時間‘,‘%Y-%m-%d %H:%M:%S‘)

  時間類型轉字符串:  datetime.strftime(datetime.now(),‘%Y-%m-%d %H:%M:%S‘)

計算時間,可以通過timedelta來實現

  form datetime import datetime,timedelta

  print(datetime.now()) + timedelta(hours= , days = , weeks = )

python模塊第一篇