在實務上發展應用程式時,除了可以自行開發模組(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…
上一篇文章主要介紹如何利用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…
相信在學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 或運算式。…
今天要來介紹Python物件導向設計中的封裝(Encapsulation)概念,主要的目的在保護程式碼中重要的實作細節不被外部知道,以防止外部程式碼直接或不當的存取類別中的屬性(Attribute)及方法(Method),而導致程式邏輯上的錯誤。 將複雜的運算邏輯進行封裝(Encapsulation)的好處是,外部程式碼只要透過統一介面來進行存取即可,而無需瞭解其中的運算過程,讓程式碼除了保有存取上的控制外,也易於維護。 今天要來說明的封裝(Encapsulation)重點包含了: Python封裝 (Encapsulation) 私有屬性 (Private Attribute) 私有方法 (Private Method) (more…)
今天要來介紹的Python多型(Polymorphism)在物件導向設計中非常的重要,不論是設計模式(Design Patterns)或設計原則(Design Principles),都會有多型(Polymorphism)的概念。 使用多型(Polymorphism)來設計類別架構,能夠讓程式碼的相依性不會那麼高,並且透過統一的介面來彈性擴充功能。今天主要的重點有兩個部分: Python抽象方法(Abstract Method) 多型(Polymorphism) (more…)
今天要來介紹的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…)
一、實體方法(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)。…
本篇接續淺談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…
在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python當然也不例外。 而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解,包含了: 類別(Class) 物件(Object) 屬性(Attribute) 建構式(Constructor) 方法(Method) (more…)
在撰寫程式的過程中,都有機會要重複執行一些相同的運算,但是重複撰寫好幾次同樣的運算看起來非常的沒有效率,所以在這個情況下我們通常會使用迴圈來幫我們完成,本篇就來介紹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(巢狀迴圈) 簡單來說,就是迴圈中又有一層迴圈,我們來看一個範例:…