第三章 过程大于结果

3.1 懒人炒菜机

3.1.1 函数是什么

  • 集合的对应关系
  • 数据转换的魔法盒子
  • 语句的封装。输入数据被称为参数,参数能影响函数的行为。


3.1.2 定义函数

def 函数名(参数):
    <执行>
    return [表达式]

  • 用关键词def开头。
  • 参数可以有多个,也可以完全没有,但括号也要保留。
  • 函数定义中的参数是一个形式代表来指代输入数据,并非真正数据,所以又称为形参
  • 当函数被调用时,Python将执行从属于函数的语句,直到从属语句结束。
  • 关键字return用于说明函数的返回值,即函数的输出数据。还起到了中止函数和制定返回值的功能。
  • 函数执行到return时就会结束,不管它后面是否还有其他函数定义语句。
  • return后面没有返回值时,则函数将返回None。None是Python中的空数据,用来表示什么都没有。
  • 关键字return返回多个值时等价于返回一个有多个数据的元组。


3.1.3 调用函数

  • 直接使用函数名,在括号里加入具体的参数。此时的参数是一个实际的数据。所以,在函数调用时出现的参数称为实参
  • 如果一个函数有其他返回值,那么我们可以获得这个返回值
  • Python通过参数出现的先后位置来对应形参。
  • 参数可以是程序中已经存在的变量。


3.2 参数传递

3.2.1 基本传参

参数传递:把数据用参数的形式输入到函数。

位置传参:若有多个参数,那么在调用函数时,Python会根据位置来确认数据对应哪个参数。

关键字传参:在定义函数时,我们给了形参一个符号标记,即参数名。根据参数名来让数据与符号对应上。

混合使用:一部分的参数传递根据位置,另一部分根据参数名。在所有的位置参数都要出现在关键字参数之前。

形参默认值:调用时若不提供这些形参的具体数据,那么它们将采用定义时的默认值。


3.2.2 包裹传参

包裹传参:在不知道参数的个数时使用。

包裹位置传参:在调用函数时,所有的数据都根据先后顺序,收集到一个元组。 在函数内部,我们可以通过元组来读取传入的数据。定义函数时在元组名前加*号。

包裹关键字传参:与包裹位置传参相似,但数据容器为字典。每个关键字形式的参数调用,都会成为字典的一个元素。参数名成为元素的键,而数据成为元素的值。定义函数时在字典名前加**。

混合使用

  • 包裹位置传参和包裹关键字传参混合使用:定义函数时先写*元组名再写 **字典名。
  • 包裹传参和基本传参混合使用: 先后顺序 位置→关键字→包裹位置→包裹关键字


3.2.3 解包裹

解包裹:把一个数据容器传递给函数,再自动地分解为各个参数。

  • 在序列名前加*号。
  • 在词典前加**号,每个键值对作为一个关键字传递给函数。
  • 混合使用原则:位置→关键字→位置解包裹→关键字解包裹。


3.3 递归

3.3.1 高斯求和与数学归纳法

高斯求和公式:1+2+3+4+……+ n = (n+1)n /2

递归:在一个函数定义中,调用了这个函数自身。

  • 关键是说明紧邻的两个步骤之间的衔接条件。
  • 要求程序有一个能够达到的终止条件防止死循环。

数学归纳法
证明某个命题对于自然数n成立:
1.证明命题对于n = 1成立。
2.假设命题对于n成立,n为任意自然数,则证明在此假设下,命题对于 n+1成立。
命题得证。


3.3.2 函数栈

数据结构:计算机存储数据的组织方式。

:数据结构的一种,可以有序地存储数据。后进后出。

:栈的元素。

弹出 pop:取出栈顶元素。

推入 push:将一个新的元素存入栈顶。

程序运行:先增长栈后消灭栈。每次函数调用,都伴随着一个帧入栈。如果函数内部还有函数调用,那么又会多一个帧入栈。当函数返回时,相应的帧会出栈。等到程序的最后,栈清空,程序就完成了。


3.3.3 变量的作用域

  • Python寻找变量的范围不止是当前帧。它还会寻找函数外部,也就是Python的主程序中定义了的变量。
  • 当主程序中已经有了一个变量,函数调用内部可以通过赋值的方式再创建了一个同名变量。函数会优先使用自己函数帧中的那个变量。且函数内部使用的是自己内部的那一份,所以函数内部对变量的操作不会影响到外部同名变量。
  • 在函数调用时,会把数据赋值给变量。等到函数返回时,这些参数相关的变量会被清空。
  • 对于数据容器来说,函数内部的更改会影响到外部。


3.4 引入那把宝剑

3.4.1 引入模块

模块:是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。能定义函数,类和变量,模块里也能包含可执行的代码。是比函数更高一层的封装模式。

引入 import:引入模块,调用其他文件中的函数或数据。


3.4.2 搜索路径

:具有相关功能模块的集合。

  • 标准库:Python官方提供的库。
  • 第三方库:由其他的第三方机构发布提供的库。

寻找库的路径

  • 当前文件夹。
  • 标准库的安装路径。
  • 操作系统环境变量PYTHONPATH所包含的路径。可以修改PYTHONPATH这个环境变量,当PYTHONPATH包含模块所在的路径时,Python便可以找到那个模块。


3.5 异常处理

3.5.1 恼人的bug

bug:程序缺陷,会引发错误或者意想不到的后果。

运行时错误:只有在运行时编译器才会发现的错误。。由于Python是动态语言,许多操作必须在运行时才会执行,因此,Python要比静态语言更容易产生运行时错误。

语义错误:编译器认为你的程序没有问题,可以正常运行。但当检查程序时,却发现程序并非你想做的。


3.5.2 Debug

debug:修改程序缺陷的过程。

  • 在程序内部插入简单的print()函数,就可以查看变量的状态以及运行进度。
  • 将某个指令替换成其他形式,看看程序结果有何变化,从而验证自己的假设。

3.5.3 异常处理

异常处理

  • 让程序中止前进行更多的操作,比如提供更多的关于错误的信息。
  • 是让程序在犯错后依然能运行下去。

try:
    ...
except exception1:
    ...
except exception2:
    ...
else:
    ...
finally:
    ...

  • 如果try中有异常发生时,将执行异常的归属,执行except。异常层层比较, 看是否是exception1、exception2……直到找到其归属,执行相应的except中的 语句。如果try中没有异常,那么except部分将跳过,执行else中的语句。
  • finally是无论是否有异常,最后都要做的一些事情。
  • 如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理。
  • 如果无法将异常交给合适的对象,那么异常将继续向上层抛出,直到被捕捉或者造成主程序报错

raise:在程序中主动抛出异常。

代码地址:https://gitee.com/sibyltui/learn_programming_from_python

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

推荐阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,581评论 1 19
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,076评论 1 32
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,703评论 0 38
  • 有一种预感,以后的日更内容,“随笔”这样的题目会多起来。 情绪,情感是非常有用的,力量也很强大。但如果是以提升自己...
    来是春初阅读 230评论 0 1
  • 这是一个小故事。 从前,有一个商人,牵着马和驴去赶集。当他们从集市上回来的时候,就买了很多的物品。这些物品都压在了...
    不信蜜糖变信盐阅读 931评论 0 0