這篇文章是閱讀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))
使用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.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")
這個模組可以用來跟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)
這個模組提供數值統計用的函式,常用的如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
提供許多數學運算用的函式,可以透過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
提供有關字串應用屬性的模組:
import string
print(string.ascii_letters)
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits)
# 0123456789
print(string.punctuation)
# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
提供隨機數應用的模組:
random()
:類似JS的Math.random()
,會產生介於0到0.9999....的數。randint(from, end)
產生從from
到end
間(包括)的隨機整數(integer)。from random import random, randint
print(random())
print(randint(1, 10))