PYTHON专题:5-函数和代码复用

函数的定义和使用

函数的理解与定义

    1)理解

        函数是一段具有特定功能的、可重用的语句组;是一种功能的抽象,表达特定功能

        两个作用:降低编程难度 和 代码复用

    2)定义

        def <函数名>(<一个或多个参数>):

            <函数体>

            return <返回值>

函数的使用及调用过程

    1)调用时要给出实际参数

    2)实际参数替换定义中的参数

    3)函数调用后得到返回值

函数的参数传递

    1)n的阶乘: n!=1×2×3×...×n

    2)函数可以有参数,也可以没有,但必须保留括号

    3)可以为某些参数提供默认值,构成可选参数,可选参数放在必选参数后面

        def fact(n, m=1)

    4)函数定义时可以设计可变数量参数,既不确定参数总数量

        def <函数名>(<参数>, *b)

            <函数体>

            return <返回值>

    5)函数调用时,参数可以按照位置或名称方式传递

函数的返回值

    1)return保留字用来返回传递返回值

    2)函数可以有返回值,也可以没有,可以有return,也可以没有

    3)return可以传递0个返回值,也可以传递多个返回值

    4)用元组方式返回多个值

局部变量和全局变量

    1)程序:全局变量,函数:局部变量

    2)规则1:局部变量和全局变量是不同变量

        局部变量是函数内部的占位符,与全部变量可能重名但不同

        函数运算结束后,局部变量被释放

        可以使用global保留字在函数内部使用全局变量

        在函数中global s :声明此处s是全局变量s

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

        如果一个组合数据类型,在函数中被真实创建了,那就是这个函数的局部变量

lambda函数

    1)lambda函数是一种匿名函数,即没有名字的函数

    2)使用lambda保留字定义,函数名是返回结果

    3)lambda函数用于定义简单的,能够在一行内表示的函数

        <函数名> = lambda <参数>: <表达式>

        f = lambda x, y : x+y

    4)lambda函数主要用作一些特定函数或方法的参数



实例七:七段数码管绘制

用python绘制带有七段数码管风格的时间

    1)基本思路

        a)绘制单个数字对应的数码管

            七段数码管由7个基本线条组成

            七段数码管可以有固定向右的顺序

        b)获得一串数字,分别绘制对应的数码管

            不同数字显示不同的线条

        c)获得当前系统时间,绘制对应的数码管

            使用time库获得时间

            增加年月日标志

            年月日颜色不同

举一反三

    模块化思维:确定模块接口,封装功能

    规则化思维:抽象过程为规则,计算机自动执行

    化繁为简:将大功能变为小功能组合,分而治之

应用问题扩展

    绘制带小数点的七段数码管

    带刷新时间的倒计时效果

七段数码管


七段数码管程序



代码复用与函数递归

代码复用与模块化设计

    1)把代码当成资源进行抽象

        代码资源化:程序代码是一种用来表达计算的“资源”

        代码抽象化:使用函数等方法对代码赋予更高级别的定义

        代码复用:同一代码在需要时可以被重复使用

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

       函数:将代码命名在代码层面建立了初步抽象

        对象:属性和方法,在函数之上,进一步进行抽象

    3)分而治之

        通过函数或对象封装将程序划分为模块及模块间的表达

        具体包括:主程序、子程序和子程序之间的关系

    4)模块设计的两个基本概念

        紧耦合:两个部分的交流很多,无法独立存在

        松耦合:两个部分的交流很少,可以独立存在

        模块内部紧耦合,模块之间松耦合

函数递归的理解

    1)调用函数自身的方式就是递归

    2)两个关键

        链条:计算过程中存在递归链条

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

    3)递归的定义

        类似数学归纳法

            证明当n取第一个值n0时命题成立

            假设当nk时命题成立,证明当n=nk+1时命题成立

函数递归的调用过程

    递归的实现

        函数+分支语句

            递归本身是一个函数,需要函数定义方式描述

            函数内部,采用分支语句对输入参数进行判断

            基例和链条,分别编写对应代码

函数递归实例解析

    1)字符串反转

            s[::-1] #从最开始到最后采用-1的步长输出

            用递归方法

字符串反转

    2)斐波那契数列

        F(n)

            1 , n=1

            1 , n=2

            F(n-1) + F(n-2) , otherwise

斐波那契数列

    3)汉诺塔问题

        输出两个参数

            给定数量的圆盘从最左侧搬到最右测需要多少步骤

            该怎么搬运

        进一步抽象,三个柱子A,BC

            初始状态,所有盘子都在A,最终目的搬到C

汉诺塔

模块4:PyInstaller库的使用

概述:将.py源代码转换成无需源代码的可执行文件

    1)是一个第三方库

    2)可以使用pip工具安装

        (cmd命令行)pip install pyinstaller

    3)简单使用

        (cmd命令行)pyinstaller -F <文件名.py>

常用参数

    -h:查看帮助

    --clean:清理打包过程中的临时文件

    -D,--onedir:默认值,生成dist文件夹

    -F, --onefile:在dist文件夹只生成独立的打包文件

    -i <图标文件名.icon> :指定打包程序使用的图标文件


实例8:科赫雪花小包裹

分形几何:是一种迭代的几何图形,广泛存在于自然界中。

    科赫曲线,也叫雪花曲线

科赫雪花绘制

    1)用Python绘制科赫曲线

        去3/1长,绘制成60度凸起

        不停重复上一步的过程,形成科赫曲线

    2)绘制n阶科赫曲线线段

        递归思想:函数+分支

        递归链条:线段的组合

        递归基例:初识线段

科赫雪花的绘制

科赫雪花

打包科赫雪花小程序

    pyinstaller

举一反三

    修改分形几何的绘制阶数

    修改科赫曲线的基本定义及旋转角度

    修改绘制科赫雪花的基本框架图形

分型几何千千万万

    康托尔集、谢尔宾斯基三角形、门格海绵

    龙形曲线、空间填充曲线、科赫曲线




Cindy 你们爱吗
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容