0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過星號(hào)編寫Python代碼的最佳方式

如意 ? 來源:百家號(hào) ? 作者:讀芯術(shù) ? 2020-07-01 09:58 ? 次閱讀

Python以句法簡(jiǎn)單、簡(jiǎn)潔而聞名,只需掌握簡(jiǎn)單的英語就能理解其代碼。對(duì)初學(xué)者來說極具吸引力,它沒有聲明,沒有花哨的字符或者奇怪的句法。正因如此,Python才得以風(fēng)靡全球。

除此之外,Python還具備一些很酷的特點(diǎn),比如裝飾器和列表解析。這些特點(diǎn)確實(shí)能創(chuàng)造奇跡,但*也值得這一美名,小小字符能帶來翻天覆地的變化。

先從一個(gè)小技巧開始:

In [1]:

first_dict= {‘key1’: ‘hello’, ‘key2’: ‘world’}

second_dict= {‘key3’: ‘whats’, ‘key4’: ‘up’}

In [2]:

#joins the dicts

combined_dict= {**first_dict, **second_dict}

combined_dict

Out[2]:

{‘key1’: ‘hello’, ‘key2’: ‘world’, ‘key3’:‘whats’, ‘key4’: ‘up’}

In [ ]:

這是合并字典的超簡(jiǎn)單方法!你能明顯看出,我僅用了幾個(gè)星號(hào)就將字典結(jié)合了起來,我接下來會(huì)一一解釋。

星號(hào)在哪些地方發(fā)揮作用?

除了眾所周知的乘法作用,星號(hào)還能讓你輕松完成一些重要任務(wù),例如解包。一般來說,你可以使用星號(hào)來解包可迭代對(duì)象,也能對(duì)雙向可迭代對(duì)象(就像字典一樣)進(jìn)行雙重解包。

In [7]:

# unpackingan iterable

[xfor x inrange(100)] == [*range(100)]

Out[7]:

True

In [8]:

#unpkacing dict keys

d = {‘key1’: ‘A’}

list(d.keys()) == [*d]

Out[8]:

True

In [9]:

#unpacking whole dict

d == {**d}

Out[9]:

True

解包的力量

不要破壞別人的代碼

大家也越來越理解這一點(diǎn),但仍然有人沒有遵守。開發(fā)者寫出的每一個(gè)函數(shù)都有其特征。如果函數(shù)被改變,那么所有基于你的代碼而撰寫的代碼都會(huì)被破壞。

我將介紹一種簡(jiǎn)單的方法,你可以為自己的函數(shù)增添更多功能性,同時(shí)也不會(huì)破壞其向后兼容性,最后你會(huì)得到更多的模塊化代碼。

在你的代碼中輸入*args和**kwrags,它們會(huì)將所有輸入都解包進(jìn)函數(shù)。單星號(hào)針對(duì)標(biāo)準(zhǔn)的可迭代對(duì)象,雙星號(hào)針對(duì)字典類的雙向可迭代對(duì)象,舉例說明:

In [1]:

defversion1(a, b):

print(a)

print(b)

In [2]:

version1(4,5)

4

5

In [3]:

#code breaks

version1(4,5,6)

---------------------------------------------------------------------------

TypeError Traceback(most recent call last)

《ipython-input-3-b632c039a799》 in《module》

1# code breaks

----》 2 version1(4,5,6)

TypeError: version1() takes 2 positionalarguments but 3 were given

In [4]:

defversion2(a, b, *args):

print(a)

print(b)

# new function.

if args:

for c in args:

print(c)

In [5]:

version2(1,2,3,4,5)

1

2

3

4

5

In [6]:

#code breaks

version2(1,2,3,4,5, Extra=10)

---------------------------------------------------------------------------

TypeError Traceback(most recent call last)

《ipython-input-6-748b0aef9e5d》in 《module》

1 # code breaks

----》 2 version2(1,2,3,4,5, Extra=10)

TypeError: version2() got an unexpectedkeyword argument ‘Extra’

In [7]:

defversion3(a, b , *args, **kwrags):

print(a)

print(b)

# new function.

if args:

for c in args:

print(c)

if kwrags:

for key, value inzip(kwrags.keys(), kwrags.values()):

print(key,‘:’, value)

In [8]:

version3(1,2,3,4,5, Extra=10)

1

2

3

4

5

Extra : 10

In [ ]:

工作代碼和破解代碼

這個(gè)例子展示了如何使用args和kwargs來接收之后的參數(shù),并留到將來使用,同時(shí)也不會(huì)破壞你函數(shù)中原有的call函數(shù)。

星號(hào)是Python中很重要的一部分,但卻常常被我們忽略。事實(shí)上,我們平常沒有注意到的關(guān)鍵點(diǎn)還有很多,值得我們?nèi)ヒ稽c(diǎn)點(diǎn)探索。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67767
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84078
  • 語法
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    9726
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    5種Python實(shí)現(xiàn)方式詳解

    Python(CPython)將Python源碼編譯成CPython字節(jié)碼,再由虛擬機(jī)解釋執(zhí)行這些字節(jié)碼。如果需要廣泛用到C編寫的第三方擴(kuò)展,或讓大多數(shù)用戶都能直接使用你的Python
    發(fā)表于 05-22 15:52

    Python最佳學(xué)習(xí)路線

    Python最佳學(xué)習(xí)路線
    發(fā)表于 05-11 12:11

    python編寫條件分支的最佳實(shí)踐

    =user.address, **extra_args)當(dāng)你編寫分支代碼時(shí),請(qǐng)額外關(guān)注由分支產(chǎn)生的重復(fù)代碼塊,如果可以簡(jiǎn)單的消滅它們,那就不要遲疑。4. 謹(jǐn)慎使用三元表達(dá)式三元表達(dá)式是 Pyt
    發(fā)表于 04-21 15:20

    python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例

    本文檔的主要內(nèi)容詳細(xì)介紹的是python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例。
    發(fā)表于 09-06 14:25 ?42次下載
    <b class='flag-5'>python</b><b class='flag-5'>代碼</b>示例之基于<b class='flag-5'>Python</b>的日歷api調(diào)用<b class='flag-5'>代碼</b>實(shí)例

    7個(gè)Python調(diào)試通過代碼詳細(xì)資料分析

    "Python的應(yīng)用十分廣泛,今天我們來分享7個(gè)Python實(shí)戰(zhàn)項(xiàng)目代碼,希望你有所收獲。
    的頭像 發(fā)表于 10-14 09:46 ?3361次閱讀

    python3編寫的人臉識(shí)別源代碼合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是python3編寫的人臉識(shí)別源代碼合集免費(fèi)下載,有3個(gè)不同的代碼,分別是三種不同的算法。
    發(fā)表于 03-12 08:00 ?6次下載

    如何使用Warp在Python環(huán)境中編寫CUDA內(nèi)核

      通常,實(shí)時(shí)物理模擬代碼是用低級(jí) CUDA C ++編寫的,以獲得最佳性能。在這篇文章中,我們將介紹 NVIDIA Warp ,這是一個(gè)新的 Python 框架,可以輕松地用
    的頭像 發(fā)表于 04-02 16:15 ?2475次閱讀

    利用Python編寫簡(jiǎn)單網(wǎng)絡(luò)爬蟲實(shí)例

    利用 Python編寫簡(jiǎn)單網(wǎng)絡(luò)爬蟲實(shí)例2 實(shí)驗(yàn)環(huán)境python版本:3.3.5(2.7下報(bào)錯(cuò)
    發(fā)表于 02-24 11:05 ?14次下載

    優(yōu)化Python代碼有哪些工具

    代碼。 1. Jupyter Notebook:這個(gè)交互式筆記本工具允許您在瀏覽器中編寫和運(yùn)行Python代碼,并以文檔形式保存。Jupyter Notebook使得
    的頭像 發(fā)表于 07-24 09:28 ?1217次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)python代碼

    的卷積操作,將不同層次的特征進(jìn)行提取,從而通過反向傳播算法不斷優(yōu)化網(wǎng)絡(luò)權(quán)重,最終實(shí)現(xiàn)分類和預(yù)測(cè)等任務(wù)。 在本文中,我們將介紹如何使用Python實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò),并詳細(xì)說明每一個(gè)步驟及其原理。 第一步:導(dǎo)入必要的庫(kù) 在開始編寫
    的頭像 發(fā)表于 08-21 16:41 ?893次閱讀

    TinyDB :一個(gè)純Python編寫的輕量級(jí)數(shù)據(jù)庫(kù)

    TinyDB 是一個(gè)純 Python 編寫的輕量級(jí)數(shù)據(jù)庫(kù),一共只有1800行代碼,沒有外部依賴項(xiàng)。 TinyDB的目標(biāo)是降低小型 Python 應(yīng)用程序使用數(shù)據(jù)庫(kù)的難度,對(duì)于一些簡(jiǎn)單程
    的頭像 發(fā)表于 10-21 10:22 ?730次閱讀

    python怎樣運(yùn)行代碼

    討論Python代碼的運(yùn)行方式,包括解釋器、交互式環(huán)境和命令行。 Python代碼可以通過兩種主
    的頭像 發(fā)表于 11-22 10:31 ?987次閱讀

    python代碼寫完后點(diǎn)哪個(gè)運(yùn)行

    當(dāng)你完成了編寫Python代碼后,你可以選擇多種方式來運(yùn)行它。下面是幾種常見的運(yùn)行代碼方式
    的頭像 發(fā)表于 11-24 09:28 ?2807次閱讀

    python軟件怎么運(yùn)行代碼

    理解的機(jī)器代碼。 在本文中,我們將詳細(xì)介紹如何運(yùn)行Python代碼。我們將探討以下幾個(gè)方面:安裝Python,設(shè)置環(huán)境變量,選擇一個(gè)集成開發(fā)環(huán)境(IDE)或文本編輯器,
    的頭像 發(fā)表于 11-28 16:02 ?745次閱讀

    python軟件IDLE怎么打多行代碼

    用于編寫、編輯和運(yùn)行Python代碼的編輯器窗口。在IDLE中編寫多行代碼有幾種方法可以實(shí)現(xiàn)。 使用括號(hào)與換行符: 在IDLE中
    的頭像 發(fā)表于 11-29 15:00 ?3184次閱讀