python学习笔记——第五章

第五章 函数和代码复用

一、函数的定义与使用

  1. 函数的定义

def 函数名(参数):

函数体

return 返回值

      2.函数的参数传递

可选参数必须放在非可选参数后面 egdef 函数名(非可选参数也叫必选参数,可选参数):   比如递归函数def fact(n,m=1):

可变参数——def 函数名(参数, *b):

    3.函数的返回值

可以用return来传递返回值——return m,n

    4.局部变量和全局变量

在函数定义的函数体中使用的变量是局部变量,即在函数体内部的为局部变量,在函数体外面的为全局变量。

使用规则1:局部变量是函数内部的占位符,与全局变量可能重名但不同; 函数运算结束后,局部变量将被释放,不再存在;

使用保留字global在函数体中间使用外部的全局变量,比如:

n,s = 10,100

def fact(n):

global s    #声明此处s是全局变量

使用规则2:局部变量为组合数据类型且未创建,等同于全局变量。

   5.lambda函数

——用于定义简单的、能够在一行内表示的函数

用法: 函数名=lambda 参数 : 表达式    f=lambda  x,y : x+y

二、实例七:七段数码管绘制

#SevenDigitsDrawV1.py

import turtle

def drawLine(draw):   #绘制单段数码管

    turtle.pendown() if draw else turtle.penup()

    turtle.fd(40)

    turtle.right(90)

def drawDigit(digit): #根据数字绘制七段数码管

    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)

    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)

    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)

    drawLine(True) if digit in [0,2,6,8] else drawLine(False)

    turtle.left(90)

    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)

    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)

    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)

    turtle.left(180)

    turtle.penup()

    turtle.fd(20)

def drawDate(date):  #获得要输出的数字

    for i in date:

        drawDigit(eval(i))  #通过eval()函数将数字变为整数

def main():

    turtle.setup(800, 350, 200, 200)

    turtle.penup()

    turtle.fd(-300)

    turtle.pensize(5)

    drawDate('20181010')

    turtle.hideturtle()

    turtle.done()

main()

三、代码复用与函数递归

   1.代码复用与模块化设计

   函数和对象是代码复用的两种主要形式。

   模块化设计的核心——分而治之。

   概念: 紧耦合(两个部分之间交流很多,无法独立存在)  分耦合(两个部分之间交流较少,可以独立存在)   模块内部紧耦合,模块之间分耦合

2.函数递归

有两个基本特征:

链条——计算过程存在递归链条

基例——存在一个或多个不需要再次递归的基例

   实例解析-字符串反转

   分析:要实现递归即 函数+分支结构(定义一个函数,在函数中要有分支),通过分支区分哪些是递归链条,哪些是递归基例 。

      

四、实例8:科赫雪花小包裹  

    #KochDrawV2.py

    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 = 3      # 3阶科赫雪花,阶数

        koch(400,level)     

        turtle.right(120)

        koch(400,level)

        turtle.right(120)

        koch(400,level)

        turtle.hideturtle()

    main()

猜你喜欢

转载自www.cnblogs.com/daisy-xy/p/11749117.html