这一章的内容有点多,我也尝试一下这个目录是怎么用的,,哈哈

本章节内容如下

  • 一,前言
  • 二,函数的定义与使用
    • 1,函数的理解与定义
    • 2,函数的使用及调用过程
      • (1)函数的使用
      • (2)函数的调用过程
    • 3,函数的参数传递
    • 4,函数的返回值
    • 5,局部变量和全局变量
    • 6,lambda函数
  • 三,代码复用与函数递归
    • 1,函数复用与模块化设计
      • (1)代码复用
      • (2)模块化设计
    • 2,函数递归的理解
    • 3,函数递归的调用过程
      • 递归的实现
      • 递归的调用过程
    • 4,函数递归实例解析
      • (1)问题简述
      • (2)上代码之代码实现
      • (3)代码分析
  • 四,总结

一,前言

看小说都会有一个前言,我也整一个。
这节内容很多,很多,很多····对我来说也有点难理解。两天看完这块内容,比较赶时间,看的迷迷糊糊。
看目录函数部分比代码部分多,但是我个人感觉函数部分相对容易一些。代码部分仿佛是听天书!

二,函数的定义与使用

1,函数的理解与定义

函数是一段代码的体现,
函数是一段具有特定功能、可重用的语句。
函数是一种功能的体现,一般函数表达特定功能。
两个作用:降低编程难度和代码复用

这段功能可以多次使用,可以多次使用你就不用重复打好几段代码是不是就容易了。

记得上次我画机械猫,我要经常抬起画笔,goto定位,放下画笔,做了一天,就是重复这个动作好几遍。现在再一次审视,是不是就可以节约一点时间,大部分时间。

2,函数的使用及调用过程

听起来高大上,应该怎么用呢?

(1)函数的使用

def <函数名>(<参数(0个或多个)>):<函数体>return <返回值>

我们就一我是说的机械猫举个栗子

import turtle
def cat(n, m):turtle.penup()turtle.goto(n, m)turtle.pendown()turtle.fd(50)

但是呢。。。发现了吗没有返回值return,大佬自然懂,小白接着看!
还记得这个公式吗:y = f(x)中学阶段学的
函数定义时,所指的参数是一种占位符。
函数定义后,如果不经过调用,不会被执行。
函数定义时,参数是输入,函数体是处理,结果是输出(IPO)

(2)函数的调用过程

还是那个机械猫

import turtle
def cat(n, m):turtle.penup()turtle.goto(n, m)turtle.pendown()turtle.fd(50)
cat(10,100)

函数的调用

cat(10,100)

调用时要给出实际参数
实际参数代替定义中的参数
调用后得到返回值

做了个图
怎么看呢,听我分解。
cat(20, 100)作为实际参数,于是开始自动执行,程序会自动代替我们的参数(n, m)函数体开始解析代码,之后返回。

3,函数的参数传递

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

def <函数名>():<函数体>return <返回值>

函数定义时,可以为某个参数定义一个值,构成可选参数

def <函数名>(<非可选参数>, <可选参数>):<函数体>return <返回值>

机械猫又来了
还是那个机械猫

import turtle
def cat(n, m=100):turtle.penup()turtle.goto(n, m)turtle.pendown()turtle.fd(50)
#调用
>>>cat(50)
>>>cat(50, 100)#他俩的位置相同

函数定义时可以设定可变参数的数量,就是不确定参数的数量

def <函数名>(<非可选参数>, *b):<函数体>return <返回值>

这个就不可以把机械猫当例子了
定义一个求和函数

咦!这是为什么,我还是从前那个少年,技术没有发生一丝改变,我还是多设定参数吧。
函数调用时,可以参数可以按照位置或名称方式传递
还是机械猫

#调用函数
>>>cat(50, 100)#以位置方式调用
>>>cat(n=50, m=100)#以方式调用

4,函数的返回值

函数可以返回0个或多个结果,
return保留字来传递f返回值
函数可以有返回值、也可以没有;所以return保留字也是可有可无
return可以返回0个值,也可以返回多个值

5,局部变量和全局变量

函数里的变量可不可以和全局中的变量一致,一致会怎么样,
先说一下两个名词局部变量、全局变量,
局部变量:函数内部的变量
全局变量:代码中的变量

局部变量是函数内部的占位符,与全局变量可以同名但是作用不用 。
运算结束后局部变量会被释放。
可以用global保留字在函数内部来使用全局变量


奇怪,这又是怎么回事,总而言之global保留字介绍是没错,估计我还不会书写格式
使用规则
在基本数据类型中无论是否重名,局部变量和全局变量不同。
可以通过global保留字在函数内部声明全局变量
在基本组合类型中,如果局部变量未真实创建,则是全局变量

6,lambda函数

lambda函数是一种匿名函数,也就是没有名字
用lambda保留字定义,返回值就是函数的名字
lambda用于定义简单、可以在意行表达的函数

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

就像

>>>f = lambda x,y,z:x*y+z
>>>a = f(1, 2, 3)
>>>print(a)
5

是不是像if-else二分支语句的简约形式

三,代码复用与函数递归

1,函数复用与模块化设计

(1)代码复用

把代码当成一种资源进行抽象
代码资源化:程序代码是一种用来表示计算的“资源”
程序抽象化:使用函数等方法对代码赋予更高级别的定义
代码复用:同一份代码在需要时可以被重复使用

我就明白了第四句,一段一段的代码可以重复使用。
个人猜测第二句第三句的意思是说把代码当作资源,可以实现各种我想要的,比如我的机械猫绘制。想要实现这些,有资源是远远不够的,还要对代码上使用函数、方法。pow()函数、.format()方法 等等·,这样就可以实现。

函数和对象是代码复用的主要形式
函数:将代码名命,在代码层面建立了初步抽象。
对象:属性和方法,<a>.<b><a>.<b>()在函数之上再次组织 进行抽象

(2)模块化设计

分而治之
通过函数或对象封装将程序划分为模块及模块间的表达
具体包括:主程序、子程序和子程序间的关系
分而治之:一种分而治之、分层抽象、体系化的设计思想

紧耦合、松耦合
紧耦合:两个部分之间交流很多,无法独立存在。
松耦合:两个部分之间交流很少,可以独立存在
模块内部紧耦合、模块之间松耦合

怎么理解
还是以我的机械猫为例吧
一个好的程序一定有很多功能 ,程序也有艺术,写出一段漂亮的代码一定很有成就感。就这两点而言我就喜欢一个功能一段函数,或是一个空格,逻辑清晰。这里指的应该肯定是函数。一段函数与一段的函数是否强烈,我离不开你或者说你在不在无所谓。这时就出现了紧耦合、松耦合。随之他们的概念也就此
我就是慢慢这样理解的。我感觉我理解的至少有一半是对的。

2,函数递归的理解

定义:函数定义中调用自身的方式
两个关键特征
链条:计算过程中存在递归链条
基例:存在一个或多个不需要再次递归的基例

类似数学的归纳法
证明当N取第一个值N1命题成立?
假设当Nr时命题成立,证明N=Nr+1命题也成立
递归是数学归纳法思维的体现

怎么说
数学归纳法对我有点陌生,不好理解
程序之间计算的过程,上一步与下一步、下一步与下下一步之间的互动,他们就构成了链条
基例,最基础的实例,就像当y=f(x)中x=0时y也=0
可能也不是

3,函数递归的调用过程

递归的实现

函数+分支语句
递归本事是一个函数,需要函数定义方式描述
函数内部采用分支语句对输入参数进行判断
链条和基例分别编写对应代码

递归的调用过程

1,

2,

这个流程怎么解释呢
看第一张图先调用函数fact (5)就是n=5,之后开始执行,判断n是否为0,因为不是0则不会返回1,。而是开辟一段新的内存运行fact(n-1)=4,n=4的值,以此类推,直到n=0时,接下来看第二张图,n=0时返回1,在第五步的n=1,则11=1;在第四步,n=2,则12=2
以此类推,得出120

4,函数递归实例解析

我们一起聊一聊汉诺塔的问题

(1)问题简述

就是说在你前面有三根柱子,在柱子以上由大到小排列的N个圆盘,问题来了,把柱子一上的圆盘移动到柱子三上需要多少步?当然,,有一个圆盘、两个圆盘、三个圆盘这种情况就比较好解决,动手能力比较强的小朋友也可解决,一下子给你一百个呢,慢慢弄,也行;但是用程序呢?

(2)上代码之代码实现

count = 0#计算需要的步骤
def hanoi(n, src, dst, mid):#此处参数分别是:圆盘数量;源柱子;目标柱子;辅助柱子global countif `n == 1`:print("{}:{}->{}".format(1,src,dst))count += 1else:hanoi(n-1, src, mid, dst)print("{}:{}->{}".format(n,src,dst))count += 1hanoi(n-1, mid, dst, src)

调用这段代码

hanoi(5,"源柱子A","目标柱子C","辅助柱子B")
print(count)

(3)代码分析

首先这段代码符合函数递归,因为有函数还有分支语句、基例、链条。
if n == 1:判断当源柱子只有1个柱子,直接移动到目标柱子。count步骤一步到位。
当不是一根柱子时,此时需要把n-1圆盘子移动到辅助柱子,思考一下,5个圆盘中有4个圆盘必须有个过渡,放到辅助柱子上,是不是?因此hanoi()函数参数位置发生了变化。计算出步骤
那好,辅助柱子上的圆盘是不是就不用管了,No!移动到目标柱子,因此hanoi()函数参数位置有一次发生变化。
就这样结束了。

四,总结

这部分内容虽然有点多,但是在告诉我们如何写成高质量的代码。使你的代码一目了然。但是写出高质量代码还是有很多知识在背后支撑,还是、紧耦合、松耦合····还是尤为重要。

但这里就结束了,这章知识用了四天时间。在前言中我提到了这部分的知识我不太理解 ,我也是反复看视频,在回来写得博客。比开始写有一次加深。在这篇博客中我加了许多个人观点,我自己理解的,如果您有更好的观点,欢迎评论。一群人的学习效率远远大于一个人的学习效率,我是这样觉得。

也不是想让更多人看见,我只是喜欢通过这种方法记笔记,加深印象。我自己是不喜欢写字的,字写得也很丑。当然如果帮到你了,我很荣幸。

哈哈哈嗝

python之函数和代码复用笔记相关推荐

  1. Python| 阿尔法函数和代码复用

    目录 打招呼函数 能否组成三角形函数 计算n个自然数的立方和 简单计算器实现 转换秒为时间 最大公约数 杨辉三角 线性查找 七段数码管绘制 斐波那契数列计算 汉诺塔实践 合法的用户名 科赫雪花小包裹 ...

  2. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  3. python中组合数据类型、函数和代码复用的难点_Python电子教案5-2 函数和代码复用...

    <Python电子教案5-2 函数和代码复用>由会员分享,可在线阅读,更多相关<Python电子教案5-2 函数和代码复用(56页珍藏版)>请在人人文库网上搜索. 1.七段数码 ...

  4. Python基础(三)_函数和代码复用

    三:函数和代码复用 (一)函数的基本使用 1.函数的定义 函数是一段具有特定功能的.可重用的语句组,用函数名来表示并通过函数名进行功能调用.函数也可以看作是一段具有名字的子程序,可以在需要的地方调用执 ...

  5. 测验5: 函数和代码复用 (第5周)

    测验5: 函数和代码复用 (第5周) 文章目录 测验5: 函数和代码复用 (第5周) 单选题 程序题 这是python123官网上联合MOOC的Python程序设计(第10期)答案 单选题 第三题补充 ...

  6. 第 5 章 函数和代码复用

    整理的文章内容主要来源为高教版<计算机等级考试二级 Python>教程视频讲义,并且更正了原讲义中的错误的地方. 专栏文章索引如下: 考试大纲 第 1 章 程序设计基本方法 第 2 章 P ...

  7. 第五章 函数和代码复用

    第五章 函数和代码复用 5.1 函数的基本使用 5.1.1 函数的定义 定义:函数是一段具有特定功能的.可重用的语句组,用函数名来表示并通过函数名进行功能调用. 使用函数的目的:降低编程难度和代码重用 ...

  8. 函数和代码复用之实例解析:软文的诗词风

    @TOC函数和代码复用之实例解析:软文的诗词风 人生苦短,我学Python 朋友圈已经是现代人生活中的一种社交形态,朋友圈里面的各种软文也体现了语言风格的变化.为了便于手机阅读,很多软文常常会使用一种 ...

  9. python通过封装可以实现代码复用_Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

最新文章

  1. AgileEAS.NET平台应用开发教程-案例计划
  2. java gridout_GridBagLayout 布局 的行列概念以及gridx,gridy失效?
  3. 谁说程序员不懂爱情【Her】
  4. 几何画板中该如何插入公式
  5. 了解计算机技术的课件,了解计算机课件.ppt
  6. 成功解决Initialization failed for ‘https://start.spring.io‘ Please check URL, network and proxy settings
  7. 企业微信在线客服机器人系统开发
  8. 如何用计算机函数来求加权总分,根据等级加权计算总分--SUMPRODUCT和LOOKUP函数的组合...
  9. Google Scholar 谷歌学术文献检索技巧总结
  10. RGB,CMYK,HSB,LAB颜色空间定义
  11. 一个轻量的Linux运维监控脚本
  12. 平均增长率不用计算机,官方数据:平均增长率计算公式如何使用excel计算平均增长率...
  13. Android Bitmap 保存图片透明背景变黑色背景
  14. vm12装xp系统步骤
  15. 汉客儿2019支付宝加密红包设计思路
  16. IPv6基础介绍及常用命令盘点
  17. 互联网人工智能下的OCR文字识别
  18. ~1 ccf 2022-06-2 寻宝!大冒险!
  19. 知衣科技:夫妻搭档,创业是件骨子里的事
  20. python 浮点数类型

热门文章

  1. 女生学ui设计怎么样?有没有发展前景?
  2. 基于微信小程序的闲置物品捐赠及回收平台小程序-计算机毕业设计
  3. 银联支付-手机网页支付接口开发
  4. 蓝桥杯——2017第八届C/C++真题[省赛][B组]
  5. tensorflow2视力表E字符(学习笔记)--制作自己的数据集
  6. The simplest way to get started with Stable Diffusion on Ubuntu
  7. 10. POP3收取邮件
  8. TypeScript中的感叹号
  9. 西门子PLC1215C与KTP700HMI创建配方设置实例
  10. python设计一个学生类求最高分_Python练习:计算每个学生的最低和最高分数。