python 基础知识
1、变量命名规范
基本规则
- 组成:由字母、数字、下划线组成,不能以数字开头。
- 区分大小写:Variable 和 variable 是不同的变量。
命名风格 - 小写+下划线:first_name、user_age。
- 避免关键字:不使用 if、for 等 Python 关键字。
- 见名知意:如 total_price,避免用 a、b 等模糊名称。
特殊情况 - 单下划线开头:_var,表示“受保护的”变量。
- 双下划线开头:__var,表示“私有的”变量。
message = "hello world"
print(message)
2、注释
单行 #
多行 使用三引号 """
3、数据类型
基本数据类型
- 整数(int):
1、-2、100 - 浮点数(float):
3.14、-0.5、2.0 - 布尔值(bool):
True、False - 字符串(str):
"hello"、'world'
复合数据类型
- 列表(list):
[1, 2, 3],可变,支持增删改查。 - 元组(tuple):
(1, 2, 3),不可变。 - 字典(dict):
{"name": "Alice", "age": 25},键值对存储。 - 集合(set):
{1, 2, 3},无序且元素唯一。
不需要标识符指定,只需要按特定格式创建即可
# 字符串 常用 api
print("字符串")
name = "eda lin"
# 首字母大写显示每个单词
print(name.title())
print(name.upper())
print(name.lower())
# 格式化
first_name = "eda"
last_name = "lin"
# f 表示格式化 可以通过 {} 取变量值
print(f"{first_name} {last_name}")
# 删除空白
name = " eda lin "
print(name.strip())
print(name.rstrip())
# 数字
# 1、任意两个数相除总是浮点数
# 2、数字中的下划线会被忽略
print("数字")
num = 12_000_000
print(f"num is {num}")
num = 3
# 平方 **
print(num ** 2)
# 多变量 同时赋值
a,b,c = 1,2,3
print(f"a = {a}, b = {b}, c = {c}")
# 列表
# 一些列 按特定顺序排列的元素组成
print("列表")
book = ["a","b",3]
print(book)
print(book[0])
print(book[0].title())
# -1 返回最后一个元素
print(book[-1])
book.append("d")
book[0] = 1
book.insert(0,"0")
print(book)
# 删除元素 知道下标
del book[0]
print(book)
val =book.pop()
print(f"val is {val}, book is {book}")
val = book.pop(0)
print(f"val is {val}, book is {book}")
# 删除元素 不知道下标 删除第一个符合指定的值
val = book.remove(3)
print(f"val is {val}, book is {book}")
# 排序 字典排序
# sort 永久 sorted 临时
book = ["abc","cda","acb"]
book.sort()
print(f"book after sort is {book}")
book = ["abc","cda","acb"]
sorted(book)
print(f"book after sorted is {book}")
# 元素倒排
book.reverse()
print(f"book after reverse is {book}")
print(f"book length is {len(book)}")
# 循环
for ele in book:
print(book)
# range() 生成指定范围数字
for ele in range(1,5):
print(ele)
book = list(range(1,10,2))
print(book)
# 切片
# 获得 索引 1 - 3 的元素 不包含 3
print(book[1:3])
# 不指定 首元素就从0开始
print(book[:3])
# 复制
# 切片复制副本
book_1 = book[:]
book_1[0] = -1
print(f"book is {book} \t book1 is {book_1}")
book_1 = book
book_1[0] = -1
print(f"book is {book} \t book1 is {book_1}")
# 元组 不可变
# 由逗号标识,()只是让它看起来明白一点
book = (1,2,3)
print(book)
print(book[2])
# if-elif-else语句
if book[1] == 0 or book[2] == 3:
print("test if")
else:
print("test else")
# 字典
book_dir = {}
book_dir = {"key1":"val","key2":"val","key3":"val"}
print(book_dir["key1"])
# 添加元素
book_dir["key4"] = "val"
book_dir["key4"] = "val_change"
del book_dir["key1"]
# [] 访问不存在报错,get 可以设置不存在时的返回值
book_dir["key1"] = book_dir.get("key1","default_val")
print(book_dir)
# 遍历
# for key,val in book_dir.items():
# print(f"key is {key} \t val is {val}")
# for key in book_dir.keys():
# print(f"key is {key} ")
for val in book_dir.values():
print(f"val is {val} ")
print("-------------------------")
for val in set(book_dir.values()):
print(val)
# 输入 input() 默认获取到的是字符串
message = input("please input a message")
print(message)
# 函数
# 设置默认值时=两边不要有空格(编写指南,非强制)
def test_change_value(val1,val2="default_val"):
print(f"val is {val1}")
val1 = "test1"
print(f"val is {val1}")
print(f"val2 is {val2}")
return "ok"
val = "hello coder"
test_change_value(val)
print(val)
print("------------------------------")
def test_change_value2(val1):
val1[0] = "test1"
print(f"val is {val1}")
return "ok"
val = [1,2,3]
test_change_value2(val)
print(f"val is {val}")
# test_change_value(val2,*val1) 传入任意长度大于一的参数
# test_change_value(val2,**val1) 传入一个参数和一个字典
if(""):
print("空字符 是 true")
else:
print("空字符 是 false")
4、将函数存储在模块里
- 导入整个模块 import model_name
- 导入特定函数 form model_name import function_name
- 给函数或模块起别名 as
# 类
# 一个py文件可以存储多个类
class Dog:
def __init__(self,name,age):
self.name = name
self.age = age
def sit(self):
print(f"{self.name} is sitting")
def sitAll():
print("sitting")
dog = Dog("dog1",12)
dog.sit()
class Cat:
def __init__(self):
self.name = "name"
self.age = "age"
def sit(self):
print(f"{self.name} is sitting")
def sitAll():
print("sitting")
cat = Cat()
cat.name = "cat1"
cat.sit()
# 继承
class BlactCat(Cat):
def __init__(self):
super().__init__()
bCat = BlactCat()
bCat.sit()
5、文件和异常
文件操作
打开文件
file = open("filename.txt", "mode")
mode 参数:
"r":读取模式,默认值。文件必须存在,否则报错。
"w":写入模式。如果文件存在,会被清空;如果不存在,会创建新文件。
"x":独占创建模式。如果文件存在,会报错;如果不存在,会创建新文件。
"a":追加模式。如果文件存在,会在文件末尾追加内容;如果不存在,会创建新文件。
"t":文本模式。默认值,用于处理文本文件。
"b":二进制模式。用于处理二进制文件,如图片等。
"+":更新模式。用于读写文件。
读取文件
读取整个文件内容
content = file.read()
逐行读取
for line in file:
print(line.strip()) # 使用 strip() 去掉换行符
使用 readline() 读取一行
line = file.readline()
使用 readlines() 读取所有行,返回一个列表
lines = file.readlines()
写入文件
file.write("Hello, world!") # 写入字符串
file.writelines(["line1\n", "line2\n"]) # 写入多行
关闭文件
file.close()
使用 with 语句
with open("filename.txt", "r") as file:
content = file.read()
# 文件会在 with 块结束后自动关闭
异常处理
try:
# 尝试执行的代码
result = 10 / 0
except ZeroDivisionError as e:
# 捕获特定异常
print(f"发生错误:{e}")
except Exception as e:
# 捕获其他所有异常
print(f"发生未知错误:{e}")
else:
# 如果没有异常发生,执行这里的代码
print("没有异常发生")
finally:
# 无论是否发生异常,都会执行这里的代码
print("finally 块执行")
自定义异常
class MyCustomError(Exception):
def __init__(self, message):
super().__init__(message)
try:
raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:
print(f"捕获自定义异常:{e}")
异常链
try:
raise ValueError("原始异常")
except ValueError as e:
raise RuntimeError("新异常") from e
异常处理的最佳实践
尽量捕获具体的异常,而不是使用通用的 Exception。
使用 finally 块来清理资源,如关闭文件、释放网络连接等。
在合适的情况下,可以使用 else 块来处理没有异常发生的情况。
# 数据输入
import json
num = [1,2,3,4,5]
filename = "jsontest.json"
with open(filename,"w") as f:
json.dump(num,f)
# json.dump() 接收两个参数,一个要存储的数据 一个要存储的文件
# json.load() 加载文件
with open(filename,"r") as f:
num_1 = json.load(f)
print(num_1)
单元测试
import unittest
# 单元测试
def changeName(val):
return val.title()
class ChangeNameTest(unittest.TestCase):
def test_change_name(self):
val = changeName("ela lin")
self.assertEqual(val, "Ela Lin")
if __name__ == "__main__":
unittest.main()
# 需保存为单个py文件运行
# if __name__ == "__main__"::当脚本直接运行时,调用 unittest.main() 来运行所有测试用例。
"""
unittest
| 断言方法 | 描述 |
|------------------------|-----------------------------------|
| assertEqual(a, b) | 检查 a == b 是否为真 |
| assertNotEqual(a, b) | 检查 a != b 是否为真 |
| assertTrue(x) | 检查 x 是否为真 |
| assertFalse(x) | 检查 x 是否为假 |
| assertIs(a, b) | 检查 a 是否是 b 的同一对象 |
| assertIsNot(a, b) | 检查 a 是否不是 b 的同一对象 |
| assertIsNone(x) | 检查 x 是否为 None |
| assertIsNotNone(x) | 检查 x 是否不为 None |
| assertIn(a, b) | 检查 a 是否在 b 中 |
| assertNotIn(a, b) | 检查 a 是否不在 b 中 |
| assertIsInstance(a, b) | 检查 a 是否是 b 的实例 |
| assertNotIsInstance(a, b) | 检查 a 是否不是 b 的实例 |
"""

浙公网安备 33010602011771号