• 函数及嵌套函数调用


    函数

    
    '''
    函数:
    >>> 重复利用的工具
    >>> 可以完成特定功能的代码块,函数就是存放代码块的容器
    '''
    
    

    定义函数的语法

    • 函数四部分
    '''
    1. 函数名:使用该函数的依据
    2. 函数体:完成功能的代码块
    3. 返回值:功能完成的反馈结果
    4. 参数:完成功能需要的条件信息
    '''
    
    
    • 用def关键词来声明函数
    def 函数名(参数们):
        函数体
        return '返回值'
    

    如何使用函数

    
    '''
    函数名:拿到函数的地址
    函数名(): 拿到函数的地址,并执行函数中存放的代码块(函数体)  *****
    函数名(参数):执行函数并传入参数
    
    函数名(): 执行完毕后,会得到函数的返回值,返回值就跟普通变量一样,可以直接打印、使用、运算
    '''
    def fn(num):
        print("传入的num值:%s" % num)
        return '收到了'
    
    res = fn(10)
    
    # 控制台会打印:传入的num值:10
    # res的值为:'收到了'
    def fn(money):
        print('你付了%s元钱' % money) #你付了10元钱
        print('函数的一行代码') #函数的一行代码
        print('函数的二行代码') #函数的二行代码
        return '冰红茶'
    # fn直接打印,只能看到函数存放代码的地址
    print(fn, id(fn))  # <function fn at 0x0000020E45B71F28> 2260322426664
    print('--------------------------------------')
    # 使用函数: 函数名()
    fn(10) #冰红茶
    
    print("把水喝了")
    # 函数的返回值也称之为函数值,就是函数执行结束后的结果
    # 可以用变量接受 | 可以直接打印 | 可以直接使用
    msg = fn(10)
    print(msg) #冰红茶
    
    print('>>>>', fn(10) + '好喝') #>>>> 冰红茶好喝
    # 函数执行的本质:执行函数体,得到函数返回值
    # 注:函数一定要先定义在调用
    
    

    函数的分类

    根据函数体划分
    • 空函数:项目之初,知道项目有哪些功能,但还没有明确功能体,可以用pass进行函数体填充

      def computed():
          pass
      
    • 非空函数:用函数体

      def add_num(n1, n2):
          ''' 函数的注释
          :param n1: 第一个数
          :param n2: 第二个数
          :return: 两个数之和
          '''
          return n1 + n2
      
      # print(a)
      # a = 10
      
      computed()
      
      res = add_num(10, 20)
      print(res)
      
      a = 50
      b = 100
      print(add_num(a, b))
      
    根据参数列表划分
    • 无参函数:不需外界资源
    def start():
        print('系统启动')
    start()
    
    • 有参函数:需要外键资源
    def login(usr, pwd):
        if usr == 'owen' and pwd == '123':
            print('登录通过')
    	else:
            print('登录失败')
            
     login('owen', '123')
    
    根据返回值划分:return是用来结束函数的
    • 空返回:返回None
    # 没有return的函数
    def demo(x, y):
        print( x + y )
    # 空return    
    def demo(x, y):
        print( x + y )
        return  # 用来强行结束函数的(像break结束循环一样)
    def fn1():
        print('fn1 run!!!')
        
    res = fn1()
    print('没有return关键字的返回值:%s' % res)  # None
    
    def fn2():
        print('fn2 run!!!')
        return
        return None
    
    res = fn2()
    print('空return关键字的返回值:%s' % res)  # None
    
    # 无return函数与空return函数的区别
    # 空return:可以根据具体情况主动退出函数(像break结束循环一样)
    def fn3(msg):
        print('fn3 第一行逻辑')
    
        # msg信息不正常:'' | None
        if msg == '' or msg is None:
            # 结束函数
            return
    
        print('msg信息正常: %s' % msg) # msg: 
    
    msg = input('msg: ')
    fn3(msg) # fn3 第一行逻辑
    
    • 一值返回
    def demo(x, y):
        return x + y
    # 案例
    def add_num(n1, n2):
        return n1 + n2
    print(add_num(10, 15)) # 25
    
    def computed(n1, n2):
        # 返回四则运算的结果
        r1 = n1 + n2
        r2 = n1 - n2
        r3 = n1 / n2
        r4 = n1 * n2
        return [r1, r2, r3, r4]
    
    a, b, c, d = computed(50, 25) # 利用交叉赋值
    print(a, b, c, d #75 25 2.0 1250
    
    • 多值返回
    def demo(x, y):
        return x + y, x - y, x * y, x / y # 本质就是返回装有多个值的元组
    # 案例
    def computed_sup(n1, n2):
        # 返回四则运算的结果
        r1 = n1 + n2
        r2 = n1 - n2
        r3 = n1 // n2
        r4 = n1 ** n2
        return r1, r2, r3, r4
    # 单个值返回
    a, b, c, d = computed_sup(50, 25)
    print(a, b, c, d) # 75 25 2 2980232238769531250000000000000000000000000
    # 多个值返回
    res = computed_sup(50, 25)  # 得到的是装有所有结果的元组
    print(res) # (75, 25, 2, 2980232238769531250000000000000000000000000)
    

    函数的嵌套调用

    # 函数的嵌套调用:在一个函数体中调用另一个函数
    
    # 在解释过程中,不执行函数体,在函数被调用时,函数体才被执行
    def fn1():
        print('fn1 run')
        fn2()
    
    def fn2():
        print('fn2 run')
        fn3()
    
    def fn3():
        print('fn3 run')
    
    # 注:在fn1中调用了fn2,所以调用fn1的逻辑应该在fn2定义之后
    fn1()
    
    #案例
    # 求两个数最大值
    def max_2(n1, n2):
        if n1 > n2:
            return n1
        return n2
    
    # 求三个
    def max_3(n1, n2, n3):
        m2 = max_2(n1, n2)
        return max_2(m2, n3)
    
    # 求四个
    def max_4(n1, n2, n3, n4):
        m2 = max_2(n1, n2)
        return max_3(m2, n3, n4)
    
    # 循环调用:在一个函数的内部调用另一个函数
    
    
    
    指定文件名的文件复制
    # 直接调用复制文件函数
    def copy_img(target_img):
        with open('001.jpg', 'rb') as r, open(target_img, 'wb') as w:
            for line in r:
                w.write(line)
             
    copy_img('888.jpg')
    copy_img('999.jpg')
    
    def copy_file(source, target):
        '''
        :param source: 被复制的文件
        :param target: 复制得到的文件
        :return:
        '''
        with open(source, 'rb') as r, open(target, 'wb') as w:
            for line in r:
                w.write(line)
    
    copy_file('cmd.txt', 'aaa.txt')
    copy_file('temp.txt', 'ttt.txt')
    
  • 相关阅读:
    java实现从实体到SQL语句的转换
    Mybatis Plus 入坑(含最新3.X配置)
    Spring cloud config client获取不到配置中心的配置
    Spring Cloud Config-Client 无法获取 Config-Server 在 github 上的配置文件的属性值,竟然是因为
    QMessageBox 的四种用法
    龙芯派二代发布,简化国产软硬件开发难度
    解析Qt元对象系统(五) Q_INVOKABLE与invokeMethod(automatic connection从Qt4.8开始的解释已经与之前不同,发送对象驻足于哪一个线程并不重要,起到决定作用的是接收者对象所驻足的线程以及发射信号(该信号与接受者连接)的线程是不是在同一个线程)good
    解析Qt元对象系统(四) 属性系统(确实比较方便)
    HTML如何让IMG自动适应DIV容器大小
    布隆过滤---判断一个元素在亿级数据中是否存在
  • 原文地址:https://www.cnblogs.com/fuwei8086/p/10615584.html
Copyright © 2020-2023  润新知