五、Python 函数和代码复用

  • 本文是网课:Python语言程序设计国家精品——(北京理工大学 嵩天 、 黄天羽 、 礼欣)的学习笔记。

目录

5.1 函数的定义与使用

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

5.3 代码复用与函数递归

5.4 模块4:PyInstaller库的使用

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


5.1 函数的定义与使用

  • 函数的理解与定义

五、Python 函数和代码复用_第1张图片

  • 函数的使用及调用过程
  • 函数的参数传递

函数定义时可以为某些参数指定默认值,构成可选参数,在参数列表中可选参数必须定义在非可选参数之后。

可变参数同样放在后面。

五、Python 函数和代码复用_第2张图片

五、Python 函数和代码复用_第3张图片

五、Python 函数和代码复用_第4张图片

  • 函数的返回值

函数没有返回值时,也可以return,只是什么都不返回就是了。

return可以返回0或多个返回值。

五、Python 函数和代码复用_第5张图片

列表类型[a,b,c...];元组类型(a,b,c...)

  • 局部变量和全局变量

五、Python 函数和代码复用_第6张图片

对比如下两个图: 

五、Python 函数和代码复用_第7张图片

五、Python 函数和代码复用_第8张图片

 关于组合数据类型,对比观察如下两图:

五、Python 函数和代码复用_第9张图片

五、Python 函数和代码复用_第10张图片

组合数据类型在Python中是由指针来实现的。

五、Python 函数和代码复用_第11张图片

  • lambda函数

一种函数的紧凑表达形式。

五、Python 函数和代码复用_第12张图片

五、Python 函数和代码复用_第13张图片

 注意lambda函数中的<表达式>不是<函数体>

五、Python 函数和代码复用_第14张图片

对于lambda函数 f = lambda x , y : x + y 它的函数名就是f

五、Python 函数和代码复用_第15张图片

 

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

五、Python 函数和代码复用_第16张图片

  • 步骤一

五、Python 函数和代码复用_第17张图片

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)      #为绘制后续的数字确定位置

for i in range(10):
    drawDigit(i)
  • 步骤二
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): #将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('20190223')
    turtle.hideturtle()
    turtle.done()

main()

绘制效果

五、Python 函数和代码复用_第18张图片

  • 步骤三
import turtle,time
def drawGap():        #绘制数码管间隔
    turtle.penup()
    turtle.fd(5)
def drawLine(draw):   #绘制单段数码管
    drawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    drawGap()
    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): #将date字符串中的数字逐个打印
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write('年',font=('Arial',18,"normal"))
            turtle.pencolor("green")
            turtle.fd(60)
        elif i == '=':
            turtle.write('月',font=('Arial',18,"normal"))
            turtle.pencolor("blue")
            turtle.fd(60)
        elif i == '+':
            turtle.write('日',font=('Arial',18,"normal"))
        else:
            drawDigit(eval(i))

def main():
    turtle.setup(800,350,200,200)
    turtle.penup()
    turtle.fd(-350)
    turtle.pensize(5)
    #drawDate('2019-02=23+')
    drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
    turtle.hideturtle()
    turtle.done()

main()

运行结果

五、Python 函数和代码复用_第19张图片

 

5.3 代码复用与函数递归

  • 代码复用与模块化设计

五、Python 函数和代码复用_第20张图片

  • 函数递归的理解

递归:函数定义中调用函数自身的方式。

  • 函数递归的调用过程

递归的实现:函数+分支语句

五、Python 函数和代码复用_第21张图片

  • 函数递归实例解析

 

5.4 模块4:PyInstaller库的使用

  • PyInstaller库的安装

       如果按视频中的方法在cmd中直接输入pip install pyinstaller显示pip' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
的话,可能是没有按默认安装Python路径导致的,应该可以修改环境变量PATH再操作。或者有如下简单方法,pip程序在你Python安装路径中的Scripts目录下,所以在cmd中我们只要切换一下目录就Ok了。比如我的pip在D:\Python372\Scripts下:

五、Python 函数和代码复用_第22张图片

  • PyInstaller库使用说明

PyInstaller是命令行的执行程序,所以在命令行用、

五、Python 函数和代码复用_第23张图片

     上面PyInstaller的使用需要使cmd先进入你PyInstaller安装到的目录即:D:\Python372\Scripts,然后由于我的代码目录为:D:\Python372\PythonWorkPlace\SevenDigitsDrawV3.py,也就是说所以我需要:

 具体实现:

五、Python 函数和代码复用_第24张图片

五、Python 函数和代码复用_第25张图片

  1. 先让命令行进入 D:\Python372\Scripts>
  2. 然后执行命令 pyinstaller -F ..\PythonWorkPlace\SevenDigitsDrawV3.py

 图标关联时注意图标的目录即可。

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

五、Python 函数和代码复用_第26张图片

五、Python 函数和代码复用_第27张图片

  • 科赫曲线的绘制
#KochDrawV1.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(800,400)
    turtle.penup()
    turtle.goto(-300,-50)
    turtle.pendown()
    turtle.pensize(2)
    koch(600,3) # 3阶科赫曲线
    turtle.hideturtle()
main()
  • 科赫雪花的绘制

科赫雪花就是三个科赫曲线做边组成的

五、Python 函数和代码复用_第28张图片

#KochDrawV1.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()
  • 小包裹制作

视频中直接写文件名没有目录的调整是因为图标与程序放在与pyinstaller相同目录下。

  1. C:\Users\17125>D:
  2. D:\>cd Python372\Scripts
  3. D:\>cd Python372\Scripts>pyinstaller -i ..\PythonWorkPlace\snowflake.ico -F ..\PythonWorkPlace\KochDrawV2.py

 

 

你可能感兴趣的:(Python)