python学习笔记 2】控制流、函数

目录

一、三种控制结构

[1. 顺序结构](#1. 顺序结构)

[2. 选择结构](#2. 选择结构)

[3. 循环结构](#3. 循环结构)

[a. range函数](#a. range函数)

[b. break 和 continue 语句](#b. break 和 continue 语句)

[c. 循环的 else 子句](#c. 循环的 else 子句)

二、其他语句

[1. pass语句](#1. pass语句)

[2. match语句](#2. match语句)

三、定义函数

[1. 定义函数](#1. 定义函数)

[2. 局部变量符号表](#2. 局部变量符号表)

[3. 默认值参数](#3. 默认值参数)

[4. 关键字参数](#4. 关键字参数)

[5. 实参列表](#5. 实参列表)

[6. 字典参数](#6. 字典参数)

[7. 函数注解](#7. 函数注解)

四、Python编码风格


一、三种控制结构

1. 顺序结构

  • 从上往下,从左至右。

2. 选择结构

  • 多分支使用elif 关键字, 而不是else if**,** 关键字 'elif' 是 'else if' 的缩写,用于避免过多的缩进。
  • else 部分也是可选的
  • 声明if elif else 后面都有一个 :

3. 循环结构

  • Python中的for循环和其他语言中的增强for循环不同,更像他们中的增强for循环或范围for
  • Python 的 for 语句没有迭代条件不能++。
  • 没有结束循环的判断条件。
  • 只能在迭代器上迭代,按它们在序列中出现的顺序。
  • 声明循环时后面有一个 :

a. range函数

讲到Python的循环就不得不讲到Python中的range函数:

  • 内置函数 range() 用于生成等差数列,结果是一个可迭代对象iterable。
  • 生成的序列绝不会包括给定的终止值,即不包含结尾 ;(记住Python顾头不顾腚就可以了)
    range(10) 生成 10 个值------长度为 10 的序列的所有合法索引。默认从零开始
  • range 默认从0开始,但可以不从 0 开始。(顾头不顾腚)
  • 且可以按给定的步长递增(即使是负数步长)

  • 要按索引迭代序列,可以组合使用 range()len()

b. breakcontinue 语句

  • break 语句将跳出最近的一层 forwhile 循环
  • continue 语句将继续执行循环的下一次迭代

c. 循环的 else 子句

  • forwhile 循环中 如果循环正常结束(不被 break 终结),else 子句将会执行。
  • 在这两类循环中,当在循环不是正常终结else 子句不会 被执行,如breakreturn 或是引发异常,就会跳过 else 子句的执行。
  • 注意循环的else语句不会像C语言那样,和最近的if匹配。在python中是否匹配还有考虑是否在一个层级,上图的else比if少了一个缩进,在更高的层级所以不会和if匹配。

二、其他语句

1. pass语句

pass 语句不执行任何动作。语法上需要一个语句,但程序毋需执行任何动作时,可以使用该语句。

  • 需要一个什么都不做的死循环时,可以使用pass。
  • 需要一个最小的类时可以使用pass。
    class MyClass: pass
  • 需要一个什么都不做的函数时,可以使用pass。
  • pass还可以当作占位符。

2. match语句

match 语句看起来像 C、Java 或 JavaScript(以及许多其他程序设计语言)中的 switch 语句,但其实它更像 Rust 或 Haskell 中的模式匹配。因为它只有第一个匹配的模式会被执行,并且它还可以提取值的组成部分(序列的元素或对象的属性)赋给变量。

  • Python 3.10 版本后引入的。博主的python3.6用不了。(python --version 查看python的版本)
  • match只执行第一个匹配的模式,不存在switch那样的穿透现象。

三、定义函数

1. 定义函数

  • 定义 函数使用关键字 def ,后跟函数名与括号内的形参列表。函数语句从下一行开始,并且必须缩进。
  • 函数内的第一条语句是字符串时,该字符串就是文档字符串,也称为 docstring ,详见 文档字符串。利用文档字符串可以自动生成在线文档或打印版文档,还可以让开发者在浏览代码时直接查阅文档;Python 开发者最好养成在代码中加入文档字符串的好习惯。
  • 函数在 执行 时使用函数局部变量符号表,所有函数变量赋值都存在局部符号表中。
  • return 语句返回函数的值。return 语句不带表达式参数时,返回 None。函数执行完毕退出也返回 None。可以使用 print() 查看它。

2. 局部变量符号表

  • 函数在 执行 时使用函数局部变量符号表,所有函数变量赋值都存在局部符号表中;

  • 引用变量时,首先,在局部符号表里查找变量,然后,是外层函数局部符号表,再是全局符号表,最后是内置名称符号表。因此,尽管可以引用全局变量和外层函数的变量,但最好不要在函数内直接赋值(除非是 global 语句定义的全局变量,或 nonlocal 语句定义的外层函数变量)。

  • 在调用函数时会将实际参数(实参)引入到被调用函数的局部符号表中;因此,实参是使用 按值调用 来传递的(其中的 始终是对象的 引用 而不是对象的值)。 [1] 当一个函数调用另外一个函数时,会为该调用创建一个新的局部符号表。

  • 函数定义在当前符号表中把函数名与函数对象关联在一起。解释器把函数名指向的对象作为用户自定义函数。还可以使用其他名称指向同一个函数对象,并访问访该函数:

    python 复制代码
    >>> def fib(): pass
    >>> fib
    <function fib at 10042ed0>

3. 默认值参数

  • 和C++中的缺省参数的使用规则一致。
  • 定义时从右到左来定义默认值参数。
  • 调用函数时,从左到右传参。
  • 无论是定义还是调用,中间都不允许有空缺值。不允许出现:def fib(a = 1, b, c=3): pass
    和 fib(,3,);这种情况。
  • 和C++的缺省参数不同的是,Python的默认值参数可以用变量来定义:
  • 注意: 默认值只计算一次,即使是使用变量来定义的,他也不会随着变量修改,一直使用的是变量定义时的值。
  • 所以默认值为列表、字典或类实例等可变对象时,会产生与该规则不同的结果。因为默认值参数的值不变,所以每一次调用都使用的是同一个列表、字典或类实例。
  • 如果不想多次调用共享同一个默认值,可以这样写:

4. 关键字参数

  • 关键字参数就是指在调用函数时通过参数名来给参数赋值。这种key=value的形式就叫关键字参数。
  • 关键字参数的作用在于:在函数的参数都有默认值的情况下,我们可以通过关键字参数来指定给某个参数赋值
  • 注意,使用关键字参数必须保证前面的位置参数都已经被赋值。(位置参数就是没有默认值的参数)
  • 有了关键字参数,我们可以在调用函数时不按参数定义的顺序来赋值:

5. 实参列表

  • 可以接收多个值,有点像Java中的可变长参数。
  • 在普通参数的参数名前加一个*,就变成了实参列表,它可以接收多个值。
  • 不像Java中的可变长参数,在Python中对实参列表定义的位置没有要求。但是在实参列表后面的所有普通参数,都只能通过关键字参数的形式来调用。

  • 实参列表生成的是一个元组,可以通过*来解包

6. 字典参数

  • 还有一种可以接收字典的字典参数
  • 定义函数时字典参数必须放在最后面
  • 一个函数只能有一个字典参数:

7. 函数注解

  • 可以在参数后加上**:参数类型**来标注参数类型。
  • 可以在函数声明后加上**-> 返回值类型**来标注返回值类型。
  • 可以通过**函数名.annotations**来获取函数注解。

四、Python编码风格

Python 项目大多都遵循 PEP 8 的风格指南;它推行的编码风格易于阅读、赏心悦目。Python 开发者均应抽时间悉心研读;以下是该提案中的核心要点:

  • 缩进,用 4 个空格,不要用制表符。(不同软件中Tab的空格数是不一样的)

    4 个空格是小缩进(更深嵌套)和大缩进(更易阅读)之间的折中方案。制表符会引起混乱,最好别用。

  • 换行,一行不超过 79 个字符。

    这样换行的小屏阅读体验更好,还便于在大屏显示器上并排阅读多个代码文件。

  • 用空行分隔函数和类,及函数内较大的代码块。

  • 最好把注释放到单独一行。

  • 使用文档字符串。

  • 运算符前后、逗号后要用空格: a = f(1, 2) + g(3, 4)

  • 类和函数的命名要一致;按惯例,命名类用 UpperCamelCase(大驼峰命名法),命名函数与方法用 lowercase_with_underscores(下画线命名法

  • 编写用于国际多语环境的代码时,不要用生僻的编码。Python 默认的 UTF-8 或纯 ASCII 可以胜任各种情况。

  • 同理,就算多语阅读、维护代码的可能再小,也不要在标识符中使用非 ASCII 字符。


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

相关推荐
好想有猫猫3 分钟前
【STM32】定时器介绍&定时中断
c语言·笔记·stm32·单片机·嵌入式硬件
许一世流年 绝不嵩手 cium18 分钟前
python笔记3
开发语言·笔记·python
---wzy---20 分钟前
我的知识图谱和Neo4j数据库的使用
开发语言·python
爱煲汤的夏二31 分钟前
《山海经》:北山
笔记
算力魔方AIPC1 小时前
PyTorch 2.5.1: Bugs修复版发布
人工智能·pytorch·python
DreamByter1 小时前
Day4:生信新手笔记 — R语言简单命令与Rstudio配置
开发语言·笔记·r语言
Joyner20181 小时前
pytorch中有哪些归一化的方式?
人工智能·pytorch·python
Niuguangshuo1 小时前
PyTorch 实现动态输入
人工智能·pytorch·python
禾风wyh1 小时前
【PyTorch】回归问题代码实战
python·算法·机器学习
总有一天你的谜底会解开1 小时前
pytorch加载预训练权重失败
人工智能·pytorch·python