第五章

第五章 函数和代码复用

一、函数的定义与使用

函数的定义
def 函数名(参数):

函数体

return 返回值

  2.函数的参数传递

可选参数必须放在非可选参数后面 eg:def 函数名(非可选参数也叫必选参数,可选参数): 比如递归函数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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值