欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

幾種實(shí)用的pythonic語(yǔ)法實(shí)例代碼

 更新時(shí)間:2018年02月24日 08:36:05   作者:hatlonely  
在我理解,Pythonic 就是很 Python 的 Python 代碼。下面這篇文章主要給大家分享介紹了幾種實(shí)用的pythonic語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

python 是一門(mén)簡(jiǎn)單而優(yōu)雅的語(yǔ)言,可能是過(guò)于簡(jiǎn)單了,不用花太多時(shí)間學(xué)習(xí)就能使用,其實(shí) python 里面還有一些很好的特性,能大大簡(jiǎn)化你代碼的邏輯,提高代碼的可讀性。

所謂Pythonic,就是極具Python特色的Python代碼(明顯區(qū)別于其它語(yǔ)言的寫(xiě)法的代碼)

關(guān)于 pythonic,你可以在終端打開(kāi) python,然后輸入 import this,看看輸出什么,這就是 Tim Peters 的 《The Zen of Python》,這首充滿(mǎn)詩(shī)意的詩(shī)篇里概況了 python 的設(shè)計(jì)哲學(xué),而這些思想,其實(shí)在所有語(yǔ)言也基本上是通用的

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea – let's do more of those!

使用生成器 yield

生成器是 python 里面一個(gè)非常有用的語(yǔ)法特性,卻也是最容易被忽視的一個(gè),可能是因?yàn)榇蟛糠帜苡蒙善鞯牡胤揭材苡昧斜戆伞?/p>

生成器可以簡(jiǎn)單理解成一個(gè)函數(shù),每次執(zhí)行到 yield 語(yǔ)句就返回一個(gè)值,通過(guò)不停地調(diào)用這個(gè)函數(shù),就能獲取到所有的值,這些值就能構(gòu)成了一個(gè)等效的列表,但是與列表不同的是,這些值是不斷計(jì)算得出,而列表是在一開(kāi)始就計(jì)算好了,這就是 lazy evaluation 的思想。這個(gè)特性在數(shù)據(jù)量特別大的場(chǎng)景非常有用,比如大數(shù)據(jù)處理,一次無(wú)法加載所有的文件,使用生成器就能做到一行一行處理,而不用擔(dān)心內(nèi)存溢出

def fibonacci():
 num0 = 0
 num1 = 1
 for i in range(10):
  num2 = num0 + num1
  yield num2
  num0 = num1
  num1 = num2
for i in fibonacci():
 print(i)

用 else 子句簡(jiǎn)化循環(huán)和異常

if / else 大家都用過(guò),但是在 python 里面,else 還可以用在循環(huán)和異常里面

# pythonic 寫(xiě)法
for cc in ['UK', 'ID', 'JP', 'US']:
 if cc == 'CN':
  break
else:
 print('no CN')
# 一般寫(xiě)法
no_cn = True
for cc in ['UK', 'ID', 'JP', 'US']:
 if cc == 'CN':
  no_cn = False
  break
if no_cn:
 print('no CN')

else 放在循環(huán)里面的含義是,如果循環(huán)全部遍歷完成,沒(méi)有執(zhí)行 break,則執(zhí)行 else 子句

# pythonic 寫(xiě)法
try:
 db.execute('UPDATE table SET xx=xx WHERE yy=yy')
except DBError:
 db.rollback()
else:
 db.commit()
# 一般寫(xiě)法
has_error = False
try:
 db.execute('UPDATE table SET xx=xx WHERE yy=yy')
except DBError:
 db.rollback()
 has_error = True
if not has_error:
 db.commit()

else 放到異常里面可以表示,如果沒(méi)有異常發(fā)生需要執(zhí)行的操作

用 with 子句自動(dòng)管理資源

我們都知道,打開(kāi)的文件需要在用完之后關(guān)閉,要不就會(huì)造成資源泄露,但是實(shí)際編程的時(shí)候經(jīng)常會(huì)忘記關(guān)閉,特別是在一些邏輯復(fù)雜的場(chǎng)景中,更是如此,python 有一個(gè)優(yōu)雅地解決方案,那就是 with 子句

# pythonic 寫(xiě)法
with open('pythonic.py') as fp:
 for line in fp:
  print(line[:-1])
# 一般寫(xiě)法
fp = open('pythonic.py')
for line in fp:
 print(line[:-1])
fp.close()

使用 with as 語(yǔ)句后,無(wú)需手動(dòng)調(diào)用 fp.close() , 在作用域結(jié)束后,文件會(huì)被自動(dòng) close 掉,完整的執(zhí)行過(guò)如下:

  • 調(diào)用 open('pythonic.py') ,返回的一個(gè)對(duì)象 obj,
  • 調(diào)用 obj.__enter__() 方法,返回的值賦給 fp
  • 執(zhí)行 with 中的代碼塊
  • 執(zhí)行 obj.__exit__()
  • 如果這個(gè)過(guò)程發(fā)生異常,將異常傳給 obj.__exit__() ,如果 obj.__exit__() 返回 False, 異常將被繼續(xù)拋出,如果返回 True,異常被掛起,程序繼續(xù)運(yùn)行

列表推導(dǎo)與生成器表達(dá)式

列表推導(dǎo)

[expr for iter_var in iterable if cond_expr]

生成器表達(dá)式

(expr for iter_var in iterable if cond_expr)

列表推導(dǎo)和生成器表達(dá)式提供了一種非常簡(jiǎn)潔高效的方式來(lái)創(chuàng)建列表或者迭代器

# pythonic 寫(xiě)法
squares = [x * x for x in range(10)]
# 一般寫(xiě)法
squares = []
for x in range(10):
 squares.append(x * x)

用 items 遍歷 map

python 里面 map 的遍歷有很多種方式,在需要同事使用 key 和 value 的場(chǎng)合,建議使用 items() 函數(shù)

m = {'one': 1, 'two': 2, 'three': 3}
for k, v in m.items():
 print(k, v)
for k, v in sorted(m.items()):
 print(k, v)

參考鏈接

Google python 語(yǔ)言規(guī)范: http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules/

《編寫(xiě)高質(zhì)量代碼:改善 Python 程序的91個(gè)建議》

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • python使用matplotlib繪制圖片時(shí)x軸的刻度處理

    python使用matplotlib繪制圖片時(shí)x軸的刻度處理

    在使用matplotlib繪制圖片時(shí),x軸的刻度可能比較密集,特別是以日期作為x軸時(shí),則最后會(huì)顯示不出來(lái)。這篇文章主要介紹了python使用matplotlib繪制圖片時(shí)x軸的刻度處理,需要的朋友可以參考下
    2021-08-08
  • Python socket聊天腳本代碼實(shí)例

    Python socket聊天腳本代碼實(shí)例

    這篇文章主要介紹了Python socket聊天腳本代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 使用python爬蟲(chóng)獲取黃金價(jià)格的核心代碼

    使用python爬蟲(chóng)獲取黃金價(jià)格的核心代碼

    這篇文章主要介紹了利用python爬蟲(chóng)獲取黃金價(jià)格,需要的朋友可以參考下
    2018-06-06
  • ROS1?rosbag的詳細(xì)使用并且使用python合并bag包的方法

    ROS1?rosbag的詳細(xì)使用并且使用python合并bag包的方法

    這篇文章主要介紹了ROS1?rosbag的詳細(xì)使用,并且使用python來(lái)合并bag包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • pytorch 圖像預(yù)處理之減去均值,除以方差的實(shí)例

    pytorch 圖像預(yù)處理之減去均值,除以方差的實(shí)例

    今天小編就為大家分享一篇pytorch 圖像預(yù)處理之減去均值,除以方差的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python實(shí)現(xiàn)三維擬合的方法

    python實(shí)現(xiàn)三維擬合的方法

    今天小編就為大家分享一篇python實(shí)現(xiàn)三維擬合的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python刪除文本中行數(shù)標(biāo)簽的方法

    python刪除文本中行數(shù)標(biāo)簽的方法

    這篇文章主要為大家詳細(xì)介紹了python刪除文本中行數(shù)標(biāo)簽的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 深入理解Playwright的高級(jí)功能和用法

    深入理解Playwright的高級(jí)功能和用法

    Playwright是一個(gè)強(qiáng)大而靈活的Python庫(kù),用于自動(dòng)化瀏覽器操作和測(cè)試,本文主要介紹了深入理解Playwright的高級(jí)功能和用法,具有一定的 參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 解決Python3.7.0 SSL低版本導(dǎo)致Pip無(wú)法使用問(wèn)題

    解決Python3.7.0 SSL低版本導(dǎo)致Pip無(wú)法使用問(wèn)題

    這篇文章主要介紹了解決Python3.7.0 SSL低版本導(dǎo)致Pip無(wú)法使用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Python tkinter分隔控件(Seperator)的使用

    Python tkinter分隔控件(Seperator)的使用

    這篇文章主要介紹了Python tkinter分隔控件(Seperator)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論