Python程序設計之函數(1)

1.函數定義:
使用def關鍵字定義函數,然後一個空格加函數名,接下來是一對圓括號和冒號,用來傳遞參數,格式如下

def 函數名([參數]):
'''註釋'''
#註釋
函數體		

使用案例①
比較兩個數的大小

def compare(a,b):
    if a>b:
        print('The bigger is:',a,end='\n')
        print('The smaller is:',b,end='\n')
    elif a<b:
        print('The bigger is:', b, end='\n')
        print('The smaller is:', a, end='\n')
    else:
        print('They are equal together',a,'=',b,end='\n')
compare(int(input('請輸入數字a:')),int(input('請輸入數字b:')))

輸出結果:

請輸入數字a:15
請輸入數字b:20
The bigger is: 20
The smaller is: 15

案例②
關於形參和實參
定義是函數參數爲形參,調用時調用的參數爲實參

#使用默認參數值。形參,
#默認參數值必須在最右邊,即在默認參數值的左邊不能再有默認值
def say(message,times=1):
    print((message+'')*times,end='')
#查看默認參數值
print(say.__defaults__ ,end='\n')

函數定義錯誤案例:

#錯誤案例
def abc(a=0,b,c):
    print(a,b,c)
def abc1(a,b=0,c):
    print(a,b,c)
#正確案例
def abc2(a=1,b=2,c=3):
    print(a,b,c)

當參數值省略時

#當參數值省略時的情況
def listm(new,old=None):
    if old is None:
        old=[]
    else:
        old.append(new)
    return old
print(listm('a',[1,2,3]),end='\n')
print(listm('1',['a','b']),end='\n')
print(listm('a'),end='\n')

輸出結果如下

(1,)
[1, 2, 3, 'a']
['a', 'b', '1']
[]

關鍵參數機制
根據參數的傳遞方式,通過關鍵參數可以按參數名傳遞參數,使得可以打亂參數的傳遞順序,當不影響函數運行

def q(a,b,c=0):
    print(a,b,c)
q(b=0,c=3,a=8)

輸出結果:

8 0 3

通過指針實現可變長度參數的函數以及自帶的解包機制

#通過指針實現可變長度參數
def dem(*p):
    print(p)
dem(1,2,3)
dem(1,2)
#通過指向指針的指針實現可變長度參數,實現的是字典形式
def dem1(**p):
    for item in p.items():
        print(item)
dem1(x=1,y=2)

#參數傳遞序列解包
def dem2(a,b):
    print(a+b,end='\n')
dem2(*[1,2])    #解包列表
dem2(*(1,2))    #解包元組
dem2(*{1:'23',2:'33'})  #解包字典,默認爲鍵
dem2(*{1,2})    #解包集合
dem2(*{1:23,2:23}.values()) #解包字典中值
dem2(*{1:'32',2:'35'}.items())  #解包字典的鍵值對

輸出結果:

(1, 2, 3)
(1, 2)
('x', 1)
('y', 2)
3
3
3
3
46
(1, '32', 2, '35')

調用函數需要注意是否會修改原始數據的值,是否有返回值
作用域:

a=5 #在函數外定義全局變量
def dem3():
    global a    #聲明或創建全局變量
    a=3         #修改全局變量的值
    y=a
    print(a,y)
dem3()  #本次調用會修改全局變量的值
#可以在模塊間聲明和調用全局變量
#A模塊中聲明 global_value=0
#B模塊調用 import A A.global_value=1
#c模塊調用  import A print(A.global_value)

輸出結果:

3 3

2.lambda表達式
格式:

lambda x:expert
x:變量,不限個數
expert:關於變量的表達式
#lambda表達式
f=lambda x,y:x+y
print(f(1,2))
l=[(lambda x:x**2),(lambda x:x**3)]
print(l[0](5),l[1](5))
d={'f1':(lambda x:x**2),'f2':(lambda x:x**4)}
print(d['f1'](1),d['f2'](5))

g=lambda x,y=2:x+y
print(g(1,3))
L=[12]
#print(map((lambda x:x+10),L))

r=[]
for x in range(5):
    r.append(lambda n=x:n**2)
print(r[4]())

結果如下圖:

3
25 125
1 625
4
16

案例3:

#案例3實現計算圓的面積
import math
r=int(input())
def area(r):
    if isinstance(r,int) or isinstance(r,float):
        return math.pi*r*r
    else:
        return ('Input error!')
print(area(r))

輸出結果:

5
78.53981633974483

案例4:

#案例4輸出一個首項爲參數平均數,且其他各項大於平均數的元組
def array(*p):
    average=sum(p)//len(p)
    d=[i for i in p if i>average]
    return (average,)+tuple(d)
print(array(1,2,3,4,5,6,3))

輸出結果:

(3, 4, 5, 6)

案例5:

#案例5返回第一個爲大寫字母元素的個數,第二元素爲小寫字母個數的元組
def dem3(s):
    result=[0,0]
    for i in s:
        if 'a'<=i<='z':
            result[0]+=1
        else:
            result[1]+=1
    return tuple(result)
print(dem3('aaaaAAA'),end='')

案例6:

#案例6逆序三次列表,根據k值,逆序下標在k之前、之後的元素、合起來再逆序一次
def dem4(l,k):
    if l is None:
        l=[]
    x=l[:k]
    x.reverse()
    y=l[k:]
    y.reverse()
    r=x+y
    r.reverse()
    print(r,end='')
l=[1,2,3,4,5,6,7,8]
dem4(l,4)

案例7:

import random
print([random.randint(1,20) for i in range(50)],end='\n')

#打印楊輝三角
def dem5(t):
    print([1],end='\n')
    print([1,1],end='\n')
    line=[1,1]
    for i in range(2,t):
        r=[]
        for j in range(0,len(line)-1):
            r.append(line[j]+line[j+1])
        line=[1]+r+[1]
        print(line)
dem5(10)

學習筆記:
1.關於函數有三部分構成:函數名,參數,以及函數體
2.函數的聲明形式爲def faction():函數體
3.函數參數形式主要有形參(聲明時的參數)和實參(函數調用時傳過來的參數)
4.參數可以爲可變參數,通過指針實現,具體有兩種形式:*p(不限傳遞個數和形式)/**p(使用時在返回時,類似於字典)
5.lambda表達式:形式爲lambda 變量:表達式,返回的是表達式的值,具體參考上面的案例
6.函數的使用需要注意參數形式,是否有返回值以及是否會修改實參

其他文章:
字符串詳解:
https://blog.csdn.net/qxyloveyy/article/details/104502638

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章