Python-3.程序结构

砂糖桑
Aug 12, 2022
Last edited: 2022-8-14
type
Post
status
Published
date
Aug 12, 2022
slug
python-3
summary
和其他编程语言一样,Python程序的结构包括顺序、选择与循环结构。虽然不同语言的程序结构都是相通的,但是Python中还有很多自己的用法,比如for循环就和C++中for(;;)的用法差别较大(倒是比较像for(auto i:))。这些不同点需要重视。
tags
Python课堂笔记合集
category
Python
icon
password
Property
Aug 14, 2022 11:17 AM
本篇主要介绍Python程序的顺序结构与选择结构、循环结构的用法。顺序结构这里主要补充一些基础的知识,如格式化输出等,选择结构主要讲if语句,循环结构主要讲for语句和while语句。

顺序结构

和C程序的入口是main函数不同,Python是一种脚本语言。它从上到下执行各条语句,可以把在命令行中分开执行的语句整合到一个Python脚本中。

语句行

  1. Python命令行中的语句必须从解释器提示符的第一列开始,前面不能有空格,不然会报错。
    1. notion image
  1. Python脚本中的每行代码也必须顶格(tab的除外),每个语句行以回车符结束。
  1. 可以在同一行中写多条语句,语句之间使用分号分隔
  1. 如果一条语句写在一行太长,可以使用反斜杠\(续行符)换行
    1. notion image
  1. 如果在括号内需要换行,则不需要使用续行符,如
    1. def func( ):return 120
      就是一个正确的函数定义。

注释

Python中的注释包括单行注释和多行注释。
  1. 单行注释以#开头,后面的内容全是注释。
  1. 多行注释其实就是多行的字符串。它常常作为函数或类的说明,可以通过调用 函数名.__doc__ 来查看这个多行字符串说明。一般的编辑器也会将它作为函数或类的提示。而如果将多行注释放在脚本的地方,就会将它作为字符串输出
    1. notion image
  1. 多行注释也可以采用每行开始一个#的方式。2和3两种注释方式的适用场景不同。
  1. 注释的添加也需要遵守一定的规范:
    1. 一目了然的代码,不需要添加注释
    2. 一个代码可能不是那么一目了然,如链式赋值,则在行后添加注释#
    3. 一系列复杂的操作,应该在操作开始前写上相应的注释
Python代码注释规范代码实例解析
注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。 注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。 在有处理逻辑的代码中,源程序有效注释量必须在20%以上。 行注释:在符号后那一行不会被编译(显示) 块注释:被块注释符号中间的部分不会被编译 Python中使用#表示单行注释。单行注释可以作为单独的一行放在被注释代码行之上,也可以放在语句或表达式之后。如下例子: name = 'xiaohong' # 单行注释# 单行注释name = 'xiaohong' Python中使用三个单引号或三个双引号表示多行注释。用在注释多写不下的情况,如下例子: 4.1 DocStrings介绍 是一个重要工具,用于解释文档程序,帮助你的程序文档更加简单易懂 4.2 python中使用DocStrings 在函数体的第一行使用一对三个单引号 ''' 或者一对三个双引号 """ 来定义文档字符串。你可以使用 doc(注意双下划线)调用函数中的文档字符串属性。 编写示例如下: def add(num1,num2): """ 完成传入的两个数之和 :param num1: 加数1 :param num2: 加数2 :return: 和 """ return num1 + num2 print( add.__doc__ ) 备注:DocStrings 文档字符串使用惯例:它的首行简述函数功能,第二行空行,第三行为函数的具体描述。 这是现在流行的一种风格,reST风格,Sphinx的御用格式,比较紧凑。 """ This is a reST style.
Python代码注释规范代码实例解析

赋值语句

  1. 使用=进行赋值。Python的赋值其实就是将变量指向解释器为相应值分配的空间。所以Python的赋值是动态的:①不需要声明变量类型 ②变量的类型随着值动态变化。
  1. 复合赋值。复合赋值运算符包括:+=、-=、*=、/=、//=、%=、**=、 <<=、>>=、&=、|=、^=。
  1. 多变量赋值链式赋值的写法:var1=var2=var3=……=值。它的作用是为多个变量赋同一个值。这种赋值方式的优点是所有变量都指向同一个值(地址相同),这样可以减少空间的开销。
    1. notion image
  1. 同步赋值。它的格式为var1,var2……=值1,值2……。赋值的规则是先计算出右边的值,再将右边的值从值1开始一一对应地赋值给左边的变量。这种赋值方式与按顺序拆分为多条简单的赋值语句不同:
    1. notion image

标准输入

使用 input([提示字符串]) 的方式实现标准输入,它接收到用户来自键盘的输入后,以字符串的形式返回这个输入。
notion image
后续的处理有两种:
  1. 对返回的字符串进行强制类型转换
  1. 使用eval函数获取原生的输入
    1. notion image
两种处理方式的区别是eval的适用面更广,如可以将一个表达式作为输入。

标准输出与格式化输出

标准输出使用到的函数为print()。它的格式为 print(输出项1,输出项2,……,sep=[分隔符],end=[结束符])
  1. 输出项可以是变量,也可以是数字、字符串甚至表达式。
  1. 分隔符就是各输出项之间分隔的符号。默认的分隔符是空格
  1. 结束符就是输出结束的符号。默认的结束符是回车
    1. notion image
print可以实现要求比较低的格式化,但是格式化要求比较高的时候,就要使用专门的格式化输出。
  1. 使用字符串格式化运算符%
    1. 这是比较旧的格式化输出方式,一方面用的人还比较多,另一方面正在逐渐被淘汰。不建议使用,但需要明白用法。
      • 使用%分隔格式字符串与输出项,格式为格式字符串%(输出项1,输出项2……)
      • 格式字符串普通字符格式说明符组成,类似于C语言printf函数的格式控制字符串。
      • 格式说明符以%开头,后面接格式标识符。常用的有%s、%d、%o、%x、%f。一般情况下,若无特殊要求,使用%s即可
        • notion image
      • 另外一种格式是当输出项为字典时,在格式说明符那里指定键,如’%(键2)s:%(键1)d‘%dict
  1. 使用format()内置函数
    1. format函数的作用是将一个单独的输出项进行格式化,返回一个格式化后的字符或字符串。它的格式为 format(输出项,格式字符串)
      • 格式字符有d、b、o、x、f、c等,与格式化运算符的格式说明符相对应。之所以说是字符串是因为可以添加修饰,如’6.2f’表示6位有效数字且小数位数为2的浮点数。
        • notion image
  1. 使用字符串的format()方法
    1. 基本格式为格式字符串.format(输出项1,输出项2……)
    2. 格式字符串中的{}表示一个槽位置,用于填充输出项的值。从左到右一一匹配。
    3. {}中可以增加控制,格式为{序号:格式说明符}。序号表示匹配输出项的第几个,从0开始计数。格式说明符就是d、b、o、x、f、c等。
      1. notion image

选择结构

Python使用if语句来实现分支结构。包括单分支if双分支if…else…多分支if…elif…elif…else。基本格式为:
if 表达式1: 语句块1 elif 表达式2: 语句块2 elif 表达式3: 语句块3 else: 语句块
要实现分支,就要判断表达式是否成立。表达式中的运算可以是关系运算、逻辑运算和测试运算

关系运算

使用关系运算符<、<=、>、>=、==、!=。关系运算的结果是一个逻辑值True或False。

逻辑运算

使用逻辑运算符and、or、not对关系运算的结果进行逻辑运算。需要注意与或非三个运算的优先级:非>与>或。这个很容易忽略,所以该加括号时就要加括号!
notion image

测试运算

  1. 成员测试
    1. 使用成员运算符in和not in。前者是一个具体的值,后者是一个数组。
  1. 身份测试
    1. 使用身份运算符is和 is not。它用于测试两个变量是否指向同一个对象(区别=和!=)
💬
如果if后面的语句比较少,也可以写在一行。格式为 if [表达式]:[语句行]。语句行可以用;将多条语句隔开:
notion image

循环结构

Python中的循环包括for循环与while循环。相比而言for循环比while循环更智能。

while循环

  1. 基本格式
    1. while循环的格式为:
      while [表达式]: [语句块]
      当表达式的结果为True时,执行下面的语句块(循环体)。需要注意的是语句块中一般有修改表达式值的语句,让循环结束,避免无限循环。
      当循环体比较小时,也可以使用语句行的格式写在一行: while [表达式]:[语句行]
  1. 使用else子句
    1. 和C++不同,Python在循环中也可以使用else语句,它的作用是当循环正常执行完(包括没有执行)而不是break退出时执行else中的语句块。
      notion image
  1. 使用range对象
    1. range()函数的格式为 range([start],[end],[step])。可以将range的结果看成一个序列,如果i的值在序列内,则执行循环体。i的值需要在循环体中改变,避免无限循环:
      notion image

for循环

  1. for循环是通过遍历序列中的元素来建立循环的。for循环会自动将序列中的元素依次赋值给循环变量。
  1. 这里的“序列”可以是列表、元组、字符串、集合。遍历列表、元组和字符串的顺序都是从左往右,而遍历集合的顺序是无序的
  1. 循环的次数就是序列中的元素个数。所以可以通过改变序列的元素个数来控制循环的次数。
  1. for循环也可以使用else子句。
  1. for循环的序列也可以是range对象。和while循环中使用range不同,不管i之前的值如何,for循环的操作是先获得可迭代对象的迭代器,然后依次将next([迭代器])的值赋值给循环变量
    1. notion image
💬
从range这里可以对比出for循环和while循环的区别——for循环更加智能,它会自动完成赋值;而while循环需要手动赋值。

循环控制语句

循环控制语句包括常用的break、continue、pass。
  1. break终止所在循环,执行循环体后面的语句。
  1. continue提前结束本次循环,重新开始下一轮循环。
  1. pass语句是Python中新引入的语句,它的作用是占位。因为Python和C语言不一样,循环体不能什么都不写,不然编辑器就会报错。所以就要用pass占位,之后再在循环体中添加内容。
Python-2.语言基础Python-4.字符串与正则表达式