Python學(xué)習(xí) day4-2021.3.2(函數(shù)基礎(chǔ))


Python入門課程系列:


函數(shù)就是最基本的一種代碼抽象的方式

1. 函數(shù)基礎(chǔ)

  • 函數(shù):是一系列python語句的組合,可以在程序中運(yùn)行一次或者多次,一般是完成具體的獨(dú)立的功能。
  • 使用函數(shù)的意義:最大化復(fù)用代碼以及最小化冗余代碼。
  • 函數(shù)的定義:
    def 函數(shù)名(參數(shù)列表): #參數(shù)可以是0-N個
    函數(shù)體[一系列的python語句,表示獨(dú)立的功能]
  • 函數(shù)的調(diào)用:本質(zhì)上就是去執(zhí)行函數(shù)定義里面的代碼塊,在調(diào)用函數(shù)之前必須先定義
print('小李的身高是%f'%1.63)
print('小李的體重是%d'%45)
print('小李的愛好是%s'%'學(xué)習(xí)')
print('小李的專業(yè)是%s'%'計(jì)算機(jī)')

#如果需要反復(fù)打印如上信息,就可以把它包裝成函數(shù)
def printInfo():  #下面是函數(shù)的說明文檔,一般在函數(shù)第一行,敲三個單引號即可添加。
    '''
    這個函數(shù)是用來打印個人信息的,是對小李信息顯示的組合
    :return:
    ''' #添加好之后按住command,將鼠標(biāo)放在函數(shù)名字上即可顯示。
    print('小李的身高是%f' % 1.63)
    print('小李的體重是%d' % 45)
    print('小李的愛好是%s' % '學(xué)習(xí)')
    print('小李的專業(yè)是%s' % '計(jì)算機(jī)')
    pass
printInfo() #函數(shù)調(diào)用
printInfo() #多次調(diào)用
printInfo()

??2. 函數(shù)參數(shù)


參數(shù):其實(shí)就是函數(shù)為了實(shí)現(xiàn)某項(xiàng)特定的功能,進(jìn)而為了得到實(shí)現(xiàn)功能所需要的數(shù)據(jù)。(簡而言之:參數(shù)就是為了得到外部數(shù)據(jù)的)
重點(diǎn): 傳參 調(diào)用 不定長參數(shù)
難點(diǎn): 缺省參數(shù) 不定長參數(shù)

#進(jìn)一步去完善這樣的需求【輸出不同人的信息】,方案:通過傳入?yún)?shù)來解決
def printInfo(name,height,weight,hobbit,pro): #形參
    print('%s的身高是%f' %(name,height))
    print('%s的體重是%d' %(name,weight))
    print('%s的愛好是%s' %(name,hobbit))
    print('%s的專業(yè)是%s' %(name,pro))
    pass
#調(diào)用帶參數(shù)的信息
printInfo('小劉',1.64,55,'看小說','學(xué)生') #實(shí)參 

參數(shù)的分類:必選參數(shù)、默認(rèn)參數(shù)[缺省參數(shù)]、可選參數(shù)、關(guān)鍵字參數(shù)

#1. 必選參數(shù)
def sum(a,b): #形式參數(shù):只是意義上的一種參數(shù),在定義的時(shí)候是不占內(nèi)存地址的
    sum=a+b
    print(sum)
    pass
#函數(shù)調(diào)用  在調(diào)用的時(shí)候必選參數(shù)是必須要賦值的
sum(20,15) #20,15是實(shí)際參數(shù)(實(shí)參),是實(shí)際占用內(nèi)存地址的。

#2. 默認(rèn)參數(shù)【缺省參數(shù)】
def sum1(a=20,b=30): #20和30就是默認(rèn)參數(shù),后面依然可以給a和b賦值,如果不賦值,它們也有默認(rèn)值
    print('默認(rèn)參數(shù)使用=%d'%(a+b))
    pass
sum1()
sum1(10) #這個值只能賦給a,如果用sum1(,10)這樣的格式,會報(bào)錯。
sum1(10,10)

#3.可選參數(shù)/可變參數(shù)/不定長參數(shù) (當(dāng)參數(shù)的個數(shù)不確定時(shí)使用,比較靈活)
def getCompute(*args): #????args接受的數(shù)據(jù)是元組類型
    '''
    計(jì)算累加和
    :param args: 可變長的參數(shù)類型
    :return:
    '''
    result=0
    for item in args:
        result+=item
        pass
    print('result%d'%result)
    pass
getCompute(1)
getCompute(1,2)
getCompute(1,2,3)

# 4. 關(guān)鍵字可變參數(shù):使用**來定義
# ????在函數(shù)體內(nèi),參數(shù)關(guān)鍵字是字典類型 key是一個字符串
def keyfunc(**kwargs):
    print(kwargs)
    pass
# 調(diào)用
# keyfunc(1,2,3) 這樣是不可以傳遞的,關(guān)鍵字可變參數(shù)必須是字典類型
dictA = {'name': 'leo', 'age': 35}
keyfunc(**dictA)  ##直接傳遞字典參數(shù)要帶兩個**,否則報(bào)錯
keyfunc(name='peter', age=26) ##或者直接以命名參數(shù)(鍵值對)傳入

#5. 可選參數(shù)和關(guān)鍵字可變參數(shù)的復(fù)合
#????可選參數(shù)必須放在關(guān)鍵字可選參數(shù)之前,否則會報(bào)錯
def complexfunc(*args,**kwargs):
    print(args)
    print(kwargs)
    pass
complexfunc(1,2,3,4)
complexfunc(1,2,3,4,name='susan')
complexfunc(age=36)

??3. 函數(shù)返回值

  • 概念:就是程序中函數(shù)完成一件事情后,最后給調(diào)用者的結(jié)果。如果在函數(shù)內(nèi)部有return,就可以返回實(shí)際的值,否則返回None。
  • 類型:返回值可以是任意類型,取決于return后面的類型
  • 用途:給調(diào)用方返回?cái)?shù)據(jù)

在一個函數(shù)體內(nèi)可以出現(xiàn)多個return值 ,但是肯定只能返回一個return。如果在一個函數(shù)體內(nèi)執(zhí)行了return,意味著函數(shù)就執(zhí)行完成退出了,return后面的代碼語句將不會執(zhí)行。
如果函數(shù)需要返回多個結(jié)果,則將需要返回的值用逗號隔開,最終會返回一個包含所有返回值的元組。

#例1:
def sum(a,b):
    sum=a+b
    return sum #將計(jì)算的結(jié)果返回給調(diào)用方
    pass
print(sum(10,30)) #函數(shù)的返回值返回到調(diào)用的地方
#40

##如果沒有return sum,返回的是None
def sum(a,b):
    sum=a+b
    pass
print(sum(10,30))
#None

#例2-1:
def calcompute(num):
    result=0
    i=1
    while i<=num:
        result+=i
        i+=1
        pass
    return result
pass
#調(diào)用函數(shù)
value=calcompute(10)
print(type(value)) #type是int
print(value)
#例2-2: (??注意2-1和2-2的區(qū)別,除了list還可以返回元組等)
def calcompute(num):
    li=[]
    result=0
    i=1
    while i<=num:
        result+=i
        i+=1
        pass
    li.append(result)
    return li
pass
#調(diào)用函數(shù)
value=calcompute(10)
print(type(value)) #type是list
print(value)
#例2-3:返回元組
def returnTuple():
    '''
    返回元組類型的數(shù)據(jù)
    :return:
    '''
    return 1,2,3
pass
A=returnTuple()
print(type(A))
#例2-4 返回字典
def returnDict():
    '''
    返回字典類型的數(shù)據(jù)
    :return:
    '''
    return{'name':'測試'}
pass
A=returnDict()
print(type(A))
  • 根據(jù)函數(shù)的返回值和函數(shù)的參數(shù)可以對函數(shù)進(jìn)行分類:
    1.有參數(shù)有返回值
    2.有參數(shù)無返回值
    3.無參數(shù)有返回值
    4.無參數(shù)無返回值
  • python中print和return的區(qū)別
    print的作用是將數(shù)據(jù)輸出到控制端
    return的作用(之一)是返回計(jì)算的值,return返回的結(jié)果不能輸出到控制臺,需要通過print才能打印出來。

仔細(xì)比較下面4個例子

#例1 直接使用print打印結(jié)果
def sum(a,b):
    sum=a+b
    print(sum) #直接將sum結(jié)果輸出到控制端
    pass
sum(10,30)
#40

#例2 沒有return語句,所以沒能給函數(shù)sum()賦值,打印出來也就是空值(None)
def sum(a,b):
    sum=a+b
    pass
print(sum(10,30))
#None

#例3 雖然有return,但直接調(diào)用sum()是沒有輸出結(jié)果的
def sum(a,b):
    sum=a+b
    return sum
    pass
sum(10,30)

 #例4 通過print將return返回的結(jié)果輸出到控制臺。
def sum(a,b):
    sum=a+b
    return sum
    pass
print(sum(10,30))
#40

4. 函數(shù)嵌套使用

函數(shù)可以嵌套調(diào)用,即在一個函數(shù)內(nèi)部調(diào)用另外一個函數(shù)。內(nèi)層函數(shù)可以訪問外層函數(shù)中定義的變量,但不能重新賦值(rebind)。

#函數(shù)嵌套
def fun1():
    print('--------fun1 start--------')
    print('--------執(zhí)行代碼省略---------')
    print('--------fun1 end-----------')
    pass

def fun2():
    print('--------fun2 start--------')
    #調(diào)用第一個函數(shù)
    fun1()
    print('--------fun2 end----------')
    pass

fun2() #調(diào)用函數(shù)2

小結(jié)

課后作業(yè)

  1. 寫函數(shù),接收n個數(shù)字,求這些參數(shù)數(shù)字的和
  2. 寫函數(shù),找出傳入的列表或元組的奇數(shù),并返回一個新的列表
  3. 寫函數(shù),檢查傳入字典的每一個value的長度,如果大于2,那么僅保留前兩個長度的內(nèi)容,并將新內(nèi)容返回給調(diào)用者。PS:字典中的value只能是字符串或列表

答案

#題1: 
#接收n個數(shù)字,求這些參數(shù)數(shù)字的和
def sum(*args):
    result=0
    for item in args:
        result+=item
        pass
    return result
    pass
rs=sum(1,2,3)  #需要用一個變量來接收return回來的值 
print(rs) 
print('rs={}'.format(rs)) #format格式化輸出
#6
#rs=6

# 接收一個數(shù)字,求累加和
def sum(a):
    i=1
    k=0
    while i <= a:
        k+=i
        i += 1
        pass
    return k
    pass
print(sum(6))
#題2: 
#方法1.1  #比較1.1和1.2的區(qū)別
def lis(container):
    list=[]
    for i in container:
        if i%2==1:
            list.append(i)
    return list
#a=lis((11,8,3,2,15)) 和下面的寫法等價(jià)
a=lis([11,8,3,2,15]) #接受一個list或元組
print(a)
# 方法1.2
A=[]
def FindOdd(*args):
    for items in args:
        if items%2==0:
            A.append(items)
            pass
    return A
b=FindOdd(1,3,4,6,8) #使用不定長參數(shù),接收一個元組
print(b)
#方法1.3 使用index取下標(biāo)
def lis(container):
    list=[]
    index=1
    for i in container:
        if i%2==1:
            list.append(i)
            pass
        index+=1
        pass
    return list
a=lis([1,8,6,2,7])
print(a)
#題3:
def dictFun(dicParms):
    '''
    處理字典類型的數(shù)據(jù)
    :param kwargs: 字典
    :return:
    '''
    result={} #空字典
    for key,value in dicParms.items(): #key-value
        if len(value)>2:
            result[key]=value[:2] #向字典去添加數(shù)據(jù)
            pass
        else:
            result[key]=value
            pass
        pass
    return result
    pass
#函數(shù)調(diào)用
dictObj={'name':'hua','pro':'幼兒園班長','hobby':'畫畫'} #如果有int會報(bào)錯
print(dictFun(dictObj))
#{'name': 'hu', 'pro': '幼兒', 'hobby': '畫畫'}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容