【Python 语言基础】第二章 Python 基础语法

2.1 关键字

关键字是在 Python 中,被赋予了特殊含义的英文单词。使用帮助系统可以查看 Python 中的所有关键字,除 True、False、None 外,其他关键字都是小写。

【Python 语言基础】第二章 Python 基础语法_第1张图片

2.2 标识符

标识符是标识变量、函数、类型、模块等名称的符号。Python中的标识符有如下规则:

  1. 严格区分大小写;
  2. 可以使用字母、数字、下划线;
  3. 不能以数字开头;
  4. 不能使用关键字;
  5. 以双下划线开头和结尾的名称通常有特殊含义,尽量避免这种写法。比如:__init__是类的构造函数。

Python命名规范

包、模块、函数、变量:全小写字母,多个单词用下划线分隔;
类名:大驼峰命名;
常量名:全大写,多个单词用下划线分隔。

2.3 注释

  1. 行注释 #
  2. 块注释 '''或者"""
#!/usr/bin/env python3
告诉Linux操作系统,这是一个Python可执行程序

# -*- coding: utf-8 -*-
告诉Python解释器,按照 utf-8 编码读取源代码

2.4 常量和变量

常量

Python 不支持常量,即没有语法规则限制改变一个常量的值。
我们只能约定常量的命名规则,在程序的逻辑上不对常量的值进行修改。

变量

Python中,变量也称为“对象的引用”。因为,变量存储的就是对象的地址。变量通过地址引用了“对象”。

变量位于:栈内存
对象位于:堆内存

1. 变量声明语法

变量的声明和赋值用于将一个变量绑定到一个对象上,语法:变量名 = 表达式
变量使用前必须被初始化。

2. 变量赋值方法

简单赋值

常用赋值方法,语法:变量名=值

链式赋值

链式赋值用于将同一个对象赋值给多个变量。语法:变量1 = 变量2 = 值,相当于 变量1 = 值; 变量2 = 值

序列解包赋值

系列解包赋值用于将对应个数的值按顺序赋给相同个数的变量。语法:变量1, 变量2, 变量3 = 值1, 值2, 值3,相当于 变量1 = 值1; 变量2 = 值2; 变量3 = 值3

系列解包赋值可用于变量交换。

3. 删除变量

可以使用 del 删除不再使用的变量,语法:del 变量名
如果对象没有被任何变量引用,就会被垃圾回收器回收,清空内存空间。

2.5 数据类型

一、数字类型

1.整型(int)

Python 3 中,整型的位数没有限制。

二进制: 0b 或 0B 开头
八进制: 0o 或 0O 开头
十六进制: 0x 或 0X 开头

2.浮点型(float)

浮点数用 a * 10b 形式的科学计数法表示,比如:3.14,表示为 314E-2。浮点数在内存中也是按照科学计数法存储的。

​可以使用 round( ) 将浮点数进行四舍五入。不会改变原有值,而是产生新的值。

3.布尔型(bool)

布尔型的 True、False,本质上就是 1 和 0,他们可以和数字运算。

二、序列类型

字符串(str)

列表(list)

元组(tuple)

字典(dict)

集合(set)

三、类型转换

1. 自动类型转换

整数和浮点型混合运算时,表达式自动转型成浮点型。如:2 + 8.0 = 10.0;
​整数和布尔值混合运算时,会自动将布尔值转换为对应的数字,True 转换为 1,False 转换为 0。

2. 强制类型转换

方法 作用 整型 浮点型 布尔型 字符串
int( ) 转换为整数 / 直接取整数部分 True 转为 1
False 转为 0
纯数字可以转
有字母会报错
float( ) 转换为浮点数 转换为 整数.0 / True 转为 1.0
False 转为 0.0
纯数字可以转
有字母会报错
bool( ) 转换为布尔值 0 转换为 False
其他转换为 True
0.0 转换为 False
其他转换为 True
/ None、空白字符串转换为 False
其他转换为 True
str( ) 转换为字符串 转换为字面量字符串 转换为字面量字符串 转换为字面量字符串 /

2.6 运算符

1. 算术运算符

运算符 作用 示例 结果
+ 加法,可用于 数字、字符串、列表、元组等 3 + 2 5
- 减法,可用于 数字、字符串、列表、元组等 10 - 2 8
* 乘法 3 * 5 15
/ 浮点数除法 7 / 4 1.75
// 整数除法 7 // 4 1
% 模(取余) 7 % 4 3
** 2 ** 3 8

使用 divmod(被除数, 除数) 可以同时得到商和余数,返回的是一个元组。

2. 赋值运算符

运算符 举例 等价于
= a = 2
+= a += 2 a = a + 2
-= a -= 2 a = a - 2
*= a *= 2 a = a * 2
/= a /= 2 a = a / 2
//= a //= 2 a = a // 2
%= a %= 2 a = a % 2
**= a **= 2 a = a ** 2

3. 比较运算符

运算符 作用 示例 结果
== 等于 15 == 30 False
!= 不等于 15 != 30 True
> 大于 15 > 30 False
< 小于 15 < 30 True
>= 大于等于 15 >= 30 False
<= 小于等于 15 <= 30 True

4. 逻辑运算符

运算符 作用 格式 说明
and x and y x 为 true,返回 y 的值
x 为 false,不计算 y 的值,直接返回 false
or x or y x 为 true,不计算 y 的值,直接返回 true
x 为 false,返回 y 的值
not not x x 为 true,返回 false
x 为 false,返回 true

5. 位运算符

运算符 作用
& 按位与
| 按位或
~ 按位非
^ 按位异或
<< 左移,高位溢出,低位补0
>> 右移,符号位不变,低位溢出,高位补符号位

Python 中,不支持自增(++)和自减(--)运算符。

6. 同一运算符

同一运算符用于比较两个对象的存储地址是否相同。

运算符 作用
is 判断两个标识符是否引用同一对象
is not 判断两个标识符是否引用不同对象

is 与 == 的区别:

is 用于判断两个变量引用的对象是否为同一个,即比较对象在内存中的存储地址;

== 用于判断两个变量引用的对象的值是否相等,默认调用对象的 __eq__() 方法。

注:变量和 None 比较时,应该使用 is 。

整数缓存问题

交互模式下,Python 对 [ -5, 256 ] 之间的整数进行了缓存,所以在这个范围内的整数使用 is 和 == 判断,结果都为 True。

在PyCharm中,或将语句保存为文件时,Python 缓存的整数范围是 [ -5, 任意正整数 ]

7. 成员运算符

成员运算符用于判定元素是否在序列中存在。

运算符 作用
in 判断值是否存在于序列中
not in 判断值是否不存在与序列中

8. 运算符优先级

位运算 和 算术运算 > 比较运算符 > 赋值运算符 > 逻辑运算符;
建议使用小括号进行组织,避免运算符优先级导致的问题。

2.7 流程控制语句

2.7.1 条件语句

1. 单分支

if 条件表达式:
    语句块

num = 10
if num >= 5:
    print("greater than 5")

【Python 语言基础】第二章 Python 基础语法_第2张图片
2. 双分支

if 条件表达式:
    语句块1
else:
    语句块2
    
num = 10
if num >= 5:
    print("greater than 5")
else:
    print("less than 5")

【Python 语言基础】第二章 Python 基础语法_第3张图片
三元运算符

双分支都有返回值时,可以使用三元运算符代替。

条件为真的值 if 条件表达式 else 条件为假的值

3. 多分支

if 条件表达式1:
    语句块1
elif 条件表达式2:
    语句块2
elif 条件表达式3:
    语句块3
else:
    语句块4

【Python 语言基础】第二章 Python 基础语法_第4张图片

条件表达式的值为 False 的情况
False、0、0.0、空字符串、空值 None、空序列对象(空列表、空元组、空字典、空集合)、空 range 对象、空迭代器对象。
其余情况,均为True。

在 Python 中,条件表达式中不能有赋值运算符 “=”。

2.7.2 循环语句

【Python 语言基础】第二章 Python 基础语法_第5张图片
1. while 循环

while 条件表达式:
    循环体语句

循环体中必须有改变循环变量的操作,不然会形成死循环。

2. for 循环

for 变量 in 可迭代对象:
    循环体语句

for 循环通常用于可迭代对象的遍历,可迭代对象包括:

  • 序列(字符串、列表、元组、字典、集合);
  • 迭代器对象(iterator);
  • 生成器对象(generator);
  • 打开的文件对象。
# 打印九九乘法表
for x in range(1, 10):
    for y in range(x, 10):
        separator = '\n' if y == 9 else '\t'
        print('{0} × {1} = {2}'.format(x, y, x * y), end=separator)

3. 其他语句

break 语句

break 语句用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只跳出最近一层循环。

continue 语句

continue 语句用于结束本次循环,继续下一次。当有嵌套循环时,continue 也用于最近一层循环。

else 语句

while、for 循环可以带一个可选的 else 语句,如果循环被 break 结束,则不会执行 else 语句,否则会执行。用于循环正常结束应该执行的动作,循环被 break 打断则不执行的动作。

while 条件表达式:
    循环体语句
else:
    语句块
    
-------------------------------

for 变量 in 可迭代对象:
    循环体语句
else:
    语句块
# 录入5名员工薪资,全部录入完成后,提示“您已全部录入5名员工薪资”,最后打印录入的薪资和平均薪资。
emp_num = 0
sum_salary = 0
salaries = []

for i in range(5):
    input_str = input('请录入5名员工薪资(按 Q 中途结束)\n')
    if input_str.upper() == 'Q':
        break

    salary = float(input_str)

    if salary < 0:
        continue

    emp_num += 1
    sum_salary += salary
    salaries.append(salary)
else:
    print('您已全部录入5名员工薪资')

print('录入薪资:', salaries)
print(f'平均薪资:{sum_salary / emp_num}')

4. 循环代码的优化

  1. 尽量减少循环内不必要的计算;
  2. 尽量使用局部变量,而不是全局变量;
  3. 连接多个字符串,使用 join 而不是 +;
  4. 列表元素的插入和删除,尽量在尾部操作。
# 循环性能测试
import time

start1 = time.time()
for x in range(10000):
    result = []
    for y in range(10000):
        result.append(x * 100 + y * 100)
end1 = time.time()
print(f'耗时: {end1 - start1}')

start2 = time.time()
for i in range(10000):
    result = []
    num = i * 100
    for j in range(10000):
        result.append(num + j * 100)
end2 = time.time()
print(f'耗时: {end2 - start2}')

---------------------- 执行结果 --------------------
耗时: 20.11190366744995
耗时: 16.96176505088806

5. zip( ) 并行遍历

可以使用 zip( ) 对多个序列并行遍历,zip( ) 在最短序列用完时停止。

names = ('张三', '李四', '王五', '赵六')
ages = (18, 26, 22, 31)
jobs = ('老师', '程序员', '公务员')

for name, age, job in zip(names, ages, jobs):
    print(f'{name}--{age}--{job}')

# 等价于
for i in range(len(jobs)):
    print(f'{names[i]}--{ages[i]}--{jobs[i]}')

--------------------- 执行结果 ---------------------
张三--18--老师
李四--26--程序员
王五--22--公务员

你可能感兴趣的:(Python,python,开发语言)