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 你们爱吗
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容