zoukankan      html  css  js  c++  java
  • 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

     

    小石小石摩西摩西的学习笔记,欢迎提问,欢迎指正!!!
  • 相关阅读:
    .NET 低版本调用高版本DLL问题
    防止SQL注入攻击
    Vue集成vue-pdf进行pdf预览
    VS2017序列号|Visual Studio 2017 激活码 序列号
    Java 使用word文档模板下载文件(内容为表格)
    接收sql语句的返回值
    ajax返回数据之前的loading等待
    在客户端展示本地图片
    C# 使用cookie实现登录
    C#请求http向网页发送数据,网页接收
  • 原文地址:https://www.cnblogs.com/shijingwen/p/13700426.html
Copyright © 2011-2022 走看看