上篇??[Python基礎速成]1-Python規范與核心語法
目錄
- Python模塊
- 創建模塊與導入
- 屬性__name__
- dir()函數
- 標準模塊
- Python包
- 類
- 類的專有方法
- 對象
- 繼承
- 多態
Python模塊
Python 中的模塊(Module)是一個包含 Python 定義和語句的文件,文件名就是模塊名加上 .py 后綴。
模塊可以包含函數、類、變量以及可執行的代碼。通過模塊,我們可以將代碼組織成可重用的單元,便于管理和維護。
即模塊具備代碼復用、命名空間管理、代碼組織作用。
創建模塊與導入
使用import語句導入python源文件。
import module1[, module2[,... moduleN]
Python自定義模塊(文件)然后導入示例如下:
1.創建一個fibo.py文件
# 斐波那契(fibonacci)數列模塊def fib(n): # 定義到 n 的斐波那契數列a, b = 0, 1while b < n:print(b, end=' ')a, b = b, a+bprint()def fib2(n): # 返回到 n 的斐波那契數列result = []a, b = 0, 1while b < n:result.append(b)a, b = b, a+breturn result
2.導入使用
# to test the importimport fibodef test_fib():fibo.fib(10)test_fib()
總的來說和Java的差不多,有點類似Java導入靜態類。
Python還支持部分導入,即from…import語句。
from modname import name1[, name2[, ... nameN]]
# 示例
from fibo import fib, fib2
屬性__name__
每個模塊都有一個__name__
屬性。
如果模塊是被直接運行,__name__
的值為 __main__
。
如果模塊是被導入的,__name__
的值為模塊名。
比如上面創建的fibo模塊,在模塊文件內添加
if __name__ == '__main__':print('程序自身在運行')
else:print('我來自另一模塊')
如果fibo模塊被其他模塊執行,則會輸出“我來自另一模塊”
dir()函數
內置的函數 dir() 可以找到模塊內定義的所有名稱。以一個字符串列表的形式返回。
import sysdir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__','__package__', '__stderr__', '__stdin__', '__stdout__','_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe','_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv','base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder','call_tracing', 'callstats', 'copyright', 'displayhook','dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix','executable', 'exit', 'flags', 'float_info', 'float_repr_style','getcheckinterval', 'getdefaultencoding', 'getdlopenflags','getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit','getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount','gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info','intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path','path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1','setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit','setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout','thread_info', 'version', 'version_info', 'warnoptions']
標準模塊
模塊名 | 功能描述 |
---|---|
math | 數學運算(如平方根、三角函數等) |
os | 操作系統相關功能(如文件、目錄操作) |
sys | 系統相關的參數和函數 |
random | 生成隨機數 |
datetime | 處理日期和時間 |
json | 處理 JSON 數據 |
re | 正則表達式操作 |
collections | 提供額外的數據結構(如 defaultdict、deque) |
itertools | 提供迭代器工具 |
functools | 高階函數工具(如 reduce、lru_cache) |
Python包
包是一種管理 Python 模塊命名空間的形式,采用"點模塊名稱"。
比如一個模塊的名稱是 A.B, 那么他表示一個包 A中的子模塊 B 。
類似Java的Package,包路徑+模塊名=全路徑=唯一性
語法為:
from Package import specific_submodule # 示例
# 導入collections.abc包下的Callable模塊
from collections.abc import Callable
類
Python使用class關鍵字定義類。
class ClassName:<statement-1>...<statement-N>
Python的self類似Java的this,在類中代指類對象本身。
類的專有方法
__init__()
__inin__()
將在類創建新示例時被調用,是構造方法。
#!/usr/bin/python3class Complex:def __init__(self, realpart, imagpart):self.r = realpartself.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 輸出結果:3.0 -4.5
__del__
: 析構函數,釋放對象時使用__repr__
: 打印,轉換__setitem__
: 按照索引賦值__getitem__
: 按照索引獲取值__len__
: 獲得長度__cmp__
: 比較運算__call__
: 函數調用__add__
: 加運算__sub__
: 減運算__mul__
: 乘運算__truediv__
: 除運算__mod__
: 求余運算__pow__
: 乘方
對象
通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。
繼承
即一個派生類(derived class)繼承基類(base class)的字段和方法。
class DerivedClassName(BaseClassName):<statement-1>...<statement-N># 多繼承
class DerivedClassName(Base1, Base2, Base3):<statement-1>...<statement-N>
子類(派生類 DerivedClassName)會繼承父類(基類 BaseClassName)的屬性和方法。
多態
Python的方法重寫(Override)和Java類似,且不需要Java的@Override注解。
Python是動態類型語言,不允許同名方法因參數不同而共存,因此不支持傳統重載(Overload)。
但可以使用默認參數或可變參數模擬重載。
class Example:# def greet(self, name=None):if name:print(f"Hello, {name}!")else:print("Hello, World!")obj = Example()
obj.greet() # 輸出: Hello, World!
obj.greet("Alice") # 輸出: Hello, Alice!