python第五章_python学习笔记——第五章

第五章 函数和代码复用

一、函数的定义与使用

函数的定义

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()

你可能感兴趣的:(python第五章)