Python程序基础

Python程序构成

Python程序可分解为模块、语句、表达式和对象。

  • Python程序由模块组成,模块对应于扩展名为.py的源文件。

  • 模块语句组成,运行Python程序时,按照模块中的语句顺序依次执行。

  • 语句包含表达式。表达式由操作数和运算符组成。

  • 表达式用于创建和处理 对象

image-20250513193726574

对象

对象是Python中对数据的抽象。
每个对象都有identity、type和value。

对象和变量

  • 对象是python中的各种数据,存在于计算机内存中的一个内存块中。

  • 变量是用来指向(绑定)对象的,也称为对象的引用。

  • 变量名必须为有效的标识符。

标识符

  1. 标识符是程序中为了区分或引用各种数据而定义的名称,如变量名、常量名、函数名、类名、模块名等。

  2. 关键字(保留字)是特殊的标识符,在Python中有特定的含义,开发人员不能定义和关键字相同的标识符。

变量名命名规则

  • 由字母、数字或下划线组成, 数字不能做开头

  • 不能以Python关键字作为变量名

  • 变量名要有意义

  • 变量名区分大小写

  • 建议使用驼峰法或加下划线方式命名

变量赋值

  • 等号”=“用来给变量赋值。
  • Python 中的变量赋值不需要类型声明。
  • 每个变量在使用前都必须赋值,变量赋值后才创建成功。

字面量(literal)

  • 用于某种数据类型固定值的表示法。
  • Python基于字面量创建相应数据类型的对象。
1
2
3
a = 123
s = 'az78'
l = [4, 'f']

表达式

表达式是一段能计算的代码片段,由操作数(如变量、常量)和运算符(如+*())构成。

Primary 是语言中最紧密绑定的操作,即表达式中优先级最高、最先被计算的部分。(primary ::= atom | attributeref | subscription | slicing | call) “最紧密绑定”是指在表达式的运算顺序中,这部分会首先被解析或计算。

语法规则(使用 BNF 表示):

1
primary ::= atom | attributeref | subscription | slicing | call

各部分含义

  • atom:原子操作,如变量、常量、字面量(如42"hello")。
  • attributeref:属性引用,如obj.attr
  • subscription:下标操作,如list[0]
  • slicing:切片操作,如list[1:3]
  • call:函数 / 方法调用,如func()

::= 表示“定义为”或“被指定为”,用来定义一个语法规则的左边可以被右边的一个或多个符号序列替换。

|:表示 “或”,即左边的符号可以被右边的任一选项替换

这种定义方式是巴科斯-诺尔范式(Backus-Naur Form, BNF)扩展巴科斯-诺尔范式(Extended Backus-Naur Form, EBNF)的一部分,它们是用于描述编程语言语法的形式化方法。

操作数和运算符通过一定规则构成表达式

操作数包含Primary,Primary包含atom。

最基本元素(atom)

  • identifier 标识符
  • literal 字面量
  • enclosure(翻译为包围、围住的意思)小括号、方括号或花括号的封闭结构

属性引用

1
2
3
4
5
6
7
8
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 30)
# 访问对象的属性
print(person.name)
print(person.age)

Python代码规范

PEP8 Python编码规范:https://www.python.org/dev/peps/pep-0008/

缩进

- Python 使用缩进来表示代码的逻辑结构,一般使用Tab键或4个空格作为一个缩进级别。

- 优先使用空格缩进,tab制表符一般用于已经使用了制表符的代码中。

- 有括号的参数缩进:与开始括号垂直对齐,或者回车到下一行后再额外添加4个空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#缩进演示示例
def imn(x):
a = 9
if x != 0:
a = a/ax
print('ok!')
return a

### 有括号的参数缩进
def long_function_name(var_one,
var_two,
var_three,
var_four):
print(var_one)
foo = long_function_name("aaa",
"bb",
"vv",
"ww")

跨行语句

当一行的内容太多时,为了增加代码的可读性,可让一条语句跨多行显示。
PEP8规范推荐每行的最大长度为79个字符

  • 使用反斜杠\换行

  • 使用括号()换行

注意:使用反斜杠换行之后,反斜杠后面不能再添加任何字符(包括空格)或注释语句。

换行在二元运算符之前还是之后呢?
答案是都可以,但是推荐在二元运算符之前。 即:

1
2
3
4
5
income = (gross_wages  
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)

空格

  • 在运算符两边添加空格 +,*,=,-,+=,==,>,in,is not, and等。

  • 复杂表达式中,建议在具有最低优先级的操作符两端添加空格。

  • 在函数的参数列表中,参数默认值等号 = 两边不添加空格。

Python语句

  • Python语句分为简单语句和复合语句。
  • 简单语句包括表达式语句、赋值语句、import语句等等
  • 复合语句包括if语句、while语句、for语句等等

导入语句需要单独在一行上 多条简单语句可用分号(;)隔开,写到一行 如果条件语句、循环语句、函数定义和类定义比较短,可放在同一行

流程控制代码规范

程序的流程
  • 输入→处理→输出
  • 无论程序的规模如何,每个程序都可以分为以上三部分:程序通过输入接收待处理的数据(Input),然后执行相应的处理过程(Process),最后通过输出返回处理结果(Output)。该过程通常称为IPO程序编写方法。
程序流程图
  • 程序流程图又称(程序框图),是描述程序运行具体步骤的图形表示。 image-20250513194951862
程序的控制结构
  • 顺序结构

    • 程序中各语句按其出现的先后次序执行,称之为顺序结构。
  • 选择结构

    • 选择结构可以根据条件来控制代码的执行分支,也成为分支结构。

    • Python使用 if 语句实现分支结构。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      #单分支结构
      x = int(input("请输入x的值:"))
      y = int(input("请输入y的值:"))
      if(x > y):
      a = x - y
      print("a的值为:",a)

      #双分支结构
      import math
      a = float(input("请输入三角形的边长a:"))
      b = float(input("请输入三角形的边长b:"))
      c = float(input("请输入三角形的边长c:"))
      if(a + b > c and b + c > a and a + c > b):
      h = (a+b+c) / 2
      area = math.sqrt(h * (h-a) * (h-b) * (h-c))
      print(str.format("三角形的三条边分别为:a={0},b={1},c={2}", a, b, c))
      print(str.format("三角形的面积={0}", area))
      else:
      print("输入的三条边无法构成三角形,请重新输入。")

      # 多分支结构
      x = int(input("请输入x的坐标:"))
      y = int(input("请输入y的坐标:"))
      if(x > 0 and y > 0):
      print("该点位于第一象限")
      elif(x < 0 and y > 0):
      print("该点位于第二象限")
      elif(x < 0 and y < 0):
      print("该点位于第三象限")
      elif(x < 0 and y < 0):
      print("该点位于第四象限")
      else:
      print("该点位于坐标轴上")
  • 循环结构

    • 循环结构用来重复执行一条或多条语句。

    • Python使用for语句while语句来实现循环结构。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      i = 1
      while(i <= 5):
      k = 1
      while(k <= 5-i):
      print(" ", end = "")
      k = k + 1
      j = 1
      while(j <= i):
      print(i, end = " ")
      j = j + 1
      print()
      i = i + 1

      def sum_100():
      sum = 0
      for i in range(1,101):
      sum += i
      return sum

      sum_100 = sum_100()
      print(sum_100)
      image-20250513195423897

      for 循环用于迭代序列(即列表、元组、字典、集合或字符串等)。这与其他编程语言中的 for 关键字不太相似,而是更像其他面向对象编程语言中的迭代器方法。

循环结构中的跳转语句
  • break语句 (立即终止循环,跳出循环,执行循环后的代码。)
  • continue语句 (跳过当前循环的剩余部分,并开始下一次循环。)
  • pass语句 (用于占位或作为语法要求的空代码块,在循环中,不做任何事情)
  • break 和 continue 语句的使用,通常是与 if 条件语句配合的,当满足 if 条件语句的时候,结束整个循环或者结束本轮循环。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 将 break 用于 for 循环
# 对 1 到 20 的数字求和,当和大于 100 时,便停止求和
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

count = 0
for var in numbers:
count += var
if count >= 100:
break

print("count = ", count)

# continue
# 对 20 以内的偶数求和
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

count = 0
for var in numbers:
# 奇数,除以2的余数不为0,也就是不能被2整除
if var % 2 != 0:
# 当数字为奇数时,退出本次循环
continue
count += var

print("count = ", count)
range()函数
  • range类型表示一个不可变的数字序列,通常用于在for循环中循环特定次数。
  • 语法:range(start, stop[, step])

start:序列的起始值(包含)。默认为 0。 stop:序列的结束值(不包含)。必须指定。

step:序列的步长(即相邻两个值之间的差)。默认为 1。