在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡潔編寫Python 語法的7種技巧分享

454398 ? 來源:IT技術頭條 ? 作者:IT技術頭條 ? 2020-12-20 11:03 ? 次閱讀

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

1、使用 lambda 表達式重寫多行函數

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

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'

雖然看起來很奇怪,但是上面的函數可以使用下面的 lambda 表達式函數代替:
(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'

永遠不要在生產環境寫這樣的代碼 :)

2、三元運算符

現代的 python 提供了更簡便的語法:
b if a else c

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

順便說一下,下面的變體是錯誤的:
a and b or c

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

3、通過列表推導式移除重復的元素

讓我們來把字符串 x = 'tteesstt' 轉換成 'test' 吧。

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

2.把前一個字符保存到臨時變量中:
''.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.在新字符串中和上一個字符比較:
[(not r.endswith(i) and [r for r in [r+i]], r)[-1] for r in [''] for i in x][-1]

4.通過 reduce 函數和 lambda 表達式:
reduce(lambda a, b: a if a.endswith(b) else a + b, x)

4、通過列表推導式獲得斐波拉契數列

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.通過 reduce 函數和 lambda 表達式:
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、使用列表推導式產生死循環
[a.append(b) for a in [[None]] for b in a]

列表切片技巧

1.復制列表:
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.在列表的開頭添加元素:

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.反轉列表:
l = [1, 2, 3]

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

6、替換方法字節碼

Python 阻止替換類實例中的方法,因為 python 給類實例中的方法賦予了只讀屬性:
class A(object):

def x(self):

print "hello"

a = A()

def y(self):

print "world"

a.x.im_func = y

-> TypeError: readonly attribute

但是可以在字節碼的層面上進行替換:
a.x.im_func.func_code = y.func_code

a.x()

-> 'world'

注意! 這不僅對當前的實例有影響,而且對整個類都有影響(準確的說是與這個類綁定的函數)(譯者注:此處應該是筆誤,推測作者原意是:準確的說是與這個函數綁定的所有類),并且所有其他的實例也會受到影響:
new_a = A()

new_a.x()

-> 'world'

7、讓可變元素作為函數參數默認值

把可變對象作為函數參數的默認值是非常危險的一件事,并且在面試中有大量關于這方面棘手的面試問題。但這一點對于緩存機制非常有幫助。

1.階乘函數:

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.斐波拉契數列:
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]

個人覺得,在所有的高級計算機語言中,Python 是最接近人類自然語言的。Python 的語法、風格都與英文的書寫習慣非常接近,Python 的這種風格被稱為 Pythonic,如條件表達式,在 JavaC++ 中是這樣的:
int min = x

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

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

編輯:hfy


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4801

    瀏覽量

    84867
收藏 人收藏

    評論

    相關推薦

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

    前言 ????????Python 作為一高級編程語言,因其簡潔易讀的語法和強大的庫支持,在數據科學、人工智能、Web 開發等領域得到了廣泛應用。然而,不同平臺上的安裝過程可能會有所
    的頭像 發表于 01-07 17:00 ?90次閱讀
    Flexus 云服務器 X:<b class='flag-5'>Python</b> 安裝的極致便捷之旅

    Triton編譯器支持的編程語言

    編寫和優化深度學習代碼。Python是一廣泛使用的高級編程語言,具有簡潔易讀、易于上手、庫豐富等特點,非常適合用于深度學習應用的開發。 二、領域特定語言(DSL) Triton也提供
    的頭像 發表于 12-24 17:33 ?393次閱讀

    對比Python與Java編程語言

    Python與Java都是目前非常流行的編程語言,它們各有其獨特的優勢和適用場景。以下是對這兩編程語言的對比: 一、語法和易用性 Python
    的頭像 發表于 11-15 09:31 ?382次閱讀

    Lua語法基礎教程(上篇)

    今天我們來學習Lua語法基礎教程。由于篇幅過長,將分為上中下三篇進行講解,本篇為上篇。 一、初識Lua Lua 是一輕量小巧的腳本語言,它用標準C語言編寫并以源代碼形式開放。這意味著什么呢?這
    的頭像 發表于 10-24 07:17 ?254次閱讀

    使用Python批量連接華為網絡設備

    隨著網絡規模的擴大和設備數量的增加,手動配置和管理每臺網絡設備變得越來越不現實。因此,自動化工具和腳本變得尤為重要。Python語言以其簡潔性和強大的第三方庫支持,成為了網絡自動化領域的首選。本篇文章將詳細介紹如何使用Python
    的頭像 發表于 08-12 17:48 ?510次閱讀

    pytorch和python的關系是什么

    ,PyTorch已經成為了一個非常受歡迎的框架。本文將介紹PyTorch和Python之間的關系,以及它們在深度學習領域的應用。 Python簡介 Python是一高級、解釋型、通用
    的頭像 發表于 08-01 15:27 ?2134次閱讀

    Python建模算法與應用

    Python作為一功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔語法、對動態輸入的支持以及解釋性語言的本質,使得
    的頭像 發表于 07-24 10:41 ?606次閱讀

    Python中的人工智能框架與實例

    在人工智能(AI)領域,Python因其簡潔語法、豐富的庫和強大的社區支持,成為了最受歡迎的編程語言之一。本文將詳細介紹Python中的人工智能框架,并通過具體實例展示如何使用這些框
    的頭像 發表于 07-15 14:54 ?1772次閱讀

    深度學習常用的Python

    深度學習作為人工智能的一個重要分支,通過模擬人類大腦中的神經網絡來解決復雜問題。Python作為一流行的編程語言,憑借其簡潔語法和豐富的庫支持,成為了深度學習研究和應用的首選工具。
    的頭像 發表于 07-03 16:04 ?678次閱讀

    Python在人工智能領域的應用

    在當今這個科技日新月異的時代,人工智能(AI)已經滲透到我們生活的方方面面,從智能家居到自動駕駛,從智能醫療到金融風控,無一不體現著AI的力量。而在這一場技術革命中,Python作為一簡潔、高效且
    的頭像 發表于 07-02 18:20 ?1210次閱讀

    FPGA學習筆記---基本語法

    Verilog語法是指硬件能夠實現的語法。它的子集很小。常用的RTL語法結構如下: 1、模塊聲明:module ... end module 2、端口聲明:input, output, inout
    發表于 06-23 14:58

    華為云開發者桌面全新發布 CodeArts IDE for Python,極致優雅云原生開發體驗

    Python 編碼體驗。 Python 是一編程語言,廣泛用于 Web 應用程序、軟件開發、數據科學和機器學習 (ML)。Python 以其優雅的
    的頭像 發表于 05-10 00:27 ?1263次閱讀
    華為云開發者桌面全新發布 CodeArts IDE for <b class='flag-5'>Python</b>,極致優雅云原生開發體驗

    Python自動化測試框架及其應用

    Pytest是一個非常成熟的全功能的Python測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,功能更強大。
    的頭像 發表于 04-03 16:15 ?577次閱讀
    <b class='flag-5'>Python</b>自動化測試框架及其應用

    編程語言之間的區別和聯系

    、背景和發展 PythonPython由Guido van Rossum于上世紀90年代初開發,以其簡潔、易讀的語法和豐富的第三方庫而受到廣泛歡迎。它是一
    的頭像 發表于 02-05 14:16 ?1659次閱讀

    c語言,c++,java,python區別

    C語言、C++、Java和Python是四常見的編程語言,各有優點和特點。 C語言: C語言是一面向過程的編程語言。它具有底層的特性,能夠對計算機硬件進行直接操作。C語言簡潔、高效
    的頭像 發表于 02-05 14:11 ?2508次閱讀
    主站蜘蛛池模板: 在线天堂中文有限公司| 国产精品漂亮美女在线观看| 久久精品国产精品亚洲精品| 亚洲欧美在线一区| 欧美性xxxxxbbbbbb精品| 欧美福利专区| 久久久久国产精品免费免费| 久久久这里有精品999| 国产福利2021最新在线观看| 性欧美丰满xxxx性久久久| 欧美成人性色生活片天天看| 久久v| 视频免费播放| 69日本xxxxxxxxx29| 国产精品爱久久久久久久三级| 影音先锋ady69色资源网站| 四虎最新永久免费网址| 欧美成人久久| 甘婷婷一级毛片免费看| 天天色天天色天天色| 国产精品福利午夜h视频| 91av成人| 亚洲国产成人久久一区www | 一级一片一a一片| 日本噜噜影院| 欧美性黑人十极品hd| 男男gay污小黄文| 四虎影院在线观看免费| 另类性欧美喷潮videofree| wwxxx日本| 久久精品午夜| 视频免费1区二区三区| 五月婷婷激情视频| 美女网站黄在线看| 伊人网综合在线观看| 国产小视频在线免费| 特黄aa级毛片免费视频播放| 天堂a| 国产精品毛片一区二区三区| 人人干人人上| 欧美午夜剧场|