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

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

開發(fā) 后端
Python看似簡(jiǎn)單,但實(shí)則變化萬千,筆者總都能看到一些代碼以近乎不可能的方式呈現(xiàn)。這些功能很精妙,以至于我無法想象沒有Python時(shí)該怎樣生活。

 本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)

Python看似簡(jiǎn)單,但實(shí)則變化萬千,筆者總都能看到一些代碼以近乎不可能的方式呈現(xiàn)。這些功能很精妙,以至于我無法想象沒有Python時(shí)該怎樣生活。

[[335892]]

本文會(huì)涉及其中幾個(gè)不常用卻很有用的功能,包括:

  • 變量賦值——運(yùn)用*args和**kwargs(包括字典合并)
  • 不可變集合——是什么,為什么有用
  • 多因素條件——更清晰的邏輯
  • 檢查變量是否存在——在本地和全局范圍內(nèi)
  • 勝過lambda函數(shù)——編寫Python風(fēng)格和函數(shù)風(fēng)格的一行式代碼

變量賦值

正如函數(shù)*args和**kwargs,在變量賦值中可以運(yùn)用相同的語法:

 

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

 

合并兩個(gè)字典

合并字典時(shí)運(yùn)用可迭代變量賦值法中的**kwargs語法:

 

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

 

需要小心的是,如果字典間有公共鍵,后一個(gè)鍵值對(duì)(y中的)會(huì)替代前者。據(jù)即將發(fā)行的最新Python版本(3.9),可以用一個(gè)全新的語法來規(guī)避這個(gè)問題,即字典合并,并更新操作符:

z = x | y # 合并——如上所述的行為模式

x |= y # 更新——替代字典合并

不可變集合

在Python中,可以運(yùn)用集合,也就是不同對(duì)象的無序集合。這些集合是可變的,意味著能用add()和remove()進(jìn)行變換——這說明可變集合是不可哈希的。

反之,可以運(yùn)用不可變集合frozenset()——一種無法改變值的集合。但正因不可變,它是可哈希的——當(dāng)把set和frozenset同時(shí)作為字典的鍵時(shí),這一點(diǎn)就體現(xiàn)出來了:

 

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

 

 

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

 

把frozenset作為字典的鍵似乎并不實(shí)用,但是frozenset的作用是提供更詳細(xì)、更具目的性的代碼。這提醒了未來的代碼閱讀者——如果改變我,一切都會(huì)崩潰。

多因素條件

清理那些雜亂的if語句,而不是:

 

  1. if 0 <= x and x <= 1: 
  2. print('value is %'

可以寫成:

 

  1. if (0 <= x <= 1): 
  2. print('value is %'

再深入一點(diǎn),可以添加更多的條件語句,并用逐位運(yùn)算符把它們串起來:

 

  1. if (0 <= x < 1) | (7 <= x < 8) | (x == 10): 
  2.     print('passed'

檢查變量是否存在

我需要檢查變量是否存在嗎?

 

  1. if "var_name" in globals(): 
  2.     print("var_nameexists!")elif "var_name" in locals(): 
  3.     print("var_name existslocally!")else
  4.     print("var_name does notexist."

可以分別利用 globals()和 locals()在全局和本地范圍內(nèi)檢查變量。

 

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

 

檢查變量test1和test2是否在全局或本地

globals和locals這兩個(gè)作用域函數(shù)都會(huì)返回字典——因此也執(zhí)行上述的字典合并語法{**x, **y}。代碼在合并范圍后的字典中同時(shí)檢查了test1和test2。

勝過lambda函數(shù)

利用lambda函數(shù)編寫一行簡(jiǎn)單快捷的程序是很常見的,但是它很少用來建立多參數(shù)函數(shù)。通常情況如下:

 

  1. do_something = lambda x: x**2 / (1 - x) 

但lambda函數(shù)也可用來構(gòu)建簡(jiǎn)練的一行式函數(shù):

 

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

 

運(yùn)用lambda函數(shù)構(gòu)建一個(gè)帶有Cochran方

在到處運(yùn)用lambda函數(shù)之前,你要知道這是Python語法中最忌諱的用法之一。PEP 8——Python的代碼風(fēng)格指南——非常不鼓勵(lì)把lambda函數(shù)作為命名函數(shù)。同時(shí),特別是對(duì)于數(shù)字公式,一行式函數(shù)看起來會(huì)很奇怪。

因此,可以編寫一行式的def 語句來替代lambda:

 

挑戰(zhàn)“不可能”的代碼:你不知道的Python功能

 

運(yùn)用單行的def語句構(gòu)建一個(gè)帶有Cochran

運(yùn)用哪一種方法取決于你。除非是想得到消極的反饋,那么請(qǐng)用lambda,否則還是用def吧。

這是五項(xiàng)非常有用的Python功能,如果你不知道的話,就趕快積累起來吧!

 

責(zé)任編輯:華軒 來源: 讀芯術(shù)
相關(guān)推薦

2021-12-17 00:10:00

ChromeDevtools功能

2020-01-29 19:40:36

Python美好,一直在身邊Line

2021-01-05 11:22:58

Python字符串代碼

2012-11-23 10:57:44

Shell

2021-03-25 11:19:34

Windows 10Windows微軟

2019-11-25 14:05:47

Python裝飾器數(shù)據(jù)

2015-08-13 09:03:14

調(diào)試技巧

2019-11-20 10:25:06

sudoLinux

2023-02-27 09:20:24

絕對(duì)定位CSS

2023-01-29 09:46:47

Dialog彈窗模態(tài)

2020-06-22 08:09:22

GitHub工具開發(fā)

2020-09-11 08:48:52

Python 3開發(fā)代碼

2025-02-27 08:33:13

2022-05-01 09:29:19

Chrome面板頁面

2014-12-08 10:39:15

2021-07-12 07:59:06

安全 HTML 屬性

2015-09-16 10:48:57

Python庫(kù)

2011-09-06 13:56:07

Vista服務(wù)器網(wǎng)卡

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲成人综合网站 | 羞羞的视频在线看 | 久久久久久久久久久久久9999 | 91精品国产乱码久久久久久久久 | 欧美在线观看一区二区 | 国产精品小视频在线观看 | 亚洲一区二区三区免费视频 | 九九热精品视频 | 亚洲一区二区三区观看 | 99亚洲精品 | 亚洲精品乱码久久久久久蜜桃91 | 日本欧美黄色片 | 欧美一区二区三区在线播放 | 成人激情视频免费观看 | 91精品国产欧美一区二区 | 午夜精品福利视频 | 日本网站免费在线观看 | japanhdxxxx裸体| 91久久久久 | 精品国产91久久久久久 | 亚洲精品一区二区三区四区高清 | 中文字幕av一区 | 亚洲综合中文字幕在线观看 | 久久久久免费观看 | 逼逼网| 色综合久久久久 | 在线视频 亚洲 | 成年免费视频 | 亚洲高清三级 | 久久久久9999 | 精彩视频一区二区三区 | 99reav| 欧美日韩免费一区二区三区 | 国产区在线观看 | 精品一区二区三区在线视频 | 久久精品伊人 | 亚洲三区在线观看 | 久久久久久久国产精品影院 | 国产97视频在线观看 | 国产原创在线观看 | 亚洲三级在线 |