fbpx
Python

有效管理Python套件(Package)的工具及概念

在實務上發展應用程式時,除了可以自行開發模組(Module)與套件(Package)外,很多時候會安裝使用第三方套件(Package),來提升專案的開發效率。 所以本文將介紹如何在PyPI中搜尋所需的Python套件(Package),並且以Windows作業系統及Visual Studio Code開發工具為例,瞭解Python強大的套件管理工具,讓您有效管理專案中的Python套件(Package)。 由於是在Visual Studio Code的Terminal視窗中下指令的方式來操作,所以使用命令提示字元視窗,也可以達到相同的效果。本文重點包含: PyPI(Python Package Index) pip套件管理工具 pipenv套件管理工具 Pipfile及Pipfile.lock檔案 一、PyPI(Python Package Index) PyPI是一個套件庫,位於https://pypi.org,其中包含了各式各樣的Python套件(Package),在開發應用程式的過程中,可以到這邊來搜尋是否有所需的功能套件(Package),安裝後透過引用的方式來進行使用,藉此提升開發效率。 現在就來介紹幾個在使用PyPI時,需要瞭解的基本功能。首先,PyPI的首頁如下圖: 各位可以在搜尋的地方查詢所需的套件,例如搜尋常應用在網路爬蟲的beautifulsoup4套件(Package),從查詢結果可以看到許多相關的套件(Package),如下圖: 以beautifulsoup4 4.8.2為例,點進此套件(Package)後,可以看到安裝的指令及最新版的發佈日期,如下圖: 一個套件(Package)要如何使用,一定會有文件可以參考,往下即可看到Documentation的連結,如下圖: 而套件(Package)的版本演進歷史則可以透過左邊的Release history來查看,如下圖: 以上是在使用PyPI上查找套件(Package)時,較常使用的部分,接下來,就來教大家如何透過指令來安裝套件(Package)吧。…
學程式助教
February 5, 2020
Python初學程式工程思維技術問題

Pandas 第7講:Python資料處理套件Pandas數值處理與基礎統計量

上一篇文章主要介紹如何利用pandas處理字串資料,而這章節的會著重於數值的資料處理以及顯示基礎統計量的方法。在資料分析中,數值資料是非常常見的,而且對於後續的深入分析而言,數值資料能夠讓我們進一步利用推論統計檢定許多因素與目標的關聯性,幫助我們能夠利用檢定結果進行決策,或是發現夠深入的趨勢。   這次我們會使MLB美國職棒大聯盟的各隊歷年統計數據(mlb_team.csv)的公開資料,其中記錄了美國職棒大聯盟從西元1871年至今的各球隊數據,因為最近正好碰到需要分析棒球的運動相關數據,且這份資料大部分的欄位都是數值欄位,正好適合這篇文章主題。 讀取資料: import pandas as pd mlb_teams = pd.read_csv("mlb_team.csv",encode="UTF-8") mlb_teams.head()     向量處理 Vectorize Operations 之前的文章中有提到Pandas是利用向量處理的方式進行資料處理的,所以我們在進行數值運算的時候都是針對單一個欄位將欄位中的所有數值進行相同的運算,如果要針對特定條件的數值進行運算,則需要先進行資料篩選再進行數值處理。 基本上在利用Pandas進行數值運算時,跟我們一般在寫Python計算一樣,只是平常用於運算的變數變成了 DataFrame 物件或是 Series 物件,所以所有Python中的數學運算符,在Pandas都可以直接使用: s = pd.Series() s+11 s-10 s*5…
學程式助教
February 3, 2020
Python

Python Comprehension語法應用教學

相信在學Python程式語言的朋友都知道,Python語法簡單易學且非常簡潔,今天要來介紹的Comprehension即是Python的Pythonic語法之一,可以運用在任何可疊代的物件(Iterable Object)上,只要一行程式碼即可完成多行的任務,讓我們的程式碼簡潔及增加可讀性。 透過今天的教學,您將可以學到Python Comprehension如何應用在以下幾個重要的物件(Object)上,並且有能力將現有程式碼改寫為Python Comprehension語法。 List Comprehension Set & Dictionary Comprehension Generator Expression   一、List Comprehension 串列(List)Comprehension的語法包含三個部分,說明如下: expression:可以是 item 或運算式。 item:接收可疊代的物件(Iterable Object)元素。 iterable:可疊代的物件(Iterable Object)。 通常要建立一個串列(List),我們可以透過for迴圈的方式,如下範例:…
學程式助教
January 22, 2020
Python

Python 封裝(Encapsulation) 實用教學

今天要來介紹Python物件導向設計中的封裝(Encapsulation)概念,主要的目的在保護程式碼中重要的實作細節不被外部知道,以防止外部程式碼直接或不當的存取類別中的屬性(Attribute)及方法(Method),而導致程式邏輯上的錯誤。 將複雜的運算邏輯進行封裝(Encapsulation)的好處是,外部程式碼只要透過統一介面來進行存取即可,而無需瞭解其中的運算過程,讓程式碼除了保有存取上的控制外,也易於維護。   今天要來說明的封裝(Encapsulation)重點包含了: Python封裝 (Encapsulation) 私有屬性 (Private Attribute) 私有方法 (Private Method) (more…)
學程式助教
January 18, 2020
Python初學程式

Python多型(Polymorphism)實用教學

今天要來介紹的Python多型(Polymorphism)在物件導向設計中非常的重要,不論是設計模式(Design Patterns)或設計原則(Design Principles),都會有多型(Polymorphism)的概念。 使用多型(Polymorphism)來設計類別架構,能夠讓程式碼的相依性不會那麼高,並且透過統一的介面來彈性擴充功能。今天主要的重點有兩個部分: Python抽象方法(Abstract Method) 多型(Polymorphism) (more…)
學程式助教
January 15, 2020
Python

Python 繼承(Inheritance)實用教學

今天要來介紹的Python繼承(Inheritance)在物件導向設計中非常的重要,使用得當可以提高我們程式碼的重用性(Reusable)及維護性。 繼承(Inheritance)顧名思義,就是會有父類別(或稱基底類別Base Class)及子類別(Sub Class)的階層關係。子類別會擁有父類別公開的屬性(Attribute)及方法(Method)。 所以Python繼承(Inheritance)的概念就是將各類別(Class)會共同使用的屬性(Attribute)或方法(Method)放在一個獨立的類別(Class)中,其它的類別(Class)透過繼承(Inheritance)的方式來擁有,降低程式碼的重複性。   Python繼承(Inheritance)的重要觀念如下: 如何使用Python繼承(Inheritance) 方法覆寫(Method Overriding) 多層繼承(Multi-Level Inheritance) 多重繼承(Multiple Inheritance) (more…)
學程式助教
January 12, 2020
Python

解析Python物件導向設計的3種類型方法(Instance,Class,Static Method)

一、實體方法(Instance Method) Python類別(Class)中沒有加任何裝飾詞(Decorator)的方法(Method),至少要有一個self參數,於方法(Method)被呼叫時指向物件(Object),其後可以依需求增加額外參數,如下範例: 實體方法(Instance Method)透過self參數可以自由的存取物件(Object)的屬性(Attribute)及其他方法(Method),藉此來改變物件(Object)的狀態,如下範例:   執行結果 從執行結果可以看到,我們印出self參數時,結果顯示為Cars類別的物件(Object),也就是說呼叫實體方法(Instance Method)時,Python編譯器會傳入物件(Object),使得self參數指向該物件(Object)。   另一方面,當透過類別(Class)呼叫實體方法(Instance Class)時,這會使得Python編譯器無法將self參數指向物件(Object),而發生TypeError的錯誤,如下範例: 執行結果 另外,在實體方法(Instance Method)中可以透過self.__class__屬性(Attribute)來改變類別(Class)的狀態,如下範例:   執行結果 範例中實體方法(Instance Method)即利用self.__class__屬性(Attribute)來改變door類別屬性(Class Attribute)。 二、 類別方法(Class Method) Python類別(Class)中有@classmethod裝飾詞(Decorator)的方法(Method),被呼叫時,相較於實體方法(Instance Method)的self參數指向物件(Object),類別方法(Class Method)為cls參數,指向類別(Class),如下範例:…
學程式助教
January 8, 2020
Python

3個必須瞭解的Python屬性觀念

本篇接續淺談Python類別(Class)文章,細談Python類別(Class)中的屬性(Attribute)觀念。我們知道屬性(Attribute)可以分為實體屬性(Instance Attribute)與類別屬性(Class Attribute),今天就來探討它們的用法以及不一樣的地方。另外,也會介紹Python屬性(Property)的應用方式。 實體屬性(Instance Attribute) 類別屬性(Class Attribute) 屬性(Property) 一、實體屬性(Instance Attribute) 需伴隨物件(Object)的生成來建立,也就是透過點(.)的語法或在建構式(Constructor)中所生成的屬性(Attribute)。各物件(Object)的實體屬性(Instance Attribute)各自獨立,修改某一個物件(Object)的實體屬性(Instance Attribute)值時,不會影響到其他物件。如下範例: 執行結果 從範例中可以看到,我們透過點(.)的方式來建立物件(Object)的屬性(Attribute),mazda和toyota物件的color與seat為實體屬性(Instance Attribute),互相獨立且有各自的屬性值。接下來我們來看透過建構式(Constructor)所建立的屬性(Attribute): 執行結果 在第12行~第14行我們修改了mazda物件(Object)的color、seat及weight屬性(Attribute)值,並不會影響到其他物件toyota的屬性值,所以我們可以說color、seat和weight為實體屬性(Instance Attribute)。 二、類別屬性(Class Attribute) 定義在類別層級的屬性(Attribute),也就是在建構式(Constructor)之外的屬性(Attribute)。可以不需要建立物件(Object),直接透過類別名稱存取。各物件共享類別屬性(Class Attribute)值,也就是說當我們修改類別屬性(Class Attribute)值時,每一個透過此類別(Class)所建立的物件(Object),都會受到影響。如下範例: 執行結果…
學程式助教
January 4, 2020
Python

淺談Python類別(Class)

在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python當然也不例外。 而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解,包含了: 類別(Class) 物件(Object) 屬性(Attribute) 建構式(Constructor) 方法(Method) (more…)
學程式助教
January 2, 2020
Python

Python迴圈

在撰寫程式的過程中,都有機會要重複執行一些相同的運算,但是重複撰寫好幾次同樣的運算看起來非常的沒有效率,所以在這個情況下我們通常會使用迴圈來幫我們完成,本篇就來介紹Python迴圈的使用方式,包含For-Loops、Nested Loops及while-Loops,並且說明用來控制迴圈流程的break及continue指令。 一、range()方法 在開始介紹Python迴圈之前,先來說明一個在執行迴圈時常用的range()方法,主要用來幫我們產生數列,語法如下: range(起始值,結束值,遞增(減)值) 使用說明: range(20):起始值預設從0開始,所以會產生0到19的整數序列。 range(10,20):起始值從10開始,所以會產生10到19的整數序列。 range(10,20,3):起始值從10開始,遞增值為3,所以會產生10,13,16,19的整數序列。 二、Python For-Loops敘述 可以針對Iterable(可疊代的)物件來進行讀取,Python內建幾個常用的Iterable物件,像是String(字串)、List(串列)、Tuples(元組)、Dictionary(字典)等,往後會出文章詳細的介紹。Python for-loop的語法如下: 在語法中,in 的後方就是for-loop要讀取的目標物,這個目標物的為Iterable (可疊代的)物件,一次讀取一個元素,然後用item(自訂變數名稱)來接收每次讀取到的元素,執行區塊中的運算。注意for-loop的結尾需加上冒號( : )及區塊中的運算式要有相同的縮排,範例如下: 在範例中,for-loop的讀取目標物為一個字串,每一次讀取一個字母,並且用letter變數來接收,執行print()方法。 三、Python Nested Loops(巢狀迴圈) 簡單來說,就是迴圈中又有一層迴圈,我們來看一個範例: 這個巢狀迴圈分別有外部迴圈(Outer loop)及內部迴圈(Inner loop),程式執行的時候,會先從外部迴圈取得第一個元素 M ,接著執行內部迴圈(分別為0,1,2),直到內部迴圈執行完畢,才會回到外部迴圈取得第二個元素 i ,然後再一次的執行內部迴圈(分別為0,1,2),依此類推,直到外部迴圈的目標物已讀取完畢,整個巢狀迴圈才結束。 四、Python While-Loops敘述…
學程式助教
December 4, 2019