摘要:針對(duì)尾遞歸優(yōu)化的語(yǔ)言可以通過(guò)尾遞歸防止棧溢出。尾遞歸事實(shí)上和循環(huán)是等價(jià)的,沒(méi)有循環(huán)語(yǔ)句的編程語(yǔ)言只能通過(guò)尾遞歸實(shí)現(xiàn)循環(huán)。標(biāo)準(zhǔn)的解釋器沒(méi)有針對(duì)尾遞歸做優(yōu)化,任何遞歸函數(shù)都存在棧溢出的問(wèn)題。
python 頭部:
</>復(fù)制代碼
#!/usr/bin/env python
# -*- coding: utf-8 -*-
函數(shù)的參數(shù)
Python的函數(shù)具有非常靈活的參數(shù)形態(tài),既可以實(shí)現(xiàn)簡(jiǎn)單的調(diào)用,又可以傳入非常復(fù)雜的參數(shù)。
默認(rèn)參數(shù)一定要用不可變對(duì)象,如果是可變對(duì)象,運(yùn)行會(huì)有邏輯錯(cuò)誤!
要注意定義可變參數(shù)和關(guān)鍵字參數(shù)的語(yǔ)法:
*args是可變參數(shù),args接收的是一個(gè)tuple;
**kw是關(guān)鍵字參數(shù),kw接收的是一個(gè)dict。
以及調(diào)用函數(shù)時(shí)如何傳入可變參數(shù)和關(guān)鍵字參數(shù)的語(yǔ)法:
可變參數(shù)既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過(guò)args傳入:func((1, 2, 3));
關(guān)鍵字參數(shù)既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過(guò)kw傳入:func({"a": 1, "b": 2})。
使用args和*kw是Python的習(xí)慣寫法,當(dāng)然也可以用其他參數(shù)名,但最好使用習(xí)慣用法。
python默認(rèn)參數(shù)必須指向不變對(duì)象!
python通過(guò)添加*定義可變參數(shù)(list或tuple實(shí)現(xiàn))
關(guān)鍵字參數(shù)通過(guò)在dict前加**傳遞
遞歸函數(shù)使用遞歸函數(shù)的優(yōu)點(diǎn)是邏輯簡(jiǎn)單清晰,缺點(diǎn)是過(guò)深的調(diào)用會(huì)導(dǎo)致棧溢出。
針對(duì)尾遞歸優(yōu)化的語(yǔ)言可以通過(guò)尾遞歸防止棧溢出。尾遞歸事實(shí)上和循環(huán)是等價(jià)的,沒(méi)有循環(huán)語(yǔ)句的編程語(yǔ)言只能通過(guò)尾遞歸實(shí)現(xiàn)循環(huán)。
Python標(biāo)準(zhǔn)的解釋器沒(méi)有針對(duì)尾遞歸做優(yōu)化,任何遞歸函數(shù)都存在棧溢出的問(wèn)題。
列表生成式用列表生成式,可以快速生成list,可以通過(guò)一個(gè)list推導(dǎo)出另一個(gè)list,而代碼卻十分簡(jiǎn)潔。
思考:如果list中既包含字符串,又包含整數(shù),由于非字符串類型沒(méi)有l(wèi)ower()方法,所以列表生成式會(huì)報(bào)錯(cuò):
</>復(fù)制代碼
>>> L = ["Hello", "World", 18, "Apple", None]
>>> [s.lower() for s in L]
Traceback (most recent call last):
File "", line 1, in
AttributeError: "int" object has no attribute "lower"
使用內(nèi)建的isinstance函數(shù)可以判斷一個(gè)變量是不是字符串:
>>> x = "abc"
>>> y = 123
>>> isinstance(x, str)
True
>>> isinstance(y, str)
False
請(qǐng)修改列表生成式,通過(guò)添加if語(yǔ)句保證列表生成式能正確地執(zhí)行
生成器
generator是非常強(qiáng)大的工具,在Python中,可以簡(jiǎn)單地把列表生成式改成generator,也可以通過(guò)函數(shù)實(shí)現(xiàn)復(fù)雜邏輯的generator。
要理解generator的工作原理,它是在for循環(huán)的過(guò)程中不斷計(jì)算出下一個(gè)元素,并在適當(dāng)?shù)臈l件結(jié)束for循環(huán)。對(duì)于函數(shù)改成的generator來(lái)說(shuō),遇到return語(yǔ)句或者執(zhí)行到函數(shù)體最后一行語(yǔ)句,就是結(jié)束generator的指令,for循環(huán)隨之結(jié)束
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43296.html
摘要:貢獻(xiàn)者飛龍版本最近總是有人問(wèn)我,把這些資料看完一遍要用多長(zhǎng)時(shí)間,如果你一本書一本書看的話,的確要用很長(zhǎng)時(shí)間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識(shí)點(diǎn)合并,手動(dòng)整理了這個(gè)知識(shí)樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻(xiàn)者:飛龍版...
摘要:項(xiàng)目當(dāng)中用到貼一點(diǎn)筆記社區(qū)模塊方案選用在上查詢模塊入門教程尾遞歸不支持尾遞歸優(yōu)化社區(qū)有提供優(yōu)化的腳本不過(guò)實(shí)際項(xiàng)目使用有問(wèn)題刷新引用模塊同樣模仿可以在當(dāng)中測(cè)試函數(shù)那么刷新模塊像是這樣的文檔比較豐富的不過(guò)也比較龐雜實(shí)現(xiàn)起來(lái) 項(xiàng)目當(dāng)中用到 https://github.com/Cirru/sepal.py貼一點(diǎn)筆記. PyPI 社區(qū)模塊方案選用 pip, 在 PyPI 上查詢模塊, 入門教程...
摘要:學(xué)習(xí)筆記七數(shù)學(xué)形態(tài)學(xué)關(guān)注的是圖像中的形狀,它提供了一些方法用于檢測(cè)形狀和改變形狀。學(xué)習(xí)筆記十一尺度不變特征變換,簡(jiǎn)稱是圖像局部特征提取的現(xiàn)代方法基于區(qū)域圖像塊的分析。本文的目的是簡(jiǎn)明扼要地說(shuō)明的編碼機(jī)制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來(lái)看這樣一個(gè)提問(wèn): pyth...
摘要:此文是記錄我在學(xué)習(xí)的過(guò)程,主要目的是怕學(xué)了后面的了前面的,方便復(fù)習(xí)。不得不承認(rèn),老外的課程確實(shí)比國(guó)內(nèi)的課程更有趣。所以提升性能的個(gè)關(guān)鍵降低電子需要行徑的距離提高每秒發(fā)射電子的次數(shù)。 此文是記錄我在udacity.com學(xué)習(xí)python的過(guò)程,主要目的是怕學(xué)了后面的wan了前面的,方便復(fù)習(xí)。也希望能幫到和我一樣的初學(xué)者,這個(gè)課程的是Udacity的《計(jì)算機(jī)基礎(chǔ)導(dǎo)論》,https://cl...
摘要:請(qǐng)回復(fù)這個(gè)帖子并注明組織個(gè)人信息來(lái)申請(qǐng)加入。權(quán)限分配靈活,能者居之。數(shù)量超過(guò)個(gè),在所有組織中排名前。網(wǎng)站日超過(guò),排名的峰值為。導(dǎo)航歸檔社區(qū)自媒體平臺(tái)微博知乎專欄公眾號(hào)博客園簡(jiǎn)書合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
閱讀 2642·2021-11-18 10:07
閱讀 1093·2021-08-03 14:04
閱讀 734·2019-08-30 13:08
閱讀 2588·2019-08-29 15:33
閱讀 1103·2019-08-29 14:07
閱讀 3003·2019-08-29 14:04
閱讀 1449·2019-08-29 11:19
閱讀 1155·2019-08-29 10:59