chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

簡(jiǎn)潔編寫(xiě)Python 語(yǔ)法的7種技巧分享

? 來(lái)源:IT技術(shù)頭條 ? 作者:IT技術(shù)頭條 ? 2020-12-20 11:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Python 是一門(mén)用途廣泛、易讀、而且容易入門(mén)的編程語(yǔ)言。但同時(shí) python 語(yǔ)法也允許我們做一些很奇怪的事情。

1、使用 lambda 表達(dá)式重寫(xiě)多行函數(shù)

眾所周知 python 的 lambda 表達(dá)式不支持多行代碼。但是可以模擬出多行代碼的效果。

def f():

x = 'string'

if x.endswith('g'):

x = x[:-1]

r = ''

for i in xrange(len(x)):

if x[i] != 'i':

r += x[i]

return r

f()

-> 'strn'

雖然看起來(lái)很奇怪,但是上面的函數(shù)可以使用下面的 lambda 表達(dá)式函數(shù)代替:
(lambda: ([x for x in ['string']], x.endswith('g') and [x for x in [x[:-1]]], [r for r in ['']], [x[i] != 'i'and [r for r in [r+x[i]]] for i in xrange(len(x))], r)[-1])()

-> 'strn'

永遠(yuǎn)不要在生產(chǎn)環(huán)境寫(xiě)這樣的代碼 :)

2、三元運(yùn)算符

現(xiàn)代的 python 提供了更簡(jiǎn)便的語(yǔ)法:
b if a else c

也可以通過(guò)下面的方式重寫(xiě):
(a and [b] or [c])[0]
(b, c)[not a]

順便說(shuō)一下,下面的變體是錯(cuò)誤的:
a and b or c

True and [] or [1] -> [1], but: [] if True else [1] -> []

3、通過(guò)列表推導(dǎo)式移除重復(fù)的元素

讓我們來(lái)把字符串 x = 'tteesstt' 轉(zhuǎn)換成 'test' 吧。

1.在原字符串中和上一個(gè)字符比較:
''.join(['' if i and j == x[i-1] else j for i,j in enumerate(x)]

2.把前一個(gè)字符保存到臨時(shí)變量中:
''.join([('' if i == a else i, [a for a in [i]])[0] for a in [''] for i in x])

''.join([('' if i == a.pop() else i, a.append(i))[0] for a in [['']] for i in x])

3.在新字符串中和上一個(gè)字符比較:
[(not r.endswith(i) and [r for r in [r+i]], r)[-1] for r in [''] for i in x][-1]

4.通過(guò) reduce 函數(shù)和 lambda 表達(dá)式:
reduce(lambda a, b: a if a.endswith(b) else a + b, x)

4、通過(guò)列表推導(dǎo)式獲得斐波拉契數(shù)列

1.把中間值保存在列表中
[(lambda: (l[-1], l.append(l[-1] + l[-2]))[0])() for l in [[1, 1]] for x in xrange(19)]

[(l[-1], l.append(l[-1] + l[-2]))[0] for l in [[1, 1]] for x in xrange(19)]

2.把中間值保存到字典中:
[i for x in [(lambda: (l['a'], l.update({'a': l['a'] + l['b']}), l['b'], l.update({'b': l['a'] + l['b']}))[::2])()for l in [{'a': 1, 'b': 1}] for x in xrange(10)] for i in x]

[i for x in [(l['a'], l.update({'a': l['a'] + l['b']}), l['b'], l.update({'b': l['a'] + l['b']}))[::2] for l in [{'a':1, 'b': 1}] for x in xrange(10)] for i in x]

3.通過(guò) reduce 函數(shù)和 lambda 表達(dá)式:
reduce(lambda a, b: a + [a[-1] + a[-2]], xrange(10), [1, 1])

reduce(lambda a, b: a.append(a[-1] + a[-2]) or a, xrange(10), [1, 1])

4.速度最快的變體:
[l.append(l[-1] + l[-2]) or l for l in [[1, 1]] for x in xrange(10)][0]

5、使用列表推導(dǎo)式產(chǎn)生死循環(huán)
[a.append(b) for a in [[None]] for b in a]

列表切片技巧

1.復(fù)制列表:
l = [1, 2, 3]

m = l[:]

m

-> [1, 2, 3]

2.移除/替換 列表中的任意元素:
l = [1, 2, 3]

l[1:-1] = [4, 5, 6, 7]

l

-> [1, 4, 5, 6, 7, 3]

3.在列表的開(kāi)頭添加元素:

l = [1, 2, 3]

l[:0] = [4, 5, 6]

l

-> [4, 5, 6, 1, 2, 3]

4.在列表的尾部添加元素:
l = [1, 2, 3]

l[-1:] = [l[-1], 4, 5, 6]

l

-> [1, 2, 3, 4, 5, 6]

5.反轉(zhuǎn)列表:
l = [1, 2, 3]

l[:] = l[::-1]

6、替換方法字節(jié)碼

Python 阻止替換類(lèi)實(shí)例中的方法,因?yàn)?python 給類(lèi)實(shí)例中的方法賦予了只讀屬性:
class A(object):

def x(self):

print "hello"

a = A()

def y(self):

print "world"

a.x.im_func = y

-> TypeError: readonly attribute

但是可以在字節(jié)碼的層面上進(jìn)行替換:
a.x.im_func.func_code = y.func_code

a.x()

-> 'world'

注意! 這不僅對(duì)當(dāng)前的實(shí)例有影響,而且對(duì)整個(gè)類(lèi)都有影響(準(zhǔn)確的說(shuō)是與這個(gè)類(lèi)綁定的函數(shù))(譯者注:此處應(yīng)該是筆誤,推測(cè)作者原意是:準(zhǔn)確的說(shuō)是與這個(gè)函數(shù)綁定的所有類(lèi)),并且所有其他的實(shí)例也會(huì)受到影響:
new_a = A()

new_a.x()

-> 'world'

7、讓可變?cè)刈鳛楹瘮?shù)參數(shù)默認(rèn)值

把可變對(duì)象作為函數(shù)參數(shù)的默認(rèn)值是非常危險(xiǎn)的一件事,并且在面試中有大量關(guān)于這方面棘手的面試問(wèn)題。但這一點(diǎn)對(duì)于緩存機(jī)制非常有幫助。

1.階乘函數(shù):

def f(n, c={}):

if n in c:

return c[n]

if (n

r = 1

else:

r = n * f(n - 1)

c[n] = r

return r

f(10)

-> 3628800

f.func_defaults

({1: 1,

2: 2,

3: 6,

4: 24,

5: 120,

6: 720,

7: 5040,

8: 40320,

9: 362880,

10: 3628800},)

2.斐波拉契數(shù)列:
def fib(n, c={}):

if n in c:

return c[n]

if (n

r = 1

else:

r = fib(n - 2) + fib(n - 1)

c[n] = r

return r

fib(10)

-> 89

fib.func_defaults[0].values()

-> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

個(gè)人覺(jué)得,在所有的高級(jí)計(jì)算機(jī)語(yǔ)言中,Python 是最接近人類(lèi)自然語(yǔ)言的。Python 的語(yǔ)法、風(fēng)格都與英文的書(shū)寫(xiě)習(xí)慣非常接近,Python 的這種風(fēng)格被稱為 Pythonic,如條件表達(dá)式,在 JavaC++ 中是這樣的:
int min = x

而 Python 是這樣的:
min = x if x

顯然,更加接近人的自然思維。

編輯:hfy


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

    關(guān)注

    57

    文章

    4856

    瀏覽量

    89522
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文了解Mojo編程語(yǔ)言

    Mojo 是一由 Modular AI 公司開(kāi)發(fā)的編程語(yǔ)言,旨在將 Python 的易用性與 C 語(yǔ)言的高性能相結(jié)合,特別適合人工智能(AI)、高性能計(jì)算(HPC)和系統(tǒng)級(jí)編程場(chǎng)景。以下是關(guān)于
    發(fā)表于 11-07 05:59

    語(yǔ)法糾錯(cuò)和testbench的自動(dòng)生成

    編寫(xiě)Verilog代碼時(shí),我一般都是先在編輯器上寫(xiě)完,因?yàn)榫庉嬈鱲scode或者notepad++可以提供語(yǔ)法高亮和自動(dòng)補(bǔ)全等功能,然后用仿真器跑仿真,但是在編寫(xiě)過(guò)程中不可避免的會(huì)有一些語(yǔ)法
    發(fā)表于 10-27 07:07

    termux輸出Hello termux

    Python 語(yǔ)法 Python 腳本文件中只需包含純 Python 代碼,無(wú)需添加 `python` 命令或 HTML 標(biāo)簽(如 ``
    發(fā)表于 08-29 12:16

    termux如何搭建python游戲

    Pygame),確保已安裝`clang`編譯器:`apt install -y clang` 3. 權(quán)限問(wèn)題:若需訪問(wèn)手機(jī)文件,安裝`termux-setup-storage`并授權(quán)存儲(chǔ)訪問(wèn)權(quán)限。 通過(guò)以上步驟,即可在Termux中搭建完整的Python游戲開(kāi)發(fā)環(huán)境,支持從代碼
    發(fā)表于 08-29 07:06

    Python腳本實(shí)現(xiàn)運(yùn)維工作自動(dòng)化案例

    還在為重復(fù)性運(yùn)維工作而煩惱?每天被各種告警、監(jiān)控、部署搞得焦頭爛額?作為一名有10年經(jīng)驗(yàn)的運(yùn)維老司機(jī),今天分享5個(gè)超實(shí)用的Python自動(dòng)化腳本,讓你的運(yùn)維工作效率提升300%!這些都是我在生產(chǎn)環(huán)境中實(shí)際使用的案例,代碼簡(jiǎn)潔高效,拿來(lái)即用!
    的頭像 發(fā)表于 08-27 14:46 ?766次閱讀

    C++ 與 Python:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    Python是樹(shù)莓派上的首選編程語(yǔ)言,我們的大部分教程都使用它。然而,C++在物聯(lián)網(wǎng)項(xiàng)目中同樣廣受歡迎且功能強(qiáng)大。那么,在樹(shù)莓派項(xiàng)目中選擇哪種語(yǔ)言更合適呢?Python因其簡(jiǎn)潔性、豐富的庫(kù)和資源而被
    的頭像 發(fā)表于 07-24 15:32 ?623次閱讀
    C++ 與 <b class='flag-5'>Python</b>:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    RAKsmart企業(yè)服務(wù)器上部署DeepSeek編寫(xiě)運(yùn)行代碼

    在RAKsmart企業(yè)服務(wù)器上部署并運(yùn)行DeepSeek模型的代碼示例和詳細(xì)步驟。假設(shè)使用 Python + Transformers庫(kù) + FastAPI實(shí)現(xiàn)一個(gè)基礎(chǔ)的AI服務(wù)。主機(jī)推薦小編為您整理發(fā)布RAKsmart企業(yè)服務(wù)器上部署DeepSeek編寫(xiě)運(yùn)行代碼。
    的頭像 發(fā)表于 03-25 10:39 ?526次閱讀

    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

    是一非常有用的編程語(yǔ)言,其語(yǔ)法易于閱讀,允許程序員使用比匯編、C或Java等語(yǔ)言更少的代碼行。Python編程語(yǔ)言最初實(shí)際上是作為L(zhǎng)inux的腳本語(yǔ)言而開(kāi)發(fā)的。Py
    的頭像 發(fā)表于 03-25 09:27 ?1506次閱讀
    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上<b class='flag-5'>編寫(xiě)</b>和運(yùn)行<b class='flag-5'>Python</b>程序?

    Python在嵌入式系統(tǒng)中的應(yīng)用場(chǎng)景

    你想把你的職業(yè)生涯提升到一個(gè)新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開(kāi)發(fā)更多地依賴于C和C++語(yǔ)言,Python的優(yōu)勢(shì)在于其簡(jiǎn)潔語(yǔ)法、豐富的
    的頭像 發(fā)表于 03-19 14:10 ?1171次閱讀

    Python繪圖Matplotlib快速參考手冊(cè)

    ?PYTHON
    發(fā)表于 02-07 14:04 ?0次下載

    Python Connector for InterBase連接解決方案

    適用于 InterBase 的 Python 連接器 Python Connector for InterBase 是一可靠的連接解決方案,用于從 Python 應(yīng)用程序訪問(wèn) Int
    的頭像 發(fā)表于 01-22 14:34 ?697次閱讀

    使用Python實(shí)現(xiàn)xgboost教程

    使用Python實(shí)現(xiàn)XGBoost模型通常涉及以下幾個(gè)步驟:數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練、模型評(píng)估和模型預(yù)測(cè)。以下是一個(gè)詳細(xì)的教程,指導(dǎo)你如何在Python中使用XGBoost。 1. 安裝XGBoost
    的頭像 發(fā)表于 01-19 11:21 ?2188次閱讀

    AWTK-WEB 快速入門(mén)(3) - C 語(yǔ)言 Http 應(yīng)用程序

    導(dǎo)讀XMLHttpRequest改變了Web應(yīng)用與服務(wù)器交換數(shù)據(jù)的方式,fetch是XMLHttpRequest繼任者,具有更簡(jiǎn)潔語(yǔ)法。本文
    的頭像 發(fā)表于 01-15 11:38 ?632次閱讀
    AWTK-WEB 快速入門(mén)(3) - C 語(yǔ)言 Http 應(yīng)用程序

    Flexus 云服務(wù)器 X:Python 安裝的極致便捷之旅

    前言 ????????Python 作為一高級(jí)編程語(yǔ)言,因其簡(jiǎn)潔易讀的語(yǔ)法和強(qiáng)大的庫(kù)支持,在數(shù)據(jù)科學(xué)、人工智能、Web 開(kāi)發(fā)等領(lǐng)域得到了廣泛應(yīng)用。然而,不同平臺(tái)上的安裝過(guò)程可能會(huì)有所
    的頭像 發(fā)表于 01-07 17:00 ?535次閱讀
    Flexus 云服務(wù)器 X:<b class='flag-5'>Python</b> 安裝的極致便捷之旅

    Triton編譯器支持的編程語(yǔ)言

    編寫(xiě)和優(yōu)化深度學(xué)習(xí)代碼。Python是一廣泛使用的高級(jí)編程語(yǔ)言,具有簡(jiǎn)潔易讀、易于上手、庫(kù)豐富等特點(diǎn),非常適合用于深度學(xué)習(xí)應(yīng)用的開(kāi)發(fā)。 二、領(lǐng)域特定語(yǔ)言(DSL) Triton也提供
    的頭像 發(fā)表于 12-24 17:33 ?1430次閱讀