成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python五個隱藏的特性,你可能從未聽說過

開發(fā) 后端
在本文中,我將向您展示Python中很常見的5個特性。有經(jīng)驗的Python開發(fā)人員可能認識其中一些。然而,這對其他人仍將是未知的。

 前言

在本文中,我將向您展示Python中很常見的5個特性。有經(jīng)驗的Python開發(fā)人員可能認識其中一些。然而,這對其他人仍將是未知的。

[[352412]]

1...

是的,你沒看錯,在Python中...是一個有效的構(gòu)造。...是稱為省略號的單例對象。如果你把它輸入到Python解釋器中,你可以看到它:

 

  1. >>> ... 
  2. Ellipsis 

根據(jù)官方文檔,省略號是“一種特殊值,主要與用戶定義容器數(shù)據(jù)類型的擴展切片語法結(jié)合使用”。它有兩個主要的用例。一種是在空函數(shù)中充當(dāng)占位符體。另一個是Numpy,作為一個切片項,就像文檔中描述的那樣。

函數(shù)的占位符

 

  1. def my_awesome_function(): 
  2.     ... 

這相當(dāng)于:

 

  1. def my_awesome_function(): 
  2.     Ellipsis 

還有這個:

 

  1. def my_awesome_function(): 
  2.     pass 

注意,我不是說pass =…我只是說作為函數(shù)體,結(jié)果是一樣的。事實上,您可以使用任何東西作為占位符。

Numpy

下面的代碼基本上意味著創(chuàng)建一個矩陣數(shù)組。每個矩陣是3×3。然后獲取所有最內(nèi)部矩陣的第二列(numpy數(shù)組基于0)。

 

  1. import numpy as np 
  2. >>> array = np.arange(27).reshape(3, 3, 3) 
  3. >>> array 
  4. array([[[ 0,  1,  2], 
  5.         [ 3,  4,  5], 
  6.         [ 6,  7,  8]], 
  7.  
  8.        [[ 9, 10, 11], 
  9.         [12, 13, 14], 
  10.         [15, 16, 17]], 
  11.  
  12.        [[18, 19, 20], 
  13.         [21, 22, 23], 
  14.         [24, 25, 26]]]) 
  15. >>> array[..., 1]  
  16. array([[ 1,  4,  7], 
  17.        [10, 13, 16], 
  18.        [19, 22, 25]]) 
  19. >>> # This is equivalent to 
  20. >>> array[:, :, 1]  
  21. array([[ 1,  4,  7], 
  22.        [10, 13, 16], 
  23.        [19, 22, 25]]) 

2一個優(yōu)雅的解包

可迭代解包是一種非常方便的特性,已經(jīng)存在一段時間了。大多數(shù)人使用它來解包包含多個項的可迭代對象。例如,考慮以下用例。

 

  1. >>> a, *b, c = range(1, 11) 
  2. >>> a 
  3. >>> c 
  4. 10 
  5. >>> b 
  6. [2, 3, 4, 5, 6, 7, 8, 9] 

或者是:

 

  1. >>> a, b, c = range(3) 
  2. >>> a 
  3. >>> b 
  4. >>> c 

但有一個很好的用例,很多人都沒有利用它,那就是拆封單個迭代器。為什么這很有用?恕我直言,它使代碼更優(yōu)雅了一些。

而不是這樣做:

 

  1. >>> lst = [1] 
  2. >>> a = lst[0] 
  3. >>> a 
  4. >>> (a, ) = lst 
  5. >>> a 

你可以這樣做:

 

  1. >>> lst = [1] 
  2. >>> [a] = lst 
  3. >>> a 

我知道這可能看起來很傻,但至少對我來說,它看起來更優(yōu)雅。

3你能讓這個列表躺平嗎?

扁平化列表有幾種方法。最簡單的是使用列表理解。

 

  1. >>> l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
  2. >>> flattened = [elem for sublist in l for elem in sublist] 
  3. >>> flattened 
  4. [1, 2, 3, 4, 5, 6, 7, 8, 9] 

如果您更傾向于函數(shù)式編程,您可以使用減速器。

 

  1. >>> from functools import reduce 
  2. >>> reduce(lambda x,y: x+y,l) 
  3. [1, 2, 3, 4, 5, 6, 7, 8, 9] 

然而,還有另一種方法。你可以用sum函數(shù)!

 

  1. >>> sum(l, []) 
  2. [1, 2, 3, 4, 5, 6, 7, 8, 9] 

這是因為sum函數(shù)遍歷列表中的每個元素,并將它們與作為第二個參數(shù)傳遞的默認值連接起來。因為Python中的列表可以用+操作符連接,所以你得到的結(jié)果是這樣的:

 

  1. >>> sum(l, []) ==> [] + [1, 2, 3] + [4, 5, 6] + [7, 8, 9] 
  2. [1, 2, 3, 4, 5, 6, 7, 8, 9] 

盡管這個技巧很高明,但它絕不是可讀的。而且,它的性能也很糟糕。

4else

else語句可以用于幾個目的。很少有人知道,但是你可以在經(jīng)典的“if else”塊之外使用它。Python允許它用于循環(huán)和異常塊。

循環(huán)

Python有兩個不同的循環(huán),for和while。兩者都可能是“壞的”。也就是說,如果滿足了某個條件,就可以跳出循環(huán)。例如:

 

  1. In [7]: while a < 10: 
  2.    ...:     if a == 3: 
  3.    ...:         print("a == 3. exiting loop."
  4.    ...:         break 
  5.    ...:     a += 1 
  6.    ...:  
  7. a == 3. exiting loop. 

現(xiàn)在,假設(shè)我們要找一個特定的條件。如果滿足該條件,則將結(jié)果保存在一個名為found的標(biāo)志中。然后,如果我們沒有找到它,我們打印一條消息。

 

  1. found = False 
  2. a = 0 
  3.  
  4. while a < 10: 
  5.     if a == 12: 
  6.         found = True 
  7.     a += 1 
  8. if not found: 
  9.     print("a was never found"

因為a永遠不會變成12,所以程序輸出a永遠不會找到。

好,但是我們在這里怎么用else呢?

else可以用來替換標(biāo)志。基本上,我們實際需要的是運行循環(huán),如果沒有找到,則打印一條消息。

 

  1. a = 0 
  2.  
  3. while a < 10: 
  4.     if a == 12: 
  5.         break 
  6.     a += 1 
  7. else
  8.     print("a was never found"

由于它適用于任何循環(huán),所以您可以使用for而不是while。

 

  1. for a in range(10): 
  2.     if a == 12: 
  3.         break 
  4.     a += 1 
  5. else
  6.     print("a was never found"

異常

Python中的else是如此通用,你甚至可以使用try…except。這里的思想是捕獲異常不發(fā)生的情況。

 

  1. In [13]: try: 
  2.     ...:     {}['lala'
  3.     ...: except KeyError: 
  4.     ...:     print("Key is missing"
  5.     ...: else
  6.     ...:     print("Else here"
  7.     ...:  
  8. Key is missing 

在這個例子中,我們嘗試在一個空字典中查找名為“lala”的鍵。由于“lala”不存在,代碼將引發(fā)一個KeyError異常。當(dāng)我在IPython中運行這段代碼時,得到了預(yù)期的結(jié)果。

如果程序沒有引發(fā)異常呢?

 

  1. In [14]: try: 
  2.     ...:     {'lala''bla'}['lala'
  3.     ...: except KeyError: 
  4.     ...:     print("Key is missing"
  5.     ...: else
  6.     ...:     print("Else here"
  7.     ...:  
  8. Else here 

現(xiàn)在我們可以看到它的實際應(yīng)用。{' lala ': ' bla '}[' lala ']塊不會引發(fā)KeyError,所以else就起作用了。

5比較

這是我最喜歡的一個,老實說,沒有那么隱蔽。與許多編程語言(如Java、C或c++)不同,Python允許鏈?zhǔn)奖容^運算符。假設(shè)你有一個變量x,它的值是10。現(xiàn)在,假設(shè)你想斷言x在一個范圍內(nèi),比如5..20。你可以這樣做:

 

  1. In [16]: x = 10 
  2. In [17]: if x >= 5 and x <= 20: 
  3.     ...:     print("x is within range"
  4.     ...: else
  5.     ...:     print("x is outside range"
  6.     ...:  
  7. is within range 

事實證明,這可以通過將運算符鏈接起來來簡化。所以,我們可以重構(gòu)代碼為:

 

  1. In [18]: if 5 <= x <= 20: 
  2.     ...:     print("is within range"
  3.     ...: else
  4.     ...:     print("x is outside range"
  5.     ...:  
  6. is within range 

這段代碼實現(xiàn)了完全相同的結(jié)果,但它更加優(yōu)雅。您可以使用任何一種比較運算符進行鏈。

 

  1. >>> x = 10 
  2. >>> 20 == x > 1 
  3. False 
  4. >>> 25 > x <= 15 
  5. True 
  6. >>> x < 20 < x*10 < 1000 
  7. True 

 

責(zé)任編輯:華軒 來源: Python學(xué)會
相關(guān)推薦

2022-05-09 08:40:14

Python技巧代碼

2023-11-10 08:22:09

雪花算法生成算法分布式

2012-02-01 10:18:23

編程

2021-06-07 09:55:58

JavaScript開發(fā) 技巧

2025-04-17 08:10:41

2021-07-28 08:00:00

Linux操作系統(tǒng)工具

2020-07-20 07:16:47

Python編程語言工具

2023-10-11 10:40:00

GNOME

2020-09-13 09:03:44

數(shù)據(jù)策略數(shù)據(jù)科學(xué)數(shù)據(jù)

2022-10-17 15:47:19

JavaScript開發(fā)Web

2016-01-27 10:26:53

JavaScript操作系統(tǒng)

2018-10-11 10:41:12

Go 開發(fā)技術(shù)

2016-01-26 15:33:07

JavaScriptNodeOS操作系統(tǒng)

2018-09-28 07:00:03

編程語言Go語言

2016-07-11 00:40:30

2025-05-16 07:56:55

Vue Router架構(gòu)前端

2022-03-21 11:50:58

醫(yī)療物聯(lián)網(wǎng)物聯(lián)網(wǎng)

2016-10-25 15:36:49

Linux命令工具

2014-12-02 10:12:02

BaaSFacebook云服務(wù)

2024-11-29 15:00:00

Python字符串編程
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久草精品视频 | 国产一级片免费在线观看 | 成人免费一级 | 日本欧美国产在线观看 | 中文字幕二区 | 无毛av| 精品福利一区 | 国产精品一区二区久久精品爱微奶 | 久久se精品一区精品二区 | www.9191| 91久久视频 | 久久久精品 | 国产精品a久久久久 | 久久精彩 | 国产一二三区在线 | 欧美久久久久久久 | 国产精品一区一区 | 日韩成人免费av | 日本午夜精品 | 亚洲欧美在线观看 | 成人午夜视频在线观看 | 97日日碰人人模人人澡分享吧 | 亚洲综合区 | 久久亚洲综合 | 欧美三级三级三级爽爽爽 | 91成人精品视频 | 精品一区二区久久久久久久网精 | 精品国产一二三区 | 欧美精品一区二区在线观看 | 久久成人免费视频 | 中文字幕在线播放不卡 | 国产精品自在线 | h片在线观看网站 | 欧美视频成人 | 国产中文字幕在线观看 | 我要看黄色录像一级片 | 国产视频三级 | 亚洲激情自拍偷拍 | 日韩免费在线 | 免费精品一区 | 国产成人精品福利 |