Python × 資料分析

Module, Class, and Package


Kristen Chan

Agenda


  • Module
  • Class
  • Package
  • 匯入 Module 及 Package

Note

執行 Python Script

Step 1.
建立一個 .py 檔 create hello.py

Note

執行 Python Script

Step 2.

  1. 打開 terminal (命令提示字元)
  2. 移到放置 hello.py 的目錄

    $ cd Desktop/python_demo
  3. 輸入 python hello.py

    $ python hello.py

    execute hello.py

Review

string

  • 利用 { }format ,可以彈性填入字、詞
In [1]:
my_string = "Hello {} !!".format("Kristen")
print(my_string)
Hello Kristen !!

Note

傳參數進去 Python Script


Step 1.

  1. 在欲執行的 .py 檔中,加入
    import sys
    
  2. 並在想要放入參數的地方,加上sys.argv[1]

    sys.argv[0] 是欲執行的那個檔
    若一次想要放入多個,則可以這樣 sys.argv[2],sys.argv[3],...

Note

傳參數進去 Python Script


Step 1.
create hello_2.py

Note

傳參數進去 Python Script


Step 2.

  1. 打開 terminal (命令提示字元)
  2. 移到放置 hello_2.py 的目錄

    $ cd Desktop/python_demo
  3. 輸入 python hello_2.py 及欲傳入的參數

    $ python hello_2.py Kristen

execute hello_2.py

Exercise

Q. 建立一個 circle.py 的檔案,並輸入圓半徑後可以回傳此圓的面積

def Circle_Area(r):
    " 輸入半徑,就會回傳圓面積 "
    result = pi * r * r
    return result

sys.argv 傳進去的參數會是 string ,因為半徑是數值,所以要經過 float()轉換

a = '2'
a_num = float(a)

Answer

建立一個 circle.py create circle.py

Answer

terminal (命令提示字元) execute circle.py

Module

Module


包含了 FunctionVariableClass 的 .py 檔

module

Module


如何匯入 Module

Review

circle.py create circle.py

Module


如何匯入 Module

利用 import 將已經完成的程式拿來使用

修改一下剛剛的 circle.py create circle.py

Module


如何匯入 Module

利用 import 將已經完成的程式拿來使用

In [2]:
import circle

引用 circle 中的 Variable (變數)

In [3]:
print(circle.pi)
3.14159

Module


如何匯入 Module

利用 import 將已經完成的程式拿來使用

import circle

引用 circle 中的 Function (函式)

In [4]:
print('半徑為5的圓週長 : ',circle.Circle_Circumference(5))
print('半徑為5的圓面積 : ',circle.Circle_Area(5))
半徑為5的圓週長 :  31.4159
半徑為5的圓面積 :  78.53975

Note

建立一個 circle_compute.py

import circle.py

Note

在 terminal 執行 circle_compute.py

import circle.py

Class

Class


想把多個 Method(函式)Attribute(變數) 合併成一個物件呼叫使用

In [5]:
class circle:
    " 圓面積,圓周長 "
    def __init__(self, r):
        self.r = r
        self.pi = 3.14159
        
    def Circle_Area(self):
        " 輸入半徑,就會回傳圓面積 "
        result = self.pi * self.r * self.r
        return result

    def Circle_Circumference(self):
        " 輸入半徑,就會回傳圓周長 "
        result = 2 * self.pi * self.r
        return result

Class


__init__()

  • 初始化
  • 當這個 class 被呼叫的時候,就會去執行 __init__ 裡面的程式
  • __init__ 後面固定放 self
  • Class 裡的變數叫做 Attribute
    e.g. self.r , self.pi
    class circle:
      " 圓面積,圓周長 "
      def __init__(self, r):
          self.r = r
          self.pi = 3.14159
    

Class


Method

  • Class 裡的函式

    class circle:
    
      def Circle_Area(self):
          " 輸入半徑,就會回傳圓面積 "
          result = self.pi * self.r * self.r
          return result
    
      def Circle_Circumference(self):
          " 輸入半徑,就會回傳圓周長 "
          result = 2 * self.pi * self.r
          return result
    

Class


__doc__

查看 Class 的說明文件

In [6]:
circle.__doc__
Out[6]:
' 圓面積,圓周長 '

Review

查看 Function 的說明文件

In [7]:
help( circle.Circle_Area )
Help on function Circle_Area in module __main__:

Circle_Area(self)
    輸入半徑,就會回傳圓面積

Class


建立一個 circle_class.py

import circle_class.py

Class


引入 module 中的 Object(物件)

In [8]:
import circle_class
my_circle = circle_class.circle(5)

print( my_circle.pi )
print( my_circle.Circle_Area() )
print( my_circle.Circle_Circumference() )
3.14159
78.53975
31.4159

Package

Package


多個功能相關的 Module or Package 結合起來,成為一個 Package

pacakge

Package


多個功能相關的 Module or Package 結合起來,成為一個 Package

pacakge

匯入 Module 及 Package

匯入 Module 及 Package


Module

  • 匯入 module 中所有物件
    • import module

  • 匯入 module 中某些物件
    • from module import variable_A, variable_B, function_A

匯入 Module 及 Package


Package

  • 匯入 package 中所有物件
    • from module import *

      必須要在該 package 中的 init.py 中有設定 __all__,且只會列出有放在 __all__ 中的 modole list

  • 匯入 package 中某個 module :
    • import package.module
    • from package import module
    • import package.sub_package.module
    • from package.sub_package import module

匯入 Module 及 Package


路徑搜尋

Python 尋找某個 Module 時,會依照 sys.path 所定義的路徑,依序搜尋
sys.path 定義如下:

  1. 尋找當前目錄
  2. 由環境變數 PYTHONPATH 指定的目錄下尋找
  3. Python 的安裝路徑

匯入 Module 及 Package


路徑搜尋

In [9]:
import sys
In [10]:
sys.path
Out[10]:
['',
 '/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python36.zip',
 '/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6',
 '/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload',
 '/usr/local/lib/python3.6/site-packages',
 '/usr/local/lib/python3.6/site-packages/IPython/extensions',
 '/Users/hsinyu/.ipython']