2.4函数

1.自定义函数

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:
'))
b = int(input('请输入b: '))
c = input('请输入c: ')

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

 

小石小石摩西摩西的学习笔记,欢迎提问,欢迎指正!!!
原文地址:https://www.cnblogs.com/shijingwen/p/13700426.html