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