- Python進階編程:編寫更高效、優雅的Python代碼
- 劉宇宙 謝東 劉艷
- 481字
- 2021-04-30 12:39:47
3.6 命名切片
在編碼技能不熟練時,我們很容易寫出大量無法直視的硬編碼切片,以至于在不久后可能需要回頭做一遍代碼清理。
比如,從一個記錄(比如文件或其他類似格式)中的某些固定位置提取字段,示例如下:
record_str = '......##............20 ....#..1513.5 ........##' total_cost = int(record_str[20:22]) * float(record_str[30:36]) print(f'total cost is:{total_cost}')
這樣編寫的代碼會給日后的維護帶來很多不便,這里可以對命名進行切片操作,改進如下:
NUMBERS = slice(20, 22) PRICE = slice(30, 36) total_cost = int(record_str[NUMBERS]) * float(record_str[PRICE]) print(f'total cost is:{total_cost}')
在改進代碼中,用有具體意義的切片名替代使用大量難以理解的硬編碼下標,這使得代碼更加清晰、可讀。
一般來講,如果代碼中出現大量硬編碼下標,會使得代碼的可讀性和可維護性大大降低。使用切片命名的方式可以更加清晰地表達代碼。
內置的slice()函數創建了一個切片對象。在所有使用切片的地方,我們都可以使用切片對象。
如果定義了一個切片對象,我們可以分別調用該切片對象的start、stop、step屬性來獲取更多信息,示例如下:
split_obj = slice(3, 20, 2) print(split_obj.start) print(split_obj.stop) print(split_obj.step)
我們還可以通過調用切片的indices(size)方法將切片對象映射到一個已知大小的序列上。indices(size)方法返回一個三元組(start,stop,step),切片對象的所有值都會被自動調整,直到達到適合這個已知序列的邊界為止。這樣,調用切片時就不會出現IndexError異常,示例如下:
str_obj = 'HelloWorld' split_obj = slice(3, 20, 2) for i in range(*split_obj.indices(len(str_obj))): print(str_obj[i])
推薦閱讀
- Moodle Administration Essentials
- Drupal 8 Blueprints
- Arduino by Example
- INSTANT Weka How-to
- TypeScript實戰指南
- Scratch趣味編程:陪孩子像搭積木一樣學編程
- Machine Learning With Go
- Learning JavaScript Data Structures and Algorithms(Second Edition)
- Java并發編程之美
- Mastering Apache Storm
- Laravel Application Development Blueprints
- C編程技巧:117個問題解決方案示例
- Flink核心技術:源碼剖析與特性開發
- Spring Web Services 2 Cookbook
- 詩意的邊緣