?
???♂? 個人主頁:@艾派森的個人主頁
???作者簡介:Python學(xué)習(xí)者
?? 希望大家多多支持,我們一起進步!??
如果文章對你有幫助的話,
歡迎評論 ??點贊???? 收藏 ??加關(guān)注+
Python3 函數(shù)
函數(shù)是組織好的,可重復(fù)使用的,用來實現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。 ?
函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。前面我們用過了很多python內(nèi)置函數(shù),比如print(),input()等。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。 ?
Python函數(shù)的分類
Python函數(shù)分為如下幾類:
1. 內(nèi)置函數(shù)
我們前面使用的 str() 、 list() 、 len() 等這些都是內(nèi)置函數(shù),可以拿來直接使用
2. 標(biāo)準(zhǔn)庫函數(shù)
我們可以通過 import 語句導(dǎo)入庫,然后使用其中定義的函數(shù)
3. 第三方庫函數(shù)
Python社區(qū)也提供了很多高質(zhì)量的庫,下載安裝這些庫后,也是通過 import 語句導(dǎo)入,然后可以使用這些第三方庫的函數(shù)
4. 用戶自定義函數(shù)
用戶自己定義的函數(shù),顯然也是開發(fā)中適應(yīng)用戶自身需求定義的函數(shù)。
定義一個函數(shù)
你可以定義一個由自己想要功能的函數(shù),以下是簡單的規(guī)則: ?
- - 函數(shù)代碼塊以 def 關(guān)鍵詞開頭,后接函數(shù)標(biāo)識符名稱和圓括號 ()。
- - 任何傳入?yún)?shù)和自變量必須放在圓括號中間,圓括號之間可以用于定義參數(shù)。
- - 函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。
- - 函數(shù)內(nèi)容以冒號 : 起始,并且縮進。
- - return [表達式] 結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方,不帶表達式的 return 相當(dāng)于返回 None。
"""
Python 定義函數(shù)使用 def 關(guān)鍵字,一般格式如下:
def 函數(shù)名 ([參數(shù)列表]) :
'''文檔字符串'''
函數(shù)體/若干語句
"""
def say_hello():
print('Hello world!')
say_hello()
# 帶參數(shù)的函數(shù)
def add(a,b,c):
'''完成三個數(shù)的加法,并返回他們的和'''
sum = a+b+c
print(f"{a}、、{c}三個數(shù)的和是:{sum}")
return sum
result = add(10,20,30)
print(result)
?
參數(shù)
以下是調(diào)用函數(shù)時可使用的正式參數(shù)類型: ?
- - 位置參數(shù)
- - 關(guān)鍵字參數(shù)
- - 默認參數(shù)
'''
位置參數(shù)
位置參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時的數(shù)量必須和聲明時的一樣。
'''
def self_introduction(name,age): # name和age叫做形參
print(f'我叫{name},今年{age}歲了!')
self_introduction('艾派森',10) # '艾派森'和'10'叫做實參
'''
關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值。
使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序與聲明時不一致,因為 Python 解釋器能夠用參數(shù)名匹配參數(shù)值。
'''
def self_introduction(name,age):
print(f'我叫{name},今年{age}歲了!')
self_introduction(name='艾派森',age=18)
self_introduction(age=20,name='艾派森')
?
'''
默認參數(shù)
調(diào)用函數(shù)時,如果沒有傳遞參數(shù),則會使用默認參數(shù)。
'''
def self_introduction(name,age,school='家里蹲大學(xué)'):
print(f'我叫{name},今年{age}歲了,在{school}上學(xué)!')
self_introduction(name='艾派森',age=18)
self_introduction(name='艾派森',age=18,school='哈佛大學(xué)')
?
# 默認參數(shù)必須放在最后面,否則會報錯
def self_introduction(school='家里蹲大學(xué)',name,age,):
print(f'我叫{name},今年{age}歲了,在{school}上學(xué)!')
匿名函數(shù)??
Python 使用 lambda 來創(chuàng)建匿名函數(shù)。 ?
所謂匿名,意即不再使用 def 語句這樣標(biāo)準(zhǔn)的形式定義一個函數(shù)。 ?
- - lambda 只是一個表達式,函數(shù)體比 def 簡單很多。
- - lambda 的主體是一個表達式,而不是一個代碼塊。僅僅能在 lambda 表達式中封裝有限的邏輯進去。
- - lambda 函數(shù)擁有自己的命名空間,且不能訪問自己參數(shù)列表之外或全局命名空間里的參數(shù)。
'''
lambda 函數(shù)的語法只包含一個語句,語法如下:
lambda [arg1 [,arg2,.....argn]]:expression
'''
f = lambda x:x*x
print(f(5))
# 匿名函數(shù)傳入多個參數(shù),也可以使用關(guān)鍵詞傳參
f = lambda x1,x2:x1+x2
print(f(10,20))
print(f(x1=10,x2=20))
?
eval()函數(shù)
功能:將字符串 str 當(dāng)成有效的表達式來求值并返回計算結(jié)果。 ?
注:eval函數(shù) 會將字符串當(dāng)做語句來執(zhí)行,因此會被注入安全隱患。 ?
比如:字符串中含有刪除文件的語句,那就麻煩大了。因此,使用時候,要慎重?。。?/strong>
?
變量的作用域(全局變量和局部變量)?
變量起作用的范圍稱為變量的作用域,不同作用域內(nèi)同名變量之間互不影響。
變量分為:全局變量、局部變量。 ?
全局變量:
1. 在函數(shù)和類定義之外聲明的變量。作用域為定義的模塊,從定義位置開始直到模塊結(jié)束。
2. 全局變量降低了函數(shù)的通用性和可讀性。應(yīng)盡量避免全局變量的使用。
3. 要在函數(shù)內(nèi)改變?nèi)肿兞康闹?,使?global 聲明一下
局部變量:
1. 在函數(shù)體中(包含形式參數(shù))聲明的變量。
2. 局部變量的引用比全局變量快,優(yōu)先考慮使用
3. 如果局部變量和全局變量同名,則在函數(shù)內(nèi)隱藏全局變量,只使用同名的局部變量
# 【操作】全局變量的作用域測試
n = 50 # 全局變量
def f():
global n # 如果要在函數(shù)內(nèi)改變?nèi)肿兞康闹?,增加global關(guān)鍵字聲明
print(n) # 打印全局變量n的值
n = 100
f()
print(n) # n已經(jīng)由50經(jīng)過函數(shù)f轉(zhuǎn)變?yōu)?00
# 【操作】全局變量和局部變量同名測試
a = 50
def f():
a = 10 # 同名的局部變量
print(a)
f()
print(a) # a仍然是50,沒有變化
遞歸函數(shù)
1.遞歸(recursion)是一種常見的算法思路,在很多算法中都會用到 ?
2.遞歸的基本思想就是“自己調(diào)用自己” ?
遞歸函數(shù)指的是:自己調(diào)用自己的函數(shù),在函數(shù)體內(nèi)部直接或間接的自己調(diào)用自己。 ?
每個遞歸函數(shù)必須包含兩個部分: ?
- - 終止條件:表示遞歸什么時候結(jié)束。一般用于返回值,不再調(diào)用自己。
- - 遞歸步驟:把第n步的值和第n-1步相關(guān)聯(lián)。
注:遞歸函數(shù)由于會創(chuàng)建大量的函數(shù)對象、過量的消耗內(nèi)存和運算能力。在處理大量數(shù)據(jù)時,謹慎使用。
# 計算階乘:根據(jù)用戶輸入的整數(shù)n,計算并輸出n的階乘值。
def fact(n): #計算階乘
if n == 0:
return 1
else:
return n * fact(n-1)
num = eval(input("請輸入一個正整數(shù): "))
print(fact(num))
?
'''
斐波那契數(shù)列(1、1、2、3、5、8、13、21、34、……)
兔子繁殖問題:
在700多年前,意大利著名數(shù)學(xué)家斐波那契在《算盤全集》中提到這樣一個問題:一對兔子,從出生后第3個月起每個月都生一對兔子。小兔子長到第3個月后每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,第n個月有多少對兔子?
F(1)=1
F(2)=1
F(3)=F(1)+F(2)=1+1=2
F(4)=F(2)+F(3)
…………
F(N)=F(N-2)+F(N-1)
'''
def fab(n):
if n <= 2:
return 1
else:
return fab(n-1)+fab(n-2)
n = eval(input("請輸入一個正整數(shù): "))
print(fab(n))
文末推薦
《TensorFlow全棧開發(fā)工程實踐》
內(nèi)容簡介:
????????本書共分為 8 章,主要內(nèi)容包括與人工智能相關(guān)的數(shù)學(xué)知識,Python 語言所特有的語法和技巧,Docker 模型透明無縫地發(fā)布的實現(xiàn),業(yè)界優(yōu)秀的 Git 代碼版本管理工具,模型開發(fā)環(huán)境的配置,高級人工智能開發(fā)工程師常用的 IDE 開發(fā)工具,經(jīng)典神經(jīng)網(wǎng)絡(luò)模型的剖析和分解,RPC 遠程調(diào)用的實現(xiàn),訓(xùn)練樣本的序化組織結(jié)構(gòu)TFRecord,模型的訓(xùn)練、保存和封裝發(fā)布,模型訓(xùn)練的 GPU 配置和機制策略的部署,模型從訓(xùn)練到發(fā)布的完整示例等。?
編輯推薦:
????????本書適合有計算機專業(yè)和數(shù)學(xué)專業(yè)背景的初、中級開發(fā)者閱讀,以便快速掌握和駕馭人工智能全棧技術(shù),也適合作為在職人工智能模型開發(fā)人員查詢時使用的手冊級工具用書,還適合作為中職學(xué)校、高等院校及培訓(xùn)機構(gòu)計算機人工智能和大數(shù)據(jù)等相關(guān)專業(yè)的教學(xué)用書。
文末福利
《TensorFlow全棧開發(fā)工程實踐》免費包郵送出3本!
- 抽獎方式:評論區(qū)隨機抽取3位小伙伴免費送出!
- 參與方式:關(guān)注博主、點贊、收藏、評論區(qū)評論“人生苦短,拒絕內(nèi)卷!”(切記要點贊+收藏,否則抽獎無效,每個人最多評論三次!)
- 活動截止時間:2023-07-31?20:00:00
- ?當(dāng)當(dāng)購買鏈接:《TensorFlow全棧開發(fā)工程實踐——做一個全智全能算法工程師》(王艷銘)【簡介_書評_在線閱讀】 - 當(dāng)當(dāng)圖書
?名單公布時間:2023-07-31?21:00:00??
本文章隸屬于專欄【零基礎(chǔ)學(xué)習(xí)Python數(shù)據(jù)分析】,本專欄會持續(xù)更新,永久免費,喜歡的小伙伴速速訂閱!
歡迎點贊????+ 評論 ??+收藏 ??,同時也歡迎你加入我的粉絲交流群一起學(xué)習(xí)探討!文章來源:http://www.zghlxwxcb.cn/news/detail-615671.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-615671.html
到了這里,關(guān)于【Python基礎(chǔ)】- 自定義函數(shù)和匿名函數(shù)(文末送書3本)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!