第八讲-for循环以及函数

在这里插入图片描述

顺序执行

python代码在执行过程中,遵循以下基本原则

  • 普通语句,直接执行;
  • 碰到函数,将函数体载入内存,并不直接执行;
  • 碰到类,执行类内部的普通语句,但是类的方法只载入,不执行;
  • 碰到if、for等控制语句,按相应控制流程执行;
  • 碰到@,break,continue等,按规定语法执行;
  • 碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码。

程序的主入口

python程序是从上而下逐行运行的,在.py文件中,除了def后定义函数外的代码都会被认为是“main”方法中的内容从上而下执行。一个 .py,除了可以被直接运行外,还可以作为模块,被其他 .py文件导入。不管是直接运行还是被导入,.py 文件的最顶层代码都会被运行。但是当一个 .py 文件作为模块被导入时,我们可能不希望一部分代码被运行。那么就可以将这部分代码的调用写在主程序中。需要在.py文件中写上if name == “main”,再调用函数。

条件判断

条件判断是通过一条或多条判断语句的执行结果(True 或者 False)来决定执行的代码块。在Python 语法中,使用 if、elif 和 else 三个关键字来进行条件判断。

条件判断的使用原则

  • 每个条件后面要使用冒号作为判断行的结尾,表示接下来是满足条件(结果为True)后要执行的语句块。
  • 除了if分支必须有,elif和else分支都可以根据情况省略。
  • 使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
  • 顺序判断每一个分支,任何一个分支首先被命中并执行,则其后面的所有分支被忽略,直接跳过!
  • 可以有多个elif ,但只能有一个else。
  • 在Python中没有switch – case语句。

条件判断的嵌套

if…elif…else 语句可以嵌套,也就是把 if…elif…else 结构放在另外一个if…elif…else 结构中。

循环控制

什么是循环控制

循环控制,就是让 程序循环运行某一段代码 直到 满足退出的条件,才 退出循环。python中是用for和while语句来进行循环控制。

while循环表达式

当程序从上至下执行时,遇到while循环语句,则会判断表达式是否成立 ,当成立时则会进入while循环体内,执行循环体内部执行的代码块。直到判断表达式不成立时 ,则终止循环。

break与continue语句

  1. break语句:当循环体执行的过程中想要退出循环体,就可以使用到break语句。
  2. continue语句:continue语句用于跳过当前循环体剩余部分的代码,直接开始下一轮循环。它不会退出和终止循环。

while的else从句

while循环还可以增加一个else从句。当while循环正常执行完毕,会执行else语句。
需要注意的是:

  • else与while平级的缩进方式。
  • 如果是被break等机制强制提前终止的循环,不会执行else语句。

while的嵌套语句

while可以嵌套。但是建议不要嵌套3层以上,那样的效率会很低。

for循环表达式

虽然与while一样都是循环的关键字,但for循环通常用来遍历可迭代的对象。

break 与 continue 语句

在while循环中,拥有break与continue语句,那for循环中也有break与continue语句,并且作用一致。

函数

函数的介绍

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数的作用

提高 应用的模块性 与 代码的复用性

自定义函数

定义规则:

  • 函数代码块以 def 关键词 开头 ,后接 函数标识符名称 和 圆括号()
  • 圆括号中间 可以 放入参数
  • 函数内容以 冒号 起始,并且 缩进。
    需要注意的是函数只有在调用的时候才会执行。

函数的参数

形参与实参

  • 形参:形参就是函数定义中的参数,没有实际的值,通过别人赋值后才有意义,相当于变量。
  • 实参:实参就是调用函数时传入的参数,是一个实际存在的参数。

可变类型参数与不可变类型参数:

  • 可变类型参数:在函数体内可以改变原有的值。
  • 不可变类型参数:在函数体内对变量重新赋值,相当于重新开辟了一块内存来保存值。

位置参数

位置参数也就是实参与形参顺序一一对应,而不论变量名。

关键字参数

以形参 = 实参形式指定,不论参数位置。

默认值参数

形参处进行赋值,所以当调用时不传该参数就默认使用形参处的值。当调用时传了该参数,则覆盖掉默认参数。

可变长度参数

  • 一个星号:函数可以接收任意个数的参数,只需要在形参前面加一个*(星号),一个星号形参的函数会把多个位置参数值当成元祖的形式传入,也就是传入的多个参数值可以在函数内部进行元祖遍历。
  • 两个星号:形参前面加两个*(星号),注意是两个星号哦,两个星号形参的函数会把关键字参数值当成字典的形式传入,在函数内部会把关键字参数当成字典在函数内部进行遍历。

函数的返回值的介绍

当两个函数之间,想要互相使用到内部变量时,就可以应用到函数的返回值。

函数的返回值的定义

  • 使用return关键字返回内容。
  • 将内容返回到函数调用处。
  • 函数体中没有 return 语句时,函数运行结束,则默认返回 None,也被称为隐含返回值。

函数多个返回值

  • 当执行函数体内代码时,遇到第一个 return 就将指定值返回到函数调用处,也就是执行到return这行代码,后面的都不执行了。
  • 多个返回值时,用逗号隔开,但默认为元组。

函数的作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的作用域一共有4种,分别是:

  • L(local):局部作用域,即函数中定义的变量;
  • E(enclosing):嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
  • G(global):全局变量,就是模块级别定义的变量;
  • B(build-in):内建作用域,系统固定模块里面的变量,比如:int()等;

global关键字

当我们需要在函数内部直接修改全局变量时,我们可以将函数内部的局部变量通过 global 关键字声明为全局变量。

函数作用域的优先级

函数中作用域越大,优先级越小,反之,作用域越小,优先级越大。
优先级从高到底依次为:local>enclosing>global>build-in

递归函数

递归函数的介绍

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归函数特性:

  • 必须有一个明确的结束条件;
  • 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
  • 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
  • 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

需要注意的是:

  • 递归函数自身没有结束条件,所以需要我们自己设置结束条件,终止函数的调用。
  • 可以使用递归实现的循环都可以实现,并且递归效率很低,所以递归很少使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值