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