python笔记------第5章 函数和代码复用

目录

函数的定义和使用

函数的理解和定义

函数是一段代码的表示

作用

定义

函数的使用及调用过程

调用是运行函数代码的方式

函数的参数传递

参数个数

可变参数传递

参数按照位置或名称传递 

函数的返回值

函数可以返回0个或多个结果

局部变量和全局变量

局部变量和全局变量不是相同的

局部变量为组和数据类型且未创建,等同于全局变量

使用规则

lambda函数

lambda函数返回函数名作为结果

结构

实例7:七段数码管绘制

基本思路

代码

理解方法思维

扩展

代码复用与函数递归

代码复用和模块化设计

代码复用

模块化设计

函数递归的理解

递归

函数递归的调用过程

递归的实现

函数递归实例解析

模块4:PyInstaller库的使用

将py源代码转化为无需源代码的可执行文件

PyInstaller是第三方库

使用

常用参数

实例8:科赫雪花小包裹

科赫曲线

代码

雪花 


  • 函数的定义和使用

    • 函数的理解和定义

      • 函数是一段代码的表示

      • 作用

        • 降低编程难度
        • 代码复用
      • 定义

        • 函数定义时所指定的参数是一种占位符
        • 函数定义如果不调用,不会被执行
    • 函数的使用及调用过程

      • 调用是运行函数代码的方式

        • 给出实际参数
        • 实际参数替换定义中的参数
        • 函数调用后会得到返回值
    • 函数的参数传递

      • 参数个数

        • 都行
        • 可选参数放在必选参数后面
      • 可变参数传递

        • 可变参数*b
      • 参数按照位置或名称传递 

    • 函数的返回值

      • 函数可以返回0个或多个结果

    • 局部变量和全局变量

      • 局部变量和全局变量不是相同的

      • 局部变量为组和数据类型且未创建,等同于全局变量

      • 使用规则

        • 基本数据类型,无论是否重名,局部变量与全局变量不同
        • 可以通过global保留字在函数内部声明全局变量
        • 组和数据类型,如果局部变量未真实创建,则是全局变量
    • lambda函数

      • lambda函数返回函数名作为结果

        • 是匿名函数,即没有名字的函数
        • 函数名是返回结果
        • 用于定义简单的,能够在一行内表示的函数
      • 结构

  • 实例7:七段数码管绘制

    • 基本思路

      • 步骤1:绘制单个数字对应的数码管
      • 步骤2:获得一串数字,绘制对应的数码管
      • 步骤3:获得当前系统时间,绘制对应的数码管
      • '
    • 代码

      • import turtle,time
        
        def drawGap():
            turtle.penup()
            turtle.fd(5)
        def drawLine(draw):
            drawGap()
            if draw :
                turtle.pendown()
            else:
                turtle.penup()
            turtle.fd(40)
            drawGap()
            turtle.right(90)
        def drawDight(dight):
            if dight in [2,3,4,5,6,8,9]:
                drawLine(True)
            else:
                drawLine(False)
            if dight in [0,1,3,4,5,6,7,8,9]:
                drawLine(True)
            else:
                drawLine(False)
            if dight in [0,2,3,5,6,8,9]:
                drawLine(True)
            else:
                drawLine(False)
            if dight in [0,2,6,8]:
                drawLine(True)
            else:
                drawLine(False)
            turtle.left(90)
            if dight in [0,4,5,6,8,9]:
                drawLine(True)
            else:
                drawLine(False)
            if dight in [0,2,3,5,6,7,8,9]:
                drawLine(True)
            else:
                drawLine(False)
            if dight in [0,1,2,3,4,7,8,9]:
                drawLine(True)
            else:
                drawLine(False)
            turtle.left(180)
            turtle.penup()
            turtle.fd(20)
        def drawDate(date):
            turtle.pencolor("red")
            for i in date:
                if i == '-':
                    turtle.write("年",font=("Arial",18,"normal"))
                    turtle.pencolor("green")
                    turtle.fd(40)
                elif i == '=':
                    turtle.write("月",font=("Arial",18,"normal"))
                    turtle.pencolor("blue")
                    turtle.fd(40)
                elif i == '+':
                    turtle.write("日",font=("Arial",18,"normal"))
                else:
                    drawDight(eval(i))
        def main():
            turtle.setup(800,350,200,200)
            turtle.penup()
            turtle.fd(-300)
            turtle.pensize(5)
            drawDate(time.strftime("%Y-%m=%d+",time.gmtime()))
            turtle.hideturtle()
            turtle.done()
        main()

    • 理解方法思维

      • 模块化思维
      • 规则化思维
      • 化繁为简
    • 扩展

      • 绘制带小数点的七段数码管
      • 带刷新的数字倒计时效果
        • import turtle
          def drawGap():#每根管前空5格
              turtle.penup()
              turtle.fd(5)
          def drawLine(draw):#画管
              drawGap()
              if draw :
                  turtle.pendown()
              else:
                  turtle.penup()
              turtle.fd(40)
              drawGap()
              turtle.right(90)
          def number(x):
              for i in range(x,-1,-1):
                  drawDight(i)
                  turtle.clear()
                  turtle.goto(0,0)
          def drawDight(dight):#显示数字
              if dight in [2,3,4,5,6,8,9]:
                  drawLine(True)
              else:
                  drawLine(False)
              if dight in [0,1,3,4,5,6,7,8,9]:
                  drawLine(True)
              else:
                  drawLine(False)
              if dight in [0,2,3,5,6,8,9]:
                  drawLine(True)
              else:
                  drawLine(False)
              if dight in [0,2,6,8]:
                  drawLine(True)
              else:
                  drawLine(False)
              turtle.left(90)
              if dight in [0,4,5,6,8,9]:
                  drawLine(True)
              else:
                  drawLine(False)
              if dight in [0,2,3,5,6,7,8,9]:
                  drawLine(True)
              else:
                  drawLine(False)
              if dight in [0,1,2,3,4,7,8,9]:
                  drawLine(True)
              else:
                  drawLine(False)
              turtle.left(180)
              turtle.penup()
              turtle.fd(20)
          def main():
              turtle.setup(800,350)
              turtle.penup()
              turtle.fd(0)
              turtle.pensize(5)
              number(5)
              turtle.hideturtle()
              turtle.done()
          main()

      • 绘制高级数码管
  • 代码复用与函数递归

    • 代码复用和模块化设计

      • 代码复用

        • 把代码当作资源进行抽象
          • 代码资源化
          • 代码抽象化
          • 代码复用
        • 函数和对象是代码复用的形式
          • 函数
            • 将代码命名
            • 在代码层面进行初步抽象
          • 对象
            • 属性和方法
            • 在函数上再次组织进行抽象
      • 模块化设计

        • 分而治之
          • 通过函数或对象进行封装划分为模块与模块之间的表达
        • 紧耦合 松耦合
          • 最好是松耦合
    • 函数递归的理解

      • 递归

        • 函数调用函数自身
        • 链条
          • 计算过程存在递归链条
        • 基例
          • 存在一个或多个不需要递归的实例
    • 函数递归的调用过程

      • 递归的实现

        • 函数+分支
    • 函数递归实例解析

      • 斐波那契数列
      • 汉诺塔
  • 模块4:PyInstaller库的使用

    • 将py源代码转化为无需源代码的可执行文件

    • PyInstaller是第三方库

      • (cmd命令行)pip install pyinstaller
    • 使用

    • 常用参数

  • 实例8:科赫雪花小包裹

    • 科赫曲线

    • 代码

      • import turtle
        def koch(size,n):
            if n==0:
                turtle.fd(size)
            else:
                for angle in [0,60,-120,60]:
                    turtle.left(angle)
                koch(size/3,n-1)
        def main():
            turtle.setup(800,400)
            turtle.penup()
            turtle.goto(-300,-50)
            turtle.pendown()
            turtle.pensize(2)
            koch(600,3)
            turtle.hideturtle()
        main()

    • 雪花 

      • 代码
        • import turtle
          def koch(size,n):
              if n==0:
                  turtle.fd(size)
              else:
                  for angle in [0,60,-120,60]:
                      turtle.left(angle)
                      koch(size/3,n-1)
          def main():
              turtle.setup(600,600)
              turtle.penup()
              turtle.goto(-200,100)
              turtle.pendown()
              turtle.pensize(2)
              level=4
              koch(400,level)
              turtle.right(120)
              koch(400,level)
              turtle.right(120)
              koch(400,level)
              turtle.hideturtle()
          main()

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值