日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python星空画法教程_对比几段代码,看看你是 Python 菜鸟还是老鸟

發(fā)布時(shí)間:2023/12/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python星空画法教程_对比几段代码,看看你是 Python 菜鸟还是老鸟 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python 里有個(gè)小彩蛋:

在 Python Shell 里輸入 import this

這段話(huà)被稱(chēng)作“Python 之禪”(The Zen of Python),它列舉了一些 Python 所推崇的理念,比如:

優(yōu)美勝于丑陋明確勝于隱晦簡(jiǎn)單勝于復(fù)雜
…可讀性很重要不要忽略錯(cuò)誤
面對(duì)不確定時(shí),拒絕猜測(cè)現(xiàn)在做好過(guò)不做,但盲目動(dòng)手不如不做
如果你的實(shí)現(xiàn)很難說(shuō)清楚,那是個(gè)壞想法;反之亦然

當(dāng)你學(xué)完基礎(chǔ),可以寫(xiě)點(diǎn)代碼的時(shí)候,可能經(jīng)常感覺(jué)自己的實(shí)現(xiàn)很別扭。有經(jīng)驗(yàn)的程序員會(huì)一眼看出你的代碼出自一個(gè)初學(xué)者之手。這就是我們經(jīng)常說(shuō)的,代碼不夠 pythonic。

所謂 pythonic,我覺(jué)得包含兩方面:一是代碼的風(fēng)格符合 Python 的特點(diǎn),能合理使用 Python 的“語(yǔ)法糖”;二是代碼簡(jiǎn)潔優(yōu)美,穩(wěn)定性高,可讀性好,便于維護(hù)和修改。所謂“Python 之禪”并不僅限于 Python,很多理念是編程普適的。

比如來(lái)實(shí)現(xiàn)對(duì)一個(gè)列表中元素的遍歷訪問(wèn),我見(jiàn)過(guò)很多次有人這么寫(xiě):

for i in range(len(lst)):print(lst[i])

這樣的同學(xué)很可能是之前有過(guò) C/C++ 或 Java 的經(jīng)驗(yàn)。這么寫(xiě)功能上沒(méi)問(wèn)題,但不夠簡(jiǎn)潔,不夠 pythonic。更好的實(shí)現(xiàn)方式:

for i in lst:print(i)

這種不影響功能,但能簡(jiǎn)化程序、提高可讀性的語(yǔ)法,我們稱(chēng)之為“語(yǔ)法糖”(Syntactic sugar)。Python 中類(lèi)似的例子還有不少,來(lái)舉幾個(gè):

1、交換兩個(gè)變量的值,普通寫(xiě)法:

temp = a a = b b = temp

pythonic 寫(xiě)法:

a, b = b, a

2、類(lèi)似的解包(unpacking)用法還可以實(shí)現(xiàn)多個(gè)返回值的函數(shù)。普通寫(xiě)法:

def func(a, b):result = [b, a]return result r = func(a, b) x = r[0] y = r[1]

pythonic 寫(xiě)法:

def func(a, b):return b, a x, y = func(a, b)

3、讀寫(xiě)文件,普通寫(xiě)法:

f = open('filename.txt') text = f.read() print(text) f.close()

pythonic 寫(xiě)法:

with open('filename.txt') as f:for line in f:print(line)

with 的好處是即使出錯(cuò),也會(huì)幫你關(guān)閉文件。

4、拼接字符串,普通寫(xiě)法:

letters = ['h', 'e', 'l', 'l', 'o'] s = '' for l in letters:s += l print(s)

pythonic 寫(xiě)法:

print(''.join(letters))

5、關(guān)于前面遍歷列表的例子,如果你想帶上索引,可以這么寫(xiě):

for i, elem in enumerate(lst):print(i, elem)

遍歷字典項(xiàng):

for key, value in dct.items():print(key, value)

6、取出列表中大于 0 的元素,生成新列表。普通寫(xiě)法:

new_lst = [] for i in lst:if i > 0:new_lst.append(i)

pythonic 寫(xiě)法:

new_lst = [i for i in lst if i > 0]

這個(gè)被稱(chēng)為“列表解析式”(List comprehension,中文翻譯說(shuō)法有很多),可以說(shuō)是非常 pythonic 的一個(gè)用法了。

更進(jìn)一步,如果數(shù)據(jù)量很大,而你對(duì)新列表僅僅是遍歷操作,并不需要一個(gè)列表對(duì)象,可以采用生成器:

new_lst = (i for i in lst if i > 0) for i in new_lst:print(i)

這樣會(huì)更節(jié)省資源,提升執(zhí)行效率。

7、判斷一個(gè)值是否為T(mén)rue、是否為空列表、是否是None,普通寫(xiě)法:

if x == True:pass if len(y) == 0:pass if z == None:pass

pythonic 寫(xiě)法:

if x:pass if not y:pass if z is None:pass

8、根據(jù)鍵名獲取字典中對(duì)應(yīng)的值,普通寫(xiě)法:

value = dct[key]

這樣的問(wèn)題在于,如果 key 不存在,代碼就報(bào)錯(cuò)跳出。于是你不得不增加更多的判斷。

pythonic 寫(xiě)法:

value = dct.get(key, 0)

改用 get 方法,不存在時(shí)會(huì)得到 None,或者指定的默認(rèn)值(這里是 0)。

篇幅所限,以上僅僅是一些比較具有代表性的例子。但凡事要有度,過(guò)分追求 pythonic 的寫(xiě)法也可能導(dǎo)致代碼的可讀性下降。比如有人喜歡把很多功能寫(xiě)在一個(gè)語(yǔ)句中,這反倒不 pythonic 了。所以,我們需要有一些設(shè)計(jì)的原則,但又不必拘泥于具體的形式,否則就鉆入牛角尖了。

那么對(duì)于學(xué)習(xí)者來(lái)說(shuō),如何才能寫(xiě)出更 pythonic 的代碼呢?說(shuō)到底還是個(gè)經(jīng)驗(yàn)積累的過(guò)程,菜鳥(niǎo)不可能看本書(shū)、上個(gè)課就一夜變成老鳥(niǎo),但只要堅(jiān)持得夠久就可以。我這邊給幾個(gè)建議:

  • 多看。看官方庫(kù)、優(yōu)秀項(xiàng)目,學(xué)習(xí)別人的代碼。以及看一些優(yōu)質(zhì)的教程和經(jīng)驗(yàn)分享,比如 Crossin的編程教室
  • 多搜。當(dāng)你實(shí)現(xiàn)一個(gè)小功能后,去網(wǎng)上搜一下,別人是怎么寫(xiě)的,對(duì)比下是不是比你自己的更好。舉個(gè)例子:如何從列表中刪除重復(fù)元素。你自己可以通過(guò)循環(huán)實(shí)現(xiàn),但只要搜一下,就會(huì)知道 list(set(x)) 這種用法。
  • 多寫(xiě)。自己還沒(méi)寫(xiě)幾行代碼,就先別糾結(jié)什么效率什么風(fēng)格了。最終還是要寫(xiě)上足夠量的代碼,才會(huì)有“悟道”的那一刻。
  • 另外,對(duì)于代碼本身,Python 有一套書(shū)寫(xiě)規(guī)范,叫做 PEP8。里面約定了很多細(xì)節(jié),比如哪里該空格、注釋怎么寫(xiě)、什么地方該換行、如何命名等等。鏈接:https://www.python.org/dev/peps/pep-0008/,網(wǎng)上還有翻譯好的中文版,務(wù)必找時(shí)間看一看。

    最后,留2個(gè)小作業(yè):

    1. 判斷一個(gè)列表 A 是否為另一個(gè)列表 B 的“子集”,也就是列表 A 中的元素是否都在列表 B 中。
    2. 計(jì)算 1 加到 100 的和。
    盡可能寫(xiě)出你認(rèn)為 pythonic 的代碼。

    ════

    其他文章及回答:

    學(xué)編程:如何自學(xué)Python | 新手引導(dǎo) | 一圖學(xué)Python

    開(kāi)發(fā)案例:智能防擋彈幕 | 紅包提醒 | 流浪地球

    歡迎搜索及關(guān)注:Crossin的編程教室

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的python星空画法教程_对比几段代码,看看你是 Python 菜鸟还是老鸟的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。