Python 小知识

Python 基础知识点整理:扩展名、变量、命名规则、格式化、文件读写、爬虫等

1. Python 程序的扩展名与提示符

扩展名

1
2
3
4
5
扩展名:.py , .pyc , .pyo , .pyd 。

.py 是源文件,.pyc 是源文件编译后的文件,.pyo 是源文件优化编译后的文件,.pyd 是其他语言写的 Python 库。

知道 .py 和 .pyc 应该就够了。

提示符

1
>>>

请记住三个 > 号。

2. 关于 Python 在变量声明、创建、释放等内存管理与其他语言的差别

  • 变量声明与创建

    • 变量无需事先声明
    • 变量无需指定类型
    • 程序员不用关心内存管理
    • 变量名会被“回收”
    • del 语句能够直接释放资源
    • 大多数编译型语言,变量在使用前必须先声明,但在 Python 中变量在第一次被赋值时自动声明。和其他大多数语言一样,变量只有被创建和赋值后才能被使用。
    • 变量一旦被赋值,就可以通过变量名来访问。
  • 内存管理(不确定)

3. Python 语言命名规则

  1. 模块(软件包名)
    模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词且数量不多的情况)。
    例如:import thisnameimport this_name
    不规范:import Thisname

  2. 类名
    类名使用驼峰(CamelCase)命名风格,首字母大写,私有类用一个下划线开头。
    例如:class Add():class AddNum():class _Private():

  3. 函数
    函数名一律小写,如有多个单词,用下划线隔开。
    例如:def run():def add_num():

  4. 变量名
    变量名尽量小写,如有多个单词,用下划线隔开。不能使用关键字(Python 本身已经使用的字)或保留字。
    例如:number = 1school_name = "px"

  5. 常量
    常量使用以下划线分隔的大写命名。
    例如:MAX_NUM = 100

4. Python 的多行注释方式

1
2
3
4
5
6
7
8
# 三个单引号 或 三个双引号
'''
这是多行注释
'''

"""
这也是多行注释
"""

5. 浮点数的科学计数法表示

使用字母 eE 作为幂的符号,以 10 为基数。
例如:4.3e-3 即 4.3*10^{-3},值为 0.0043;9.6E3 即 9600。

6. pow() 函数

1
pow(x, y)   # 返回 x 的 y 次方

示例:
pow(3, 2) → 9
pow(10, 3) → 1000

7. round() 函数

1
round(x, y)   # 返回浮点数 x 的四舍五入值,y 为要保留的小数位数

示例:
round(30.12345) → 30
round(-100.123) → -100
round(60.12345, 2) → 60.12
round(100.0002, 3) → 100.0

8. 字符串切片操作(如 s[3:-3]

1
2
str = "hello the world"
str[x:y]   # 取 str 中从 x 开始到 y 的字符,x 从 0 开始,y 为负数时从末尾倒数(-1 表示最后一个字符)

示例:
str[0:2]"he"
str[:3]"hel"
str[1:]"ello the world"
str[0:-1]"hello the worl" str[:-6]"hello the"

9. Python 代码块以缩进区分

1
2
3
4
def add():
    # 这是函数体内
    pass
# 这是函数体外

10. Lambda 函数:参数、函数体和返回值

当我们想要使用一个简单定义的、或者只需要调用一两次的函数时,取名比较麻烦,使用 lambda 匿名函数可以省去这一步骤。

1
2
3
4
5
6
# x 是传入的参数
a = lambda x: x * 10
print(a(1))   # 10
# 相当于
def a(x):
    return x * 10

11. print 格式化:% 格式化或 format 格式化两种方式

参考:Python 格式化输出的三种方式

% 格式化

符号说明
%c格式化字符及其 ASCII 码
%s格式化字符串
%d格式化整数
%o格式化八进制数(不能带小数点)
%x格式化十六进制数(不能带小数点)
%f格式化浮点数,可控制小数点后位数
%e将数字转化成科学计数法形式
1
2
3
name = "lucy"
age = 18
print("my name is %s, i am %d years old" % (name, age))

format 格式化

模板:print('xxx{}x{}x'.format(x,y))

{} 中常用方法:

模板说明
{:a<3}a 填充长度为 3,内容靠左(< 左对齐,^ 居中,> 右对齐)
{:f}转换为浮点数(默认保留 6 位小数)
{:.a}控制浮点数保留 a 位小数
{:+}显示正负号
{:e}科学计数法
{:%}转换为百分数
{:b} {:d} {:o} {:x}二进制、十进制、八进制、十六进制
1
2
3
name = "lucy"
age = 18
print("my name is {}, i am {} years old".format(name, age))

12. IPO(Input Processing Output)模式包含哪些部分

参考:Python 第二课:IPO 模式

  • I(Input,输入):程序的输入(文件输入、网络输入、用户手工输入、随机数据输入、程序内部参数输入等)。例如从键盘接收两个数 ab,这个过程就是输入。由于 input 一般接受字符串类型,所以需要使用 eval 函数去掉字符串两边的引号,使其变为整数类型。
  • P(Process,处理):算法,程序的主要逻辑。程序对输入进行处理产生结果,处理方法也叫算法。这是程序的灵魂。
  • O(Output,输出):程序的输出(屏幕显示输出、文件输出、网络输出、操作系统内部变量输出等)。

13. 复数:realimag 各代表哪部分

  • 复数由 实部(real)虚部(imag) 构成,形式为 x + yj,其中 jJ 表示虚部后缀。
  • 具体格式:a + bja 为实部(real),b 为虚部(imag)。
1
2
3
4
5
6
a1 = 3 + 2j
a2 = 2 + 5j
print(type(a1))          # <class 'complex'>
print(a1 + a2)           # (5+7j)
print(a1 * a2)           # (-4+19j)   
# 乘法计算过程:(3+2j)*(2+5j) = 6 +15j +4j -10 = -4 +19j

14. 字符串比较规则

1
2
3
4
5
6
7
8
9
# 字符串比较操作:
# 运算符:>, >=, <, <=, ==, !=
# 比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,直到不等时,其比较结果就是两个字符串的比较结果,后续字符不再比较。
# 比较原理:比较字符的 ordinal value(原始值),内置函数 ord() 获取 ASCII 码,chr() 则相反。

print('apple' > 'app')     # True
print('apple' > 'banana')  # False('a' 的 ASCII 97 < 'b' 的 98)
print(ord('a'), ord('b'))  # 97 98
print(chr(97), chr(98))    # a b

is== 的区别

参考:Python 中 is 和 == 的区别

  • == 比较的是 值(value)
  • is 比较的是 内存地址(id)
  • 只有数值型和字符串型,且在通用对象池中的情况下,a is b 才为 True;否则对于 intstrtuplelistdictset 等,a is b 通常为 False
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)   # True
print(a is b)   # False
print(id(a), id(b))  # 不同地址

a = b = [1, 2, 3]
print(a == b)   # True
print(a is b)   # True
print(id(a), id(b))  # 相同地址

15. while 循环的使用

参考:Python 中 while 循环讲解【详细】Python 教程:while 循环用法讲解

基本形式

1
2
while 判断条件:
    执行语句

求和示例

1
2
3
4
5
6
n = 0
sum = 0
while n <= 100:
    sum += n
    n += 1
print(sum)  # 5050(1 加到 100)

whileelse 搭配:当 while 判断条件为 False 时执行 else

1
2
3
4
5
6
7
n = 0
while n < 3:
    print(n)
    n += 1
else:
    print("else")
# 输出:0 1 2 else

16. 递归调用的终止条件

参考:Python 之函数的递归调用 - 知乎

递归函数停止的条件一般定义在递归函数内部,在递归调用前进行条件判断,根据结果选择继续调用自身还是 return 返回。常见停止条件:

  • 判断递归次数是否达到某一限定值。
  • 判断运算结果是否达到某个范围等,根据设计目的选择。

附:Python 递归超过一定次数后会抛出异常(报错,终止)。

17. 文件的读写,尤其是 CSV 文件的读写

参考:Python open() 函数

普通文件读写

1
2
3
4
5
6
7
8
# 方法一
f = open("D://123.txt", "w")
f.write("123")
f.close()

# 方法二(推荐,自动关闭)
with open("D://123.txt", "w") as f:
    f.write("123")

CSV 文件:CSV(Comma-Separated Values)是一种逗号分隔值格式的纯文本文件,用于存储数据。每条记录由换行符分隔,字段间用逗号或其他字符分隔。

1
2
3
id,name,age
0,张三,19
1,李四,20

CSV 示例

18. Request 请求失败的常用做法

  • 修改请求头中的 User-Agent(客户端软件类型)。

默认请求头(容易被识别为爬虫):

1
2
3
4
5
6
GET / HTTP/1.1
Host: www.qq.com
User-Agent: python-requests/2.25.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close

修改 User-Agent 为浏览器标识

1
2
3
4
5
6
7
import requests

url = "http://www.qq.com"
heads = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
data = requests.get(url, headers=heads)

修改后的请求头:

1
2
3
4
5
6
GET / HTTP/1.1
Host: www.qq.com
User-Agent: Mozilla/5.0 (...)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close

19. 集合的操作:|-&^

  • 集合是无序且无索引的,用花括号 {} 表示。
  • 集合一旦创建,不能更改元素,但可以添加或删除。
  • 集合中不允许有重复元素。
1
2
3
4
5
6
7
8
9
a = set('abracadabra')
b = set('alacazam')

print(a)           # {'a', 'r', 'b', 'c', 'd'}
print(b)           # {'a', 'l', 'c', 'z', 'm'}
print(a - b)       # 在 a 但不在 b 中:{'r', 'd', 'b'}
print(a | b)       # 并集:{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
print(a & b)       # 交集:{'a', 'c'}
print(a ^ b)       # 对称差集(不同时包含):{'r', 'd', 'b', 'm', 'z', 'l'}

20. 循环保留字:breakcontinue 的差别和作用

  • break:跳出循环,执行循环之后的语句。
  • continue:终止本次循环,执行下一次循环。

break 示例

1
2
3
4
5
6
7
for a in range(10):
    for b in range(5):
        if a == b:
            print(a, b)
            break
        print("123")
# 当 a == b 时,break 终止内层 for 循环,继续外层下一次迭代

continue 示例

1
2
3
4
5
6
7
for a in range(10):
    for b in range(5):
        if a == b:
            print(a, b)
            continue
        print("123")
# 当 a == b 时,continue 跳过本次内层循环的后续代码,继续内层下一次迭代

21. 伪随机数

  • 计算机生成的随机数都是伪随机数。
  • random 模块提供随机数生成功能,可设置随机数种子 seed() 保证每次运行结果一致。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import random

def randomness():
    rum = random.randint(1, 100)
    print(rum)

randomness()  # 每次运行结果可能不同

def random_seed(seed=1):
    random.seed(seed)
    rum = random.randint(1, 100)
    print(rum)

random_seed(2)  # 8
random_seed(3)  # 31
random_seed(2)  # 8(相同种子结果相同)
random_seed(3)  # 31

22. Python 根据命名空间寻找变量的过程

查找顺序:局部命名空间 → 全局命名空间 → 内置命名空间

  • 命名空间:从名称(变量名)到对象的映射,大部分通过 Python 字典实现。不同命名空间中的同名标识符不会冲突。
  • 作用:避免命名冲突。
  • 参考:Python 命名空间的加载与查找顺序

23. 字典的创建和使用

参考:Python 字典(创建方式、常用操作方式)

字典通过键值对 key: value 存储数据:

  • key 在同一个字典内不可重复
  • value 可以重复

创建方法

1
2
3
4
5
6
7
8
9
# 花括号手动创建
dic = {
    "name": "张三",
    "age": 18,
    18: "123"
}

# 使用 dict() 函数创建
dict(key1=value1, key2=value2)

常用操作

1
2
3
4
dic.get(key)                  # 获取 key 对应的 value,不存在则返回 None
dic.get(key, "备用")          # 不存在则返回 "备用"
dic.keys()                    # 返回所有 key
dic.values()                  # 返回所有 value

24. 用户输入函数

参考:Python 之 input() 函数 - 知乎

1
str = input("请输入: ")

25. 爬取指定 HTML 标签下的内容

  • re(正则表达式)
  • bs4(BeautifulSoup4)(老师讲的)
  • xpath

参考: