iT邦幫忙

2022 iThome 鐵人賽

DAY 12
0
  • 建立一個模組
  • 引入(importing)一個模組
  • 從模組中引入函式
  • 引入內建模組
    • OS模組
    • Sys模組
    • Statistics模組
    • Math模組
    • String模組
    • Random模組

這篇文章是閱讀Asabeneh的30 Days Of Python: Day 12 - Modules後的學習筆記與心得。

建立一個模組

概念跟JavaScript(以下簡稱JS)差不多 -- 寫一個.py檔案:

# @filename: mymodule.py
def make_stairs(floors: int):
    for i in range(floors):
        spaces = floors - (i + 1)
        print(" " * spaces + "#" * (i + 1))

引入(importing)一個模組

使用import關鍵字接著是同一個資料夾下要引入的模組名稱:

# @filename: main.py
import mymodule

mymodule.make_stairs(3)
"""
  #
 ##
###
"""

從模組中引入函式

跟JS的import { fn } from "module"的概念一樣,但語法不同,不過也可以用as來指定要使用的別稱(alias):

# @filename: main.py
from mymodule import make_stairs as get_stairs

get_stairs(3)
"""
  #
 ##
###
"""

亦或用from module import *的方式,可以直接使用模組內的函式:

# @filename: main.py
from mymodule import *

make_stairs(3)

引入內建模組

這部分如果用過Node.js應該不陌生,Python常用的內建模組有:math, datetime, os, sys, random, statistics, collections, json, re

OS模組

  • os.mkdir("directory_name"):在當前工作區域新增一個資料夾
  • os.chdir("path"):移動到指定的資料夾路徑
  • os.getcwd():取得當前工作資料夾(working directory)路徑
  • os.rmdir("path"):移除指定的資料夾

? 注意!移除資料夾指令 - os.rmdir,不會有任何提示,會直接移除指定的資料夾,務必小心。

import os

print("目前資料夾位置: ", os.getcwd())
# 到上一層資料夾
os.chdir("..")
print("目前資料夾位置: ", os.getcwd())
# 新增一個名為hello的資料夾
os.mkdir("hello")
# 刪除這個名為hello的資料夾
os.rmdir("hello")

Sys模組

這個模組可以用來跟Python執行時(runtime)互動,比如像Node.js的process.argv去拿使用者在CLI輸入的指令:

# @filename: main.py
import sys
filename, *arguments = sys.argv
print("Executing '{}', Receiving arguments: {}".format(filename, arguments))

執行上面這段程式碼,在CLI輸入:

python main.py Happy Coding

會得到以下的輸出:

Executing 'main.py', Receiving arguments: ['Happy', 'Coding']

其他常用的sys指令:

  • sys.exit():離開sys
  • sys.maxsize:回傳最大可以接收的整數
  • sys.path:回傳環境路徑
  • sys.version:回傳目前使用的Python版本
print(sys.maxsize)
print(sys.path)
print(sys.version)

Statistics模組

這個模組提供數值統計用的函式,常用的如mean, median, mode, stdev

from statistics import *

ages = [20, 20, 4, 24, 25, 22, 26, 20, 23, 22, 26]

print(sorted(ages))
# [4, 20, 20, 20, 22, 22, 23, 24, 25, 26, 26]

# 平均數
print(mean(ages)) # 21.09090909090909
# 中位數
print(median(ages)) # 22
# 眾數
print(mode(ages)) # 20
# 樣本標準差
print(stdev(ages)) # 6.106628291529549

stdev(data)樣本標準差的說明見Python docs

樣本標準差公式實作:

def calc_stdev(lst):
    squared_data_deviations = 0
    data_mean = mean(lst)
    for item in lst:
        squared_data_deviations += (item - data_mean) ** 2
    # Bessel's correction
    var = squared_data_deviations / (len(lst) - 1)
    standard_deviation = var ** (1/2)
    return standard_deviation

Math模組

提供許多數學運算用的函式,可以透過dir(math)看到屬性名單或是help(math)有屬性的相關說明,下方列出幾個:

import math

# 圓周率
print(math.pi) # 3.141592653589793

# 平方根
print(math.sqrt(2)) # 1.4142135623730951

# 指數
print(math.pow(2, 3)) # 8.0

# 無條件捨去
print(math.floor(9.81)) # 9

# 無條件進位
print(math.ceil(9.81)) # 10

# 對數(base 10)
print(math.log10(100)) # 2

String模組

提供有關字串應用屬性的模組:

import string

print(string.ascii_letters)
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

print(string.digits)
# 0123456789

print(string.punctuation)
# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Random模組

提供隨機數應用的模組:

  • random():類似JS的Math.random(),會產生介於0到0.9999....的數。
  • randint(from, end)產生從fromend間(包括)的隨機整數(integer)。
from random import random, randint

print(random())
print(randint(1, 10))

上一篇
【Day 11】函式
下一篇
【Day 13】列表推導式
系列文
從前端角度看30天學Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言