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-2100
  • 浮点数(float):3.14-0.52.0
  • 布尔值(bool):TrueFalse
  • 字符串(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 的实例         |
"""
posted @ 2025-03-26 21:42  虚拟式  阅读(22)  评论(0)    收藏  举报