精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python編程:遞歸與匿名函數及函數屬性與文檔字符串(函數補充)

開發 前端
本文主要基于Python語言的一大特色——函數來拓展的一些相關編程知識,包括遞歸函數(重點是有限性和邊界性)、lambda函數(簡潔性和臨時性)以及函數的屬性以及如何實現函數的文檔化描述等。

本文簡單扼要地說,輔以代碼進一步地加深理解。

 遞歸函數

當函數調用自身而生成最終結果時,這樣的函數稱為遞歸。有時遞歸函數非常有用,因為它們使編寫代碼變得更容易——使用遞歸范式編寫一些算法非常容易,而其他算法則不是這樣。沒有不能以迭代方式重寫的遞歸函數,換句話說,所有遞歸函數都可以通過循環迭代的方式實現,因此通常由程序員根據手頭的情況選擇最佳方法。

遞歸函數主體通常有兩個部分:一部分的返回值依賴于對自身的后續調用,另一部分的返回值不依賴于對自身的后續調用(稱基本情況,或遞歸邊界)。

作為理解的參考示例,我們看一個階乘函數N!作為遞歸的兩部分分別是:基本情況(邊界,用來結束遞歸)是當N為0或1時,函數返回1,不需要進一步計算。另一方面,在一般情況下的自我調用,即N!返回的生成結果:

1 * 2 * ... * (N-1) * N

如果你仔細想想,N!可以寫成這樣:N!= (N - 1) !*N。作為一個實際的例子,請看如下的階乘表示:

5! = 1 * 2 * 3 * 4 * 5 = (1 * 2 * 3 * 4) * 5 = 4! * 5

我們來轉化成函數實現:

# 階乘遞歸函數實現
def factorial(n):
if n in (0, 1): # 遞歸邊界
return 1
return factorial(n - 1) * n # 遞歸調用

高手大俠們在編寫算法時經常使用遞歸函數,編寫遞歸函數非常有趣。作為練習,嘗試使用遞歸和迭代方法解決幾個簡單的問題。很好的練習對象可能是計算斐波那契數列,或其它諸如此類的東西。自己動手去試試吧。

提示:

在編寫遞歸函數時,總是考慮要進行多少個嵌套調用,因為這是有限制的。有關這方面的更多信息,請查看sys.getrecursionlimit()和sys.setrecursionlimit()。

 匿名函數

還有一種函數是匿名函數(Anonymous functions)。這些函數在Python中稱為lambda(蘭姆達),其通常在使用具有自己完整定義名稱的函數有些多余時而使用,此時所需要的只是一個快速、簡單的一行程序來完成這項工作。

假設我們想要一個列表,所有N的某個值,是5的倍數的數字。為此,我們可以使用filter()函數,它需要一個函數和一個可迭代對象作為輸入。返回值是一個過濾器對象,當你遍歷它時,會從輸入可迭代對象中生成元素,所需的參數函數會為其返回True。如果不使用匿名函數,我們可能會這樣做:

def isMultipleOfFive(n):
return not n % 5

def getMultiplesOfFive(n):
return list(filter(isMultipleOfFive, range(n)))

注意我們如何使用isMultipleOfFive()來過濾前n個自然數。這似乎有點過分——任務及其很簡單,我們不需要為其他任何事情保留isMultipleOfFive()函數。此時,我們就可用lambda函數來重寫它:

# lambda過濾
def getMultiplesOfFive(n):
return list(filter(lambda k: not k % 5, range(n)))

邏輯是完全相同的,但是過濾函數現在是個lambda函數,顯然,Lambda更簡單。

定義Lambda函數非常簡單,它遵循以下形式:

funcName = lambda [parameter_list]: expression

其返回的是一個函數對象,相當于:

def func_ name([parameter_list]):return expression

參數列表以逗號分隔。

注意,可選參數是方括號括起來的部分,是通用語法的表示形式,即文中的方括號部分是可選的,根據實際需要提供,

我們再來看另外兩個等價函數的例子,以兩種形式定義:

# lambda說明
# 示例 1: 兩數相加
def adder(a, b):
return a + b
# 等價于:
adder_lambda = lambda a, b: a + b

# 示例 2: 字符串轉大寫
def to_upper(s):
return s.upper()
# 等價于:
to_upper_lambda = lambda s: s.upper()

前面的例子非常簡單。第一個函數將兩個數字相加,第二個函數生成字符串的大寫版本。注意,我們將lambda表達式返回的內容賦值給一個名稱(adder_lambda, to_upper_lambda),但是當按照filter()示例中的方式使用lambda時,就不需要這樣做了——不需要把匿名函數賦給變量。

函數屬性

Python中每個函數都是一個完整的對。因此,它有許多屬性。其中一些是特殊的,可以以內省的方式在運行時檢查函數對象。下面的示例,展示了它們的一部分以及如何為示例函數顯示它們的值:

# 函數屬性
def multiplication(a, b=1):
"""返回a乘以b的結構. """
return a * b

if __name__ == "__main__":
special_attributes = [
"__doc__", "__name__", "__qualname__", "__module__",
"__defaults__", "__code__", "__globals__", "__dict__",
"__closure__", "__annotations__", "__kwdefaults__",
]
for attribute in special_attributes:
print(attribute, '->', getattr(multiplication, attribute))

我們使用內置的getattr()函數來獲取這些屬性的值。getattr(obj, attribute)等價于obj.attribute,當我們需要在運行時動態地獲取屬性時,就從變量中獲取屬性的名稱(如本例中所示),此時它就會派上用場。

運行這個腳本會得到類似如下輸出:

__doc__ -> 返回a乘以b的結果.

__name__ -> multiplication

__qualname__ -> multiplication

__module__ -> __main__

__defaults__ -> (1,)

__code__ -> <……>

__globals__ -> {…略…}

__dict__ -> {}

__closure__ -> None

__annotations__ -> {}

__kwdefaults__ -> None

這里省略了__globals__屬性的值,內容太多。這個屬性的含義可以在Python數據模型文檔頁面(或自帶幫助文檔中)的可調用類型部分找到:

??https://docs.python.org/3/reference/datamodel.html#the-standard-typehierarchy??

再次提醒:如果你想查看對象的所有屬性,只需調用dir(object_name),將得到其所有屬性的列表。

 內置函數

Python自帶很多內置函數。它們可以在任何地方使用,你可以通過dir(__builtins__)來查看builtins模塊,或通過訪問官方Python文檔來獲得它們的列表。這里就不一一介紹了。在前面的學習過程中,我們已經見過其中的一些,如any、bin、bool、divmod、filter、float、getattr、id、int、len、list、min、print、set、tuple、type和zip等,但還有更多,建議你至少應該閱讀一次。熟悉它們,嘗試它們,為它們每個編寫一小段代碼,并確保您隨時可以使用它們,以便在需要時使用它們。

可在官方文檔中找到這個內置函數列表:https://docs.python.org/3/library/functions.html 。

 文檔化代碼

我們非常喜歡不需要文檔的代碼。當我們正確地編程、選擇正確的名稱、并注意細節時,代碼應該是不言自明的,幾乎不需要文檔。不過,有時注釋非常有用,添加一些文檔化描述也是如此。你可以在Python的PEP 257規范——文檔字符串約定中找到Python的文檔指南:

??https://www.python.org/dev/peps/pep-0257/,??

但在這里還是會向你展示基本原理。Python的文檔中包含字符串,這些字符串被恰當地稱為文檔字符串(docstrings)。任何對象都可以被文檔化來加以描述記錄,可以使用單行或多行文檔字符串。單行程序非常簡單。不是為函數提供另外的簽名,而應該聲明或描述函數的目的。請看下面的示例:

# 簡單的文檔化代碼
def square(n):
"""功能:返回數字n的平方。 """
return n ** 2

def get_username(userid):
"""功能:返回給定id的用戶名稱。 """
return db.get(user_id=userid).username

使用三重雙引號字符串可以在以后輕松展開或擴展文檔內容。

使用以句號結尾的句子,不要在前后留下空行。

多行注釋的結構與此類似。應該用一行代碼簡單地說明對象的主旨,然后是更詳細的描述。

作為多行文檔化的一個例子,我們在下面的例子中使用Sphinx表示法記錄了一個虛構的connect()函數及文檔化描述:

# 多行文檔化代碼
def connect(host, port, user, password):
"""功能:連接數據庫并返回連接對象.
使用如下參數直接連接 PostgreSQL數據庫.
:param host: 主機 IP.
:param port: 端口.
:param user: 連接用戶名.
:param password: 連接密碼.
:return: 連接對象.
"""
# 函數主體...
return connection

提示:

Sphinx是用于創建Python文檔的最廣泛使用的工具之一——事實上,官方Python文檔就是用它編寫的。絕對值得花點時間去看看。

內置函數help()用于即時交互使用的,它就使用對象的文檔字符串為對象創建文檔頁面來展示對象的用法?;居梅ㄈ缦拢?/p>

def square(n):
"""功能:返回數字n的平方。 """
return n ** 2

help(square)
Help on function square in module __main__:

square(n)
功能:返回數字n的平方。

首先明確或定義一個對象或函數(包括已有的對象或函數),然后使用內置help函數,并把對象或函數做help的參數,該函數就會返回相應對象的說明文檔了。就這么簡單。

本文小結

本文主要基于Python語言的一大特色——函數來拓展的一些相關編程知識,包括遞歸函數(重點是有限性和邊界性)、lambda函數(簡潔性和臨時性)以及函數的屬性以及如何實現函數的文檔化描述等。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-07-07 09:03:36

Python返回函數匿名函數

2020-05-20 10:35:53

Python開發函數

2010-10-09 11:54:46

MySQL字符串

2014-01-02 16:14:10

PostgreSQL字符串

2017-06-08 14:25:46

Kotlin函數

2014-04-16 10:54:45

Javascript遞歸調用

2021-08-20 06:58:31

C++Python函數

2010-05-31 14:05:51

2023-05-06 07:27:47

2010-03-16 10:43:26

Python字符串

2023-12-04 07:09:53

函數遞歸python

2009-11-24 09:55:44

PHP字符串函數

2010-11-26 10:14:40

MySQL repla

2009-08-06 16:01:09

C#字符串函數大全

2010-07-14 16:35:52

Perl字符串處理函數

2010-11-08 17:07:41

SQL Server字

2015-04-08 10:27:43

JavaScript字符串操作函數

2023-10-07 00:01:02

Java函數

2025-06-11 08:00:00

LambdaPython函數

2010-01-05 16:12:55

Javascript匿
點贊
收藏

51CTO技術棧公眾號

精品综合久久久久久8888| 成人直播视频| 国产精品一区二区三区网站| 欧美夫妻性视频| xxxx黄色片| 久久婷婷五月综合色丁香| 亚洲精品亚洲人成人网在线播放| 国产欧美一区二区三区不卡高清| 99精品在线播放| 91久久久精品国产| 亚洲高清久久网| 亚洲无吗一区二区三区| 美女精品导航| 国产精品麻豆久久久| 不卡一区二区三区四区五区| 国产寡妇亲子伦一区二区三区四区| 99re6这里只有精品| 亚洲国产第一页| 不卡的av中文字幕| 26uuu成人| 国产乡下妇女做爰毛片| 日韩欧美网站| 日韩av在线最新| 亚洲一区二区偷拍| 欧美日韩美女| 亚洲成a人片在线不卡一二三区| 日本一区二区在线视频| 女人18毛片一区二区三区| 蜜臀av一区二区在线免费观看 | 麻豆av在线免费看| 91在线小视频| 99理论电影网| 91九色蝌蚪91por成人| 先锋亚洲精品| 欧美精品激情视频| 免费在线观看黄色小视频| 国产欧美日韩影院| 日韩高清免费观看| 亚洲天堂美女视频| 国产在线一区不卡| 欧美揉bbbbb揉bbbbb| 欧美电影精品一区二区| 91网免费观看| 96日本xxxxxⅹxxx17| 久久婷婷久久| 国产成人一区二区三区| 日韩黄色一级大片| 亚洲第一黄网| 久久久久久伊人| 久久免费看少妇高潮v片特黄 | 日韩欧国产精品一区综合无码| 五月婷婷综合网| 日韩精品一区二区免费| av观看在线| 综合久久给合久久狠狠狠97色| 亚洲福利av在线| 草碰在线视频| 国产精品久久毛片av大全日韩| 日本精品一区二区三区视频| 经典三级在线| 国产色91在线| 亚洲精品国产精品国自产| 国产福利在线视频| 中文av一区特黄| 亚洲永久激情精品| 亚洲不卡一卡2卡三卡4卡5卡精品| 国产精品theporn动漫| 亚洲视频综合| 8050国产精品久久久久久| 99热只有这里有精品| 国产精品社区| 国产精品高清在线观看| 伊人精品在线视频| 激情综合五月婷婷| 99re在线视频上| 亚洲欧美另类视频| 26uuu另类欧美亚洲曰本| 蜜桃传媒视频第一区入口在线看| 全色精品综合影院| 国产欧美精品一区aⅴ影院| 五月天色一区| 直接在线观看的三级网址| 亚洲一区二区在线观看视频| 国产二级片在线观看| 性高爱久久久久久久久| 欧美喷水一区二区| 在线精品视频播放| 精品72久久久久中文字幕| 怡红院精品视频| 日日骚一区二区三区| 亚洲美女色禁图| 国产精品福利在线| 成 人 免费 黄 色| 久久蜜桃一区二区| 欧美aaa在线观看| 九色porny视频在线观看| 欧美写真视频网站| 国产老头和老头xxxx×| 天堂资源在线亚洲| 久久精品亚洲国产| 日韩免费黄色片| 精品在线播放免费| 久久本道综合色狠狠五月| 日韩三级影院| 黄色一区二区在线| 亚洲成人手机在线观看| 免费人成在线观看播放视频| 欧美激情偷拍自拍| 久久久影视精品| 久久久久久久久久一级| 国产成人av一区二区三区在线 | 国产高清视频免费最新在线| 亚洲综合久久av| 色综合天天色综合| 国产毛片久久久| 日韩在线国产精品| 日韩精品在线观看免费| 国产精品一卡二卡在线观看| 日本欧美色综合网站免费| 国产嫩草在线视频| 在线电影院国产精品| 一区二区精品免费| 亚洲精品麻豆| 亚洲综合社区网| 全黄性性激高免费视频| 国产三线在线| 3atv一区二区三区| 熟女少妇内射日韩亚洲| 亚洲美女色禁图| 999日本视频| 美女羞羞视频在线观看| 日本精品一区二区三区高清 | 真实原创一区二区影院| 色综合久久中文字幕综合网小说| 真实新婚偷拍xxxxx| 93久久精品日日躁夜夜躁欧美| 欧美一区二区激情| 四虎国产精品免费久久| 色婷婷成人综合| 无码人妻丰满熟妇区五十路 | 毛片基地黄久久久久久天堂| 精品欧美一区二区久久久伦 | 国产精品av网站| 神马电影在线观看| 精品美女国产在线| 亚洲精品第二页| 在线播放亚洲| 国产亚洲精品自在久久| 激情网站在线| 精品国偷自产国产一区| 国产亚洲精品久久久久久打不开 | 一区精品久久| 国产精品久久久久久久天堂第1集| 三级资源在线| 亚洲高清久久网| 久久久久久91亚洲精品中文字幕| 99国产麻豆精品| 国产a级一级片| 在线视频亚洲专区| 国产精品色午夜在线观看| 在线看免费av| 欧美一级艳片视频免费观看| 久久久精品国产sm调教网站| 99久久精品免费| 国产精品亚洲a| 日本一区二区免费高清| 国产日韩精品入口| 日本在线播放| 精品欧美黑人一区二区三区| 精品91久久久| 国产日产欧美一区二区三区| 五月花丁香婷婷| 国产一区欧美| 久久综合九色综合网站| 桃子视频成人app| 精品国产欧美一区二区五十路| 91超薄丝袜肉丝一区二区| 一区二区三区四区av| 中文字幕乱码一区| 日本免费新一区视频| 免费观看中文字幕| 北条麻妃在线一区二区免费播放 | 91精彩刺激对白露脸偷拍| 亚洲午夜精品久久久久久app| 日韩一级大片在线观看| 宅男一区二区三区| 激情不卡一区二区三区视频在线 | 国产中文在线播放| 亚洲开心激情网| 这里只有精品999| 亚洲精品中文字幕乱码三区| 久久无码人妻精品一区二区三区| 国产综合亚洲精品一区二| 精品麻豆av| 欧美一区二区三区婷婷| 欧美精品在线网站| 无码国产伦一区二区三区视频 | 成人精品国产| 欧美片一区二区三区| 天天综合永久入口| 欧美性大战xxxxx久久久| 欧美日韩人妻精品一区二区三区| 国v精品久久久网| 亚洲综合欧美激情| 国产综合网站| 五月婷婷综合色| 综合视频一区| 国产主播在线一区| 波多野结衣精品| 中文字幕国内精品| 亚洲第九十九页| 欧美日韩午夜在线视频| 国产精品2020| 国产精品成人午夜| 日本护士做爰视频| 国产福利视频一区二区三区| 欧美 丝袜 自拍 制服 另类| 国产精品麻豆久久| 久久国产手机看片| gogo人体一区| 成人国产精品色哟哟| 僵尸再翻生在线观看免费国语| 最近2019年手机中文字幕| 天堂资源最新在线| 日韩一区二区视频| 中文字幕av资源| 亚洲成国产人片在线观看| 成人在线观看高清| 久久精品一级爱片| 成人在线视频免费播放| 国产一区二区三区免费在线观看| 中国丰满人妻videoshd| 国产精品一区二区人妻喷水| 免费欧美日韩| 日韩 欧美 视频| 三上亚洲一区二区| 久久亚洲综合网| 福利电影一区| 成人午夜在线观看| 亚洲成人精品综合在线| 日韩免费在线观看视频| sm久久捆绑调教精品一区| 欧美xxxx做受欧美.88| 韩国av网站在线| 色一情一乱一区二区| 黄色av网址在线免费观看| 日韩av网址在线| 欧美婷婷久久五月精品三区| 亚洲国产精品久久久久| www.热久久| 91精品国产综合久久国产大片| 国产精品伦一区二区三区| 欧美性大战久久| 伊人色综合久久久| 欧美性xxxxx极品少妇| 亚洲一区二区三区高清视频| 亚洲综合一二区| 九九热国产在线| 中文字幕一区二区视频| 中文字幕美女视频| 椎名由奈av一区二区三区| 国产jizz18女人高潮| 久久这里都是精品| 亚洲一区二区观看| 久久亚洲一区二区三区明星换脸| 91精品人妻一区二区三区| 99re热视频这里只精品| 精品人妻一区二区三区香蕉| 99riav久久精品riav| www亚洲色图| 国产精品欧美久久久久无广告| 中文天堂资源在线| 亚洲精品欧美激情| 欧美三级小视频| 亚洲国产精品欧美一二99| 可以免费看的av毛片| 日韩欧美亚洲成人| 黄色av一区二区| 欧美日韩精品是欧美日韩精品| 国产福利第一视频| 亚洲第一色中文字幕| 婷婷五月综合激情| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 人人精品亚洲| 精品日韩美女| 欧美丝袜丝交足nylons172| 欧美一级黄色录像片| 欧美日韩精品免费观看视频完整| 亚洲精品无码国产| 国产精品综合色区在线观看| 污网站在线免费| 国产999精品久久| 午夜一区二区三区免费| 国产校园另类小说区| 乱老熟女一区二区三区| 一区二区三区四区不卡在线 | 国产精品扒开做爽爽爽的视频| 欧美成人高清视频| 欧美xxxxxx| 91在线视频成人| 欧美精品密入口播放| 精品视频在线观看| 久久久久国产| ww国产内射精品后入国产| 美女视频网站黄色亚洲| 一级欧美一级日韩片| 国产精品麻豆视频| 久热精品在线观看| 欧美午夜精品一区二区蜜桃| 亚洲黄色在线免费观看| 日韩中文字幕第一页| 岛国毛片av在线| 国产精品一区二区3区| 亚洲精品合集| 97超碰在线视| 秋霞电影网一区二区| 午夜性福利视频| 亚洲国产精品高清| 自拍偷拍欧美亚洲| 欧美视频在线观看一区二区| 天堂av资源在线| 久久精品中文字幕免费mv| 少妇视频在线观看| 国产精品手机在线| 99久久婷婷国产综合精品电影√| 黄色大片在线免费看| 国产精品亚洲成人| 一二三四在线观看视频| 五月天久久比比资源色| 91肉色超薄丝袜脚交一区二区| 国产亚洲精品久久久久久777| 超级白嫩亚洲国产第一| 99久久无色码| 午夜视频精品| 精品综合久久久久| 国产欧美一区二区精品性色 | 精品一区二区三区在线观看视频| 欧美日韩国产va另类| 91亚洲视频| 天天好比中文综合网| 亚洲网站啪啪| 黑人无套内谢中国美女| 国产精品久久久久久久久图文区| 狠狠人妻久久久久久综合| 亚洲激情国产精品| 久久香蕉av| 激情一区二区三区| 亚洲黄色高清| 香蕉视频免费网站| 亚洲国产sm捆绑调教视频| 国产视频手机在线| 久久精品国产69国产精品亚洲| 亚洲成人1区| 艳母动漫在线免费观看| 久久机这里只有精品| 少妇人妻丰满做爰xxx| 在线播放91灌醉迷j高跟美女| av资源网在线观看| 91网站免费看| 中文字幕免费精品| 在线a免费观看| 亚洲国产中文字幕在线视频综合| 亚洲风情第一页| 欧美黄网免费在线观看| 欧美三级自拍| 免费在线观看亚洲视频| 97精品久久久久中文字幕 | 天天躁日日躁狠狠躁av麻豆男男| 亚洲免费观看高清完整 | 精品少妇一区二区三区在线播放| 国产成人午夜| αv一区二区三区| 国产精品一二| 中文字幕成人动漫| 欧美日韩精品三区| 爱情岛亚洲播放路线| 精品国产综合| 日韩精品一卡二卡三卡四卡无卡| 乱老熟女一区二区三区| 日韩三级视频中文字幕| 国内外激情在线| 精品国产一区二区三区四区精华| 欧美亚洲免费| 90岁老太婆乱淫| 91精品啪在线观看国产60岁| 在线heyzo| 欧美国产综合视频| 麻豆精品国产91久久久久久| 国产黄在线免费观看| 亚洲欧美精品一区| 欧美一级做a| 国产九色porny| 国产精品免费看片| 亚洲不卡免费视频| 日韩**中文字幕毛片| 欧美福利专区| 一色道久久88加勒比一| 欧美人狂配大交3d怪物一区| 日本免费一区二区六区| 亚洲一区二区三区精品动漫|