網站首頁 編程語言 正文
1. 引言
最近閑暇之余,我會去閱讀一些Python文檔,有時候會注意到一些有趣的Python特性,這些特性不禁讓人驚呼:“哇,Python原來還可以這么寫”。
閑話少說,我們直接開始吧。 :)
2. 函數屬性
和設置類和對象的屬性類似,我們在Python中也可以為函數設置屬性。樣例代碼如下:
def func(x): intermediate_var = x**2 + x + 1 if intermediate_var % 2: y = intermediate_var ** 3 else: y = intermediate_var **3 + 1 # setting attributes here func.optional_return = intermediate_var func.is_awesome = 'Yes, my function is awesome.' return y y = func(3) print('Final answer is', y) # Accessing function attributes print('Show calculations -->', func.optional_return) print('Is my function awesome? -->', func.is_awesome)
觀察上述代碼,我們在第9行設置函數屬性‘optional_return’在第10行設置屬性’is_awesome’.同時,在最后兩行的調用語句里我們訪問了這兩個函數屬性的值。
上述代碼的運行結果如下:
Final answer is 2197
Show calculations --> 13
Is my function awesome? --> Yes, my function is awesome.
當我們希望選擇檢查一些函數中的中間變量,但不想每次調用函數時使用 return 語句顯式返回它時,上述函數屬性的寫法將會排上用場。
3. For-else循環
在 Python 中,我們可以在 for 循環中添加 else 語句。只有在執行期間在循環體中沒有遇到 break 語句時才會觸發 else 語句。樣例代碼如下:
my_list = ['some', 'list', 'containing', 'five', 'elements'] min_len = 3 for element in my_list: if len(element) < min_len: print(f'Caught an element shorter than {min_len} letters') break else: print(f'All elements at least {min_len} letters long'
上述代碼輸出如下:
All elements at least 3 letters long
觀察上述代碼,else 在 for 級別縮進,而不是在 if 級別縮進。在這里,沒有任何元素的長度小于 3。因此,將永遠不會遇到 break 語句。因此,else 子句將被觸發(在執行 for 循環之后)并打印上面顯示的輸出。
4. int型分隔符
一般來說,從視覺效果上看人眼很難分辨出數字10000000 和100000000 ,在Python中我們不能像英語那樣直接使用逗號分隔符來將數字隔開,這是因為Python會將逗號分隔開的數字解釋為多個整數的元組。
但是,Python也有一種方便的方式來處理這種情形:我們可以使用下劃線當做分隔符來提升數字的可讀性,此時數字1_000_000將被解釋成整形數字并增加了可讀性。
代碼樣例如下:
a = 3250 b = 67_543_423_778 print(type(a)) print(type(b)) print(type(a)==type(b))
運行結果如下:
<class 'int'>
<class 'int'>
True
5. eval() and exec()
Python 具有動態讀取字符串并將其視為一段 Python 代碼的能力。這主要是通過使用 eval() 和 exec() 函數來實現的(“eval”用于評估表達式,“exec”用于執行語句)。
代碼舉例如下:
a = 3 b = eval('a + 2') print('b =', b) exec('c = a ** 2') print('c is', c)
運行結果如下:
b = 5
c is 9
上述代碼中,eval() 函數將輸入字符串作為 Python 表達式讀取,對其求值,并將結果分配給變量“b”。同時,exec() 函數將輸入字符串作為 Python 語句讀取并執行。
6. 省略號
省略號或“…”是 Python 的內置常量,類似于 None、True、False 等內置常量。它可以以不同的方式使用,包括但不限于:
6.1 占位符
和 pass 類似,省略號可以在代碼沒有寫完整的時候用作占位符,舉例如下:
def some_function(): ... def another_function(): pass
6.2 numpy數組中用于切片
NumPy中使用省略號可以對數組進行切片。以下代碼顯示了對 NumPy 數組進行切片的兩種等效方法:
import numpy as np a = np.arange(16).reshape(2,2,2,2) print(a[..., 0].flatten()) print(a[:, :, :, 0].flatten())
結果如下:
[ 0 ?2 ?4 ?6 ?8 10 12 14]
[ 0 ?2 ?4 ?6 ?8 10 12 14]
7.總結
Python 不僅是一門有用的語言,而且是一門非常有趣的語言。我們都忙于生活工作,但為了更好地了解語言本身的一些特性并沒有什么壞處。在本文中,重點介紹了5個Python中隱含的特性,并給出了相關代碼的講解。
原文鏈接:https://blog.csdn.net/sgzqc/article/details/122691748
相關推薦
- 2022-11-15 Golang?使用os?庫的?ReadFile()?讀文件最佳實踐_Golang
- 2023-02-14 Android?SharedPreference存儲文件三步走_Android
- 2022-08-27 Qt實現一個簡單的word文檔編輯器_C 語言
- 2022-07-14 Nginx限流和黑名單配置的策略_nginx
- 2023-02-06 詳解C#如何加密解密RAR文件_C#教程
- 2024-04-08 Linux 服務器連接方式
- 2022-10-14 Redisson之分布式鎖解決商品秒殺簡單示例
- 2022-02-15 獲取字符串大括號里面的值 ,并判斷字符串是否符合要求
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支