python foo函数_python——函数
python——函數(shù)
函數(shù)是什么
函數(shù)一詞來源于數(shù)學(xué),但編程中的「函數(shù)」概念,與數(shù)學(xué)中的函數(shù)是有很大不同的,編程中的函數(shù)在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子過程或子程序),在Pascal中叫做procedure(過程)和function,在C中只有function,在Java里面叫做method。
在python中函數(shù)它相當(dāng)于一個獨立的代碼塊,可以被重復(fù)使用,如果需要增加一個功能或者修改一個功能,只需要,增加或者修改函數(shù)即可。
函數(shù)分類
內(nèi)置函數(shù)
python解釋器已經(jīng)為我們定義好的參數(shù),比如:len(),sum(),max()等
函數(shù)的定義
列子:定義函數(shù)使用def關(guān)鍵字,后面是函數(shù)名,函數(shù)名不能重復(fù)
def fun():#定義一個函數(shù),后面是函數(shù)名
print("Hello World")#函數(shù)體
我們看一下實列
def函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3,....):'''注釋名'''函數(shù)體return 返回的值
一旦執(zhí)行到return,整個函數(shù)就結(jié)束了。如果沒有return,會默認(rèn)返回None。return可以返回多個參數(shù),這多個參數(shù)用元組封裝。
函數(shù)的參數(shù)
1.形參和實參
函數(shù)在調(diào)用的時候,可以傳入?yún)?shù),有形參和實參,簡單點說,形參就是函數(shù)接收的參數(shù),而實參就是你實際傳入的參數(shù)。
形參:形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。因此,形參只在函數(shù)內(nèi)部有效。
實參:實參可以是常量、變量、表達(dá)式、函數(shù)等,無論實參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。函數(shù)調(diào)用結(jié)束返回主調(diào)用函數(shù)后則不能再使用該形參變量。
形參,實參如下:
#1、位置參數(shù):按照從左到右的順序定義的參數(shù)
位置形參:必選參數(shù)
位置實參:按照位置給形參傳值#2、關(guān)鍵字參數(shù):按照key=value的形式定義的實參
無需按照位置為形參傳值
注意的問題:1. 關(guān)鍵字實參必須在位置實參右面2. 對同一個形參不能重復(fù)傳值#3、默認(rèn)參數(shù):形參在定義時就已經(jīng)為其賦值
可以傳值也可以不傳值,經(jīng)常需要變得參數(shù)定義成位置形參,變化較小的參數(shù)定義成默認(rèn)參數(shù)(形參)
注意的問題:1. 只在定義時賦值一次2. 默認(rèn)參數(shù)的定義應(yīng)該在位置形參右面3. 默認(rèn)參數(shù)通常應(yīng)該定義成不可變類型#4、可變長參數(shù):
可變長指的是實參值的個數(shù)不固定
而實參有按位置和按關(guān)鍵字兩種形式定義,針對這兩種形式的可變長,形參對應(yīng)有兩種解決方案來完整地存放它們,分別是*args,**kwargs===========*args===========
def foo(x, y, *args):print(x, y) #1 2
print(args) #(3, 4, 5)
foo(1, 2, 3, 4, 5)-----------------------------------------------
def foo(x, y, *args):print(x, y) #1 2
print(args) #(3, 4, 5)
foo(1, 2, *[3, 4, 5])-----------------------------------------------
deffoo(x, y, z):print(x, y, z) #1 2 3
foo(*[1, 2, 3])-----------------------------------------------
def foo(*args, x, y):print(x, y)print(args)
foo(1, 2, *[3, 4, 5]) #報錯
===========**kwargs===========
def foo(x, y, **kwargs):print(x, y) #1 2
print(kwargs) #{'c': 3, 'a': 1, 'b': 2}
foo(1, y=2, a=1, b=2, c=3)----------------------------------------------
def foo(x, y, **kwargs):print(x, y) #1 2
print(kwargs) #{'c': 3, 'a': 1, 'b': 2}
foo(1, y=2, **{'a': 1, 'b': 2, 'c': 3})-----------------------------------------------
deffoo(x, y, z):print(x, y, z) #2 3 1
foo(**{'z': 1, 'x': 2, 'y': 3})===========*args+**kwargs===========
def foo(x, y, *args, **kwargs):print(x, y) #1 2
print(args) #(3, 4, 5)
print(kwargs) #{'c': 4, 'b': 3, 'd': 5}
foo(1, 2, 3, 4, 5, b=3, c=4, d=5)----------------------------------------------
*后定義的參數(shù),必須被傳值(有默認(rèn)值的除外),且必須按照關(guān)鍵字實參的形式傳遞def foo(x, y, *args, a=1, b, **kwargs):print(x, y) #1 2
print(args) #(3, 4, 5)
print(a) #1
print(b) #3
print(kwargs) #{'c': 4, 'd': 5}
foo(1, 2, 3, 4, 5, b=3, c=4, d=5)View Code
2.默認(rèn)參數(shù)
默認(rèn)參數(shù)就是在定義形參的時候,給函數(shù)默認(rèn)賦一個值,比如說數(shù)據(jù)庫的端口這樣的,默認(rèn)給它一個值,這樣就算你在調(diào)用的時候沒傳入這個參數(shù),它也是有值的
#port=3306為默認(rèn)值參數(shù)
def connect(ip,port=3306):print(ip,port)#如果給一個port值,則傳新給的值
connect('118.1.1.1',3307)#如果不填,則使用默認(rèn)參數(shù)
connect('118.1.1.1')View Code
使用函數(shù)
使用的原則
函數(shù)使用的時候,要保證先定義,后調(diào)用
例子如下:
函數(shù)即“變量”,“變量”必須先定義后引用。未定義而直接引用函數(shù),就相當(dāng)于在引用一個不存在的變量名#測試一
deffoo():print('from foo')
bar()
foo()#報錯
#測試二
defbar():print('from bar')deffoo():print('from foo')
bar()
foo()#正常
#測試三
deffoo():print('from foo')
bar()defbar():print('from bar')
foo()#會報錯嗎?
#結(jié)論:函數(shù)的使用,必須遵循原則:先定義,后調(diào)用#我們在使用函數(shù)時,一定要明確地區(qū)分定義階段和調(diào)用階段
#定義階段
deffoo():print('from foo')
bar()defbar():print('from bar')#調(diào)用階段
foo()View Code
調(diào)用函數(shù)方式1 語句形式:foo()
2 表達(dá)式形式:3*len('hello')
3 當(dāng)中另外一個函數(shù)的參數(shù):range(len('hello'))
嵌套函數(shù)
嵌套函數(shù)說直接點就是在函數(shù)還有另一個函數(shù)
函數(shù)嵌套還分為調(diào)用和定義
我們先看一下調(diào)用:
defmax(x,y):return x if x > y elseydefmax4(a,b,c,d):
res1=max(a,b)
res2=max(res1,c)
res3=max(res2,d)returnres3print(max4(1,2,3,4))View Code
接下來我們看一下嵌套函數(shù)的定義:
deff1():print('from f3')
f1()View Code
函數(shù)的特性
函數(shù)是第一類對象,即函數(shù)可以當(dāng)作數(shù)據(jù)傳遞
比如:#1 可以被引用
#2 可以當(dāng)作參數(shù)傳遞
#3 返回值可以是函數(shù)
#3 可以當(dāng)作容器類型的元素
列1:
defdemo():print("demo1")
a=demo
b=a
b()View Code
總結(jié)
以上是生活随笔為你收集整理的python foo函数_python——函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子商务公司创业计划书
- 下一篇: python属于汇编语言还是高级语言_p