Python的包(package)和模組(module)介紹

ckxllf發表於2020-08-05

  Python的包(package)和模組(module)

  一、Python的包(package)

  包:初期理解為資料夾,用於裝多個模組

  作用:一種管理Python模組名稱空間的形式,採用"點語法" os.path

  包和資料夾之間的區別:Python的包中有一個特殊的檔案__init__.py檔案,前期裡面不寫任何內容,但是,就是為了告訴編譯器,當前這個目錄不是普通目錄,是一個包

  建立方式:選中工程,建立Python package(使用pycharm編輯器)

  二、Python的模組(module)

  1.概述

  為了解決維護問題,一般情況下,在一個完整的專案中,會將特定的功能分組,分別放到不同的檔案中,在使用的過程中,可以單獨維護,各個不同的檔案之間互不影響,每個.py檔案就被稱為一個模組,透過結合包的使用來組織檔案

  封裝思路: 函式 => 類 => 模組 => 包 => 專案

  優點:

  a.提高了程式碼的可維護性

  b.提高了程式碼的複用性【當一個模組被完成之後,可以在多個檔案中使用】

  c.引用其他的模組【第三方模組】

  d.避免函式名和變數的命名衝突

  2 os模組

  提供有關於作業系統的函式,處理檔案或者資料夾

  **注意:**若path不是絕對路徑,則認為是在當前py檔案的地址執行相關操作

  # os: operation system 作業系統

  import os

  print(os.name)

  # nt--->windows

  # posix --->Linux, MacOS

  print(os.environ)

  print(os.environ.get('PATH'))

  # . 表示當前目錄

  # .. 表示上級目錄

  print(os.curdir) # . 當前目錄

  # 當前路徑

  # 相對路徑:從當前目錄(或者專案目錄)開始的路徑

  # 絕對路徑:從磁碟根目錄開始的完整路徑

  print(os.getcwd()) # C:\Users\75171\Desktop\Python2004\day11\code

  # 後面的必須掌握

  # listdir():獲取指定路徑下的所有檔案或者目錄的名字,以列表形式展示

  print(os.listdir(r'path'))

  # mkdir():新建目錄

  # os.mkdir('hello')

  # os.makedirs('a/b/c') # 可以遞迴建立目錄

  # 刪除目錄

  # os.rmdir('hello')

  # os.rmdir('a') # OSError: [WinError 145] 目錄不是空的。: 'a'

  # 刪除檔案

  # os.remove('a.txt')

  # 重新命名

  # os.rename('a','aaa')

  # os.rename(r'aaa/b/a.txt','aaa/b/bbb.txt')

  # 檔案屬性

  print(os.stat('aaa/b/bbb.txt'))

  # os.path

  # os.path.join():將多個路徑拼接

  print(os.path.join(r'path1','name')) # 一般兩個,也可以三個

  # os.path.split():拆分

  print(os.path.split(r'C:\Users\75171\Desktop\Python2004\day11\code\aaa'))

  # 'C:\Users\75171\Desktop\Python2004\day11\code' 'aaa'

  # os.path.splitext():將檔案的名稱和副檔名拆分

  print(os.path.splitext('ccc.py')) # ('ccc', '.py')

  # os.path.getsize():獲取檔案大小

  print(os.path.getsize('path')) # 1639

  # os.path.abspath(): 獲取指定檔案的絕對路徑

  print(os.path.abspath('bbb.txt')) # C:\Users\75171\Desktop\Python2004\day11\code\bbb.txt

  # __file__:當前檔名

  print(os.path.abspath(__file__)) # C:\Users\75171\Desktop\Python2004\day11\code\os.py

  file_path = r'C:\Users\75171\Desktop\Python2004\day11\code\os.py'

  dir_path = r'C:\Users\75171\Desktop\Python2004\day11\code'

  # os.path.exist() :判斷檔案或目錄是否存在

  print(os.path.exists(file_path))

  print(os.path.exists(dir_path))

  # os.path.isfile():是否為檔案

  print(os.path.isfile(file_path)) # True

  print(os.path.isfile(dir_path)) # False

  # os.path.isdir():是否為檔案

  print(os.path.isdir(file_path)) # False

  print(os.path.isdir(dir_path)) # True

  # os.path.dirname():父目錄/上一級目錄

  print(os.path.dirname(dir_path)) # C:\Users\75171\Desktop\Python2004\day11

  # os.path.basename():檔名

  print(os.path.basename(file_path)) # os.py

  3.自定義模組【掌握】

  3.1自定義import模組

  #1.格式:import 包1.包2.模組的名稱

  #注意1:透過點語法區分包的層級關係

  #引入模組

  #注意2:如果要同時匯入多個模組,有兩種方式

  #方式一

  """

  import os

  import datetime

  import math

  """

  #方式二

  import os,math,datetime

  #注意3:當匯入自定義模組的時候,需要注意包的存在

  #注意5:當透過import將模組匯入的時候,將模組對應的檔案整個載入了一遍

  import ccc.module

  import moduleTextDemo01

  print("***************")

  #注意4:當模組有包的層級關係時,需要呼叫其中函式的時候,需要指明函式的路徑

  ccc.module.test() #os.path.isdir()

  moduleTextDemo01.fun1()

  moduleTextDemo01.fun2()

  moduleTextDemo01.fun3()

  print(moduleTextDemo01.num)

  3.2自定義from-import模組

  #form 模組名 import 函式名1/類名,函式名2.。。。

  #import moduleTextDemo01

  from moduleTextDemo01 import fun1,fun2,fun3

  #注意:採用了form。。。import的方式匯入指定的函式之後,可以直接呼叫函式

  fun1()  鄭州去胎記醫院

  fun2()

  fun3()

  #好處:進行區域性的匯入,避免記憶體空間的浪費

  #注意:當前檔案中如果存在和模組中同名的函式的時候,當前檔案中的函式仍然會將模組中的函式給覆蓋掉

  def fun1():

  print("hello")

  fun1()

  3.3自定義from-import*模組

  #from 。。。。 import * *代表全部

  """

  下面三種匯入方式完全等價:將moduleTextDemo01模組中的所有的內容全部匯入

  from moduleTextDemo01 import *

  import moduleTextDemo01

  from moduleTextDemo01 import fun1,fun2,fun3

  """

  from moduleTextDemo01 import *

  fun1()

  總結:在python中,每個py檔案其實都是一個模組,如果跨模組呼叫函式,則採用匯入的方式

  將不同的功能進行劃分,呼叫函式的時候相對比較方便的

  4.__name__屬性和dir函式

  __name__的作用:如果不想讓模組中的某些程式碼執行,可以透過屬性僅僅呼叫程式中的一部分功能

  【寫在if判斷中的程式碼只有當前模組被執行的時候才會被執行,檢測到是其他的檔案在使用當前的模組,則if語句中的程式碼不會被執行】

  def fun1():

  print("aaa")

  def fun2():

  print("bbb")

  def fun3():

  print("ccc")

  #作用:寫在下面判斷中的程式碼,只有當前模組執行的時候才會被執行【起到遮蔽的作用】,其他檔案想import此檔案,以下函式不會被執行

  if __name__ == "__main__":

  fun1()

  fun2()

  fun3()

  dir:獲取指定模組裡面的所有的內容

  dir(模組名稱) 返回的是一個列表

  print(dir(math))

  print(dir(moduleTextDemo01))


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2709501/,如需轉載,請註明出處,否則將追究法律責任。

相關文章