2.4函式
阿新 • • 發佈:2020-09-20
def szys(a,b,c):
if c == '求和':
d = a + b
elif c == '求乘積':
d = a * b
elif c == '求冪':
d = a ** b
else:
d = a - b
return d
a = int(input('請輸入a:\n'))
b = int(input('請輸入b:\n'))
c = input('請輸入c:\n')
print(szys(a,b,c))
請輸入a:
5
請輸入b:
4
請輸入c:
求冪
625
2.函式的引數
1)必備引數 以正確的順序傳入函式,呼叫時的數量必須和宣告時的一樣。
def move(x, y, step, angle=0):
nx = x + step + angle
ny = y - step - angle
return nx, ny
move(11,22)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-0d9a8cf7bc14> in <module>()
----> 1 move(11,22)
TypeError: move() missing 1 required positional argument: 'step'
2)命名引數 用引數的命名確定傳入的引數值。可以跳過不傳的引數或者亂序傳參,因為Python直譯器能夠用引數名匹配引數值。
def tiktok(x, y, step, angle=0):
nx = x - step * angle
ny = y + step - angle
return nx, ny
tiktok(y=23,x=66,step=24)
(66, 47)
3)預設引數 呼叫函式時,預設引數的值如果沒有傳入,則被認為是預設值。
def facebook(x, y, step, angle=0): nx = x - step * angle ny = y + step - angle return nx, ny
facebook(y=23,x=66,step=24,angle=1)
(42, 46)
4)不定引數 如需一個函式能處理比當初宣告時更多的引數,這些引數叫做不定引數。
def buding(*bd): print(bd) buding(1,2,3)
(1, 2, 3)
def tin(x,*yy): print(x) print(yy) tin(1,2,3,4,5,6,7)
1 (2, 3, 4, 5, 6, 7)
def ceshi(**zd): print(zd) ceshi(**{'mignzi':'bob','tizhong':'5公斤'})
{'mignzi': 'bob', 'tizhong': '5公斤'}
def ceshi(*zd): print(zd) ceshi({'sd':'sa','sddd':'yhn'})
({'sd': 'sa', 'sddd': 'yhn'},)
3.全域性變數與區域性變數
1)區域性變數 函式內部的變數名,如果第一次出現,且出現在“=”前面,就被視為定義一個區域性變數。
shuzi = 100 def lizi(): shuzi = 233 print(shuzi) lizi()
233
shuzi2 = 111 def fff(): shuzi2 = shuzi2 + 1 print(shuzi2) fff()
--------------------------------------------------------------------------- UnboundLocalError Traceback (most recent call last) <ipython-input-21-e4a46d02496b> in <module>() 5 print(shuzi2) 6 ----> 7 fff()
<ipython-input-21-e4a46d02496b> in fff() 2 3 def fff(): ----> 4 shuzi2 = shuzi2 + 1 5 print(shuzi2) 6
UnboundLocalError: local variable 'shuzi2' referenced before assignment
2)全域性變數 函式內部的變數名,如果第一次出現,且出現在“=”後面,且該變數在全域性域中已定義, 則這裡將引用全域性變數。
shuzi3 = 45 def po(): y = shuzi3 + 25 print(y) po()
70
lie = [1,2,31,44] def lieb(): lie.append(2333) print(lie) lieb()
[1, 2, 31, 44, 2333]
4.匿名函式lambda
hanshu = lambda x,y : x if x<y else y hanshu(4,2)
2
def qjxz(s,f): if s<f: return s else: return f qjxz(4,2)
2
chengfa = lambda j,k : j*k chengfa(4,6)
24
1)filter函式 用於指定過濾列表元素的條件
yanshi =[1,2,3,4,5,6,7,8,9] fil = filter(lambda x : x%3==0,yanshi) list(fil) #filter函式返回的是一個數組,此時要用list
[3, 6, 9]
2)map函式 用於指定對列表中的每一個元素的共同操作
yanshi2 = [2,4,5,3,2,58,66,70]
ma = map(lambda t: t*2,yanshi2)
list(ma)
[4, 8, 10, 6, 4, 116, 132, 140]
5.遞迴函式
def digui(nn):
if nn == 1:
return 0
return nn * digui(nn-1) #--digui(4)
digui(5)
#現在要計算的是digui(5),把數值代入進去計算
#nn不等於1,5*digui(4).digui(4)等於多少呢?再次計算
#nn不等於1,5*4*digui(3).digui(3)等於多少呢?再次計算
#nn不等於1,5*4*3*digui(2).digui(2)等於多少呢?再次計算
0
5xdigui(4) 5x4xdigui(3) 5x4x3xdigui(2) 5x4x3x2x1
lmd_dg = lambda n:1 if n==0 else n * lmd_dg(n-1)
lmd_dg(5)
120