Python学习笔记
千里之行,始于足下
正文
一、经典HelloWord开启Python大门:
# 文件名: Demo01.py # 经典HelloWord开启Python大门: # if __name__ == '__main__': # print("Hello World!") print("Hello World!")
二、指定编码:
# 文件名: Demo01.py # 指定编码: utf-8(默认) # -*- coding:utf-8 -*-
三、注释:
# 文件名: Demo01.py # 注释 # 1、单行注释 """ 2、三个双引号多行注释 """ ''' 3、三个单引号多汗注释 '''
四、变量赋值:
# 文件名: Demo01.py # 变量赋值 a, b, c = 1, 2, "字符串" print(a, b, c) a = b = c = 3 print(a, b, c) # 内部赋值并返回 print(d := 10)
五、数据类型:
数据类型 | 描述 | 示例 |
---|---|---|
int |
整数类型,用于表示整数 | 5 , -42 , 1000 |
float |
浮点数类型,用于表示带小数的数值 | 3.14 , -0.001 , 2.0 |
bool |
布尔类型,用于表示逻辑值,只有 True 和 False |
True , False |
str |
字符串类型,用于表示文本 | "hello" , 'world' |
list |
列表类型,用于存储有序的可修改元素集合 | [1, 2, 3] , ["a", 4] |
tuple |
元组类型,用于存储有序的不可修改元素集合 | (1, 2, 3) , ("x", "y") |
set |
集合类型,用于存储无序且唯一的元素集合 | {1, 2, 3} , {"apple"} |
dict |
字典类型,用于存储键值对 | {"name": "Alice"} |
# 文件名: Demo01.py # 数据类型 # 整型、浮点型、字符串、布尔型、列表、字典、元组、集合 # 不可变数据:Number(数字)、String(字符串)、Tuple(元组) # 可变数据:List(列表)、Dictionary(字典)、Set(集合) print(type(1)) # 整数类型 print(type(1.1)) # 浮点类型 print(type("字符串")) # 字符串类型 print(type(True or False)) # 布尔类型 print(type([])) # 列表类型 print(type({})) # 字典类型 print(type((1, 2, 3))) # 元组类型 print(type({1, 2, 3})) # 集合类型 # type()不会认为子类是一种父类类型 # isinstance()会认为子类是一种父类类型 print(isinstance(1, int)) # 判断数据类型
六、字符串:
# 文件名: Demo01.py # 字符串 # 1、字符串拼接 print("Hello World" + str(10)) # 2、引号转义 print("\'" + str(10)) # 3、字符串换行成段:三个单引号或者三个双引号 print("""这是一个段落, 可以由多行组成""") # 4、数据操作 st = "Hello" print(st) print(len(st)) # 字符串长度 print(st[-2]) # 字符串索引:从左往右以 0 开始,从右往左以 -1 开始 print(st[0:-1]) # 字符串切片str[start:end],其中 start(包含)是切片开始的索引,end(不包含)是切片结束的索引 print(st[2:]) # 输出从第三个开始后的所有字符 print(st[1:5:3])# 字符串的切片选择步长str[start:end:step],正步长表示从左到右选择指定字符,负步长表示从右到左选择指定字符 print(st * 2) # 输出字符串两次 print(type(st)) # 数据类型 # 5、字符串format格式化 print("{2} {0} {1}".format("a", "b", "c")) # 按索引位置输出 print("{value3} {value1} {value2}".format(value1="a", value2="b", value3="c")) # 按关键字指定输出 print("{2:.2f} {0} {1}".format("a", "b", 2.11111)) # @.2f保留两位小数
七、用户输入:
# 文件名: Demo01.py # 用户输入 info1 = int(input("请输入信息1:")) # 默认int info2 = input("请输入信息2:") # 默认str print(str(info1) + info2)
八、逻辑运算符:
# 文件名: Demo01.py # 逻辑运算符 # and:与 or:或 not:非 boAnd = 1 > 0 and 1 < 0 boNot = not 1 > 0 print(str(boAnd) + str(boNot))
九、成员运算符:
# 文件名: Demo01.py # 成员运算符 # in:判断是否在指定的序列中存在 # not in:判断是否不在指定的序列中存在 print(1 in [1, 2, 3]) print(1 not in [1, 2, 3])
十、身份运算符:
# 文件名: Demo01.py # 身份运算符 # is/is not 用于判断两个变量引用对象是否为同一个 # == 用于判断引用变量的值是否相等 newA = [1, 2, 3] newB = newA print(newA is newB) # True print(newA is [1, 2, 3]) # False print(newA == [1, 2, 3]) # True
十一、条件语句:
# 文件名: Demo01.py # 条件语句 ifInfo = 1 # 1、单条件 if ifInfo > 1: print("大于1") else: print("小于或等于1") # 2、嵌套条件 if ifInfo > 2: print("大于2") elif 1 < ifInfo <= 2: print("大于1或小于等于2") else: print("小于或等于1") # 3、match...case语句 # 自动终止,无需 break:由于每个 case 块是独立的,因此不需要使用 break 来终止当前块 status = 400 match status: case 400: print("Bad request") case 401 | 403 | 404: print("Not found") case 418: print("I'm a teapot") case _: # 未找到默认输出 print("Something's wrong with the internet")
十二、列表List:
# 文件名: Demo01.py # 列表 # 语法:List[value] # 有序的集合,可重复,可修改 listInfo = [5, 2, 2, 1, 4, 3] print(listInfo) # 查看整个列表 print(listInfo[1]) # 查看列表索引位为0值 print(listInfo[1:3])# 查看列表索引位为1到3的元素(左闭右开) listInfo.append(6) # 添加 print("添加:", listInfo) # 查看整个列表 listInfo.remove(3) # 移除列表中某个值的第一个匹配项 print("移除第一个匹配的指定值:", listInfo) del listInfo[1] # 删除索引位为1的元素 print("删除指定索引位元素:", listInfo) listInfo[1] = 5 # 修改 print("修改:", listInfo) # len长度, max最大值,min最小值,sorted从小到大排序 print(len(listInfo)) print(sorted(listInfo)) # 列表比较 import operator listA = [2, 3] listB = [2, 3] print("operator.eq(a,b): ", operator.eq(listA, listB))
十三、元组tuple:
# 文件名: Demo01.py # 元组 # 语法:tuple(value) # 有序的集合,可重复,不可修改 # 元组的不可变指的是元组所指向的内存中的内容不可变 tupleA = (2, 3, 6, 5, 1) print(tupleA) print(tupleA[1:3]) # 元组切片(左闭右开) print(tupleA + (1, 2, 3)) # 元组相加 print(3 in tupleA) # 判断元素是否存在 print(list(tupleA)) # 转换为列表
十四、字典dict:
# 文件名: Demo01.py # 字典 # 语法:dict{key:value} # key键唯一 mapInfo = {"name": "ceshi", "age": 18} print(mapInfo) print(mapInfo.keys()) # 返回key列表视图 print(mapInfo.values()) # 返回value列表视图 print(mapInfo.get("type", "不存在则设置默认值")) print(len(mapInfo)) # 长度 print("name属性值:", mapInfo.get("name")) mapInfo["name"] = "ceshi2" # 更新指定key的值 print("name更新后的属性值:", mapInfo.get("name")) mapInfo["sex"] = "1" # Key不存在则添加,Key存在则修改 print(mapInfo) print("sex" in mapInfo) # 判断Key是否存在 del mapInfo["sex"] # 删除 print(mapInfo)
十五、集合set:
# 文件名: Demo01.py # 集合 # 语法:set{value} # 无序的集合,不可重复,可修改 set1 = {1, 2, 2, 3, 4} print(set1) # 不重复对象集合,去重功能 print(set("abbds")) # 字符串转set集合 set1.add(5) # 添加元素 print(set1) set1.remove(5) # 移除指定元素,如果元素不存在,则会发生错误 set1.discard(5) # 移除指定元素,如果元素不存在,不会发生错误 print(set1)
十六、循环语言:
# 文件名: Demo01.py # 循环语言 # break语句:跳出 for 和 while 的循环体,任何对应的循环 else 块将不执行 # continue语句:跳出当前循环,继续下一次循环 # 1、for结构: for 变量名 in 可迭代对象: 循环体 [else: 结束循环执行语句,可省略] kvInfo = {"name1": "ceshi1", "name2": "ceshi2"} # for key, value in kvInfo.items(): # print(key + ":" + value) for kv in kvInfo.items(): print(kv[0] + ":" + kv[1]) else: print("循环结束") # 2、while结构:while 条件:循环体 [else: 结束循环执行语句,可省略] fList = [1, 2, 3, 4, 5] ind = 0 while ind < len(fList): # 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符 print(fList[ind], end=",") ind += 1 else: print("循环结束,ind值", ind)
十七、函数:
# 文件名: Demo02.py # 函数 # 语法:def 函数名(参数列表): 函数体 def my_fun(a, b): return a + b print("函数my_fun()返回:" + str(my_fun(1, 2)))
十八、类与方法:
1、声明类、构造函数、实例函数、类方法、静态方法:
# 文件名: class_and_method.py # 类、构造函数、实例函数、类方法、静态方法 class MyClass: # 构造函数 def __init__(self, name): self.name = name # 实例函数:通过实例化后调用 def instance_method(self): self.name = self.name + "实例方法" print(f"{self.name}") # 类方法:可以通过类名直接调用,也可以通过实例调用,修改类变量 # 类变量 class_data = "init_data" @classmethod def class_method(cls, name): print(f"类变量初始值:{cls.class_data}") cls.class_data = name print(f"类名:{cls.__name__}") print(f"类变量修改值:{cls.class_data}") # 静态方法:可以通过类名调用,也可以通过实例调用,类似于外部函数 @staticmethod def static_method(x): print(f"static method, {x}")
2、操作:
# 文件名: Demo02.py # 类与方法 # 构造函数、实例函数、类方法、静态方法 # 导入模块: from 文件路径 import 文件名 # internal: 自定义的文件存放路径,若同一路径下可以直接 import 文件名 from internal import class_and_method # 通过类名直接调用类方法 class_and_method.MyClass.class_method("iven") # 通过类名直接调用静态方法 class_and_method.MyClass.static_method("静态方法") # 创建类的实例 instance = class_and_method.MyClass("Jon") # 访问构造函数实例属性 print(f"访问构造函数实例属性: {instance.name}") # 调用实例方法 instance.instance_method() # 通过实例调用类方法 instance.class_method("new_iven") # 通过实例调用静态方法 instance.static_method("new_静态方法")
十九、继承:
1、声明父类,定义父类构造函数与父类方法:
# 文件名: class_father_method.py # 父类 class Father: # 构造函数 def __init__(self, name): self.name = name # 父类方法 def father_method(self): print(f"父类属性:{self.name}")
2、子类继承父类,支持多继承:
# 文件名: class_son_method.py from internal import class_father_method # 子类: class Son(Father) # 多继承: class Son(Father, Mother, ....) class MySon(class_father_method.Father): # 构造函数, super()调用父类构造函数 def __init__(self, name, age): # 调用父类的构造方法 super().__init__(name) self.age = age # 子类方法 def son_method(self): print(f"子类属性name: {self.name}") print(f"子类属性age: {self.age}")
3、操作:
# 文件名: Demo02.py # 继承 # 支持多继承 # 子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法 from internal import class_son_method # 实例化子类: son = class_son_method.MySon("iven", 18) # 获取父类方法: son.father_method() # 获取子类方法: son.son_method()
二十、异常处理:
# 文件名: Demo02.py # 异常处理 try: print(1/0) except Exception as e: print(e) finally: print("finally语块肯定会执行")
二十一、匿名函数:
# 文件名: Demo02.py # 匿名函数 # 函数名 = lambda 形参:返回值 numSum = lambda num1, num2: num1 + num2 print(numSum(10, 20)) # 等价于 def num_sum(a, b): return a + b print(num_sum(10, 20))
二十二、高阶函数:
函数作为参数传递给另一个函数
# 文件名: Demo02.py # 高阶函数 # 函数作为参数传递给另一个函数 # 函数作为返回值返回 def A(func, a, b): return func(a, b) def B(a, b): return a + b def C(a, b): return a * b def D(a, b): return a - b # 调用A print(A(B, 1, 2)) print(A(C, 1, 2)) print(A(D, 1, 2))
二十三、文件操作:
# 文件名: Demo02.py # 文件操作 # 结构: 文件名,文件类型,编码格式 # 文件类型: r:读取文件,w:写文件,a:追加文件,r+:读写文件,文件指针位于文件的开头,当你首先写入内容后,文件指针仍然在开头 # 编码格式: utf-8:中文编码格式,gbk:中文编码格式,ascii:英文编码格式 # 方式一: 需要手动调用close() # file = open("./file/data.txt", "r", encoding="utf-8") # file.close() # 方式二: with 方式读取,不需要手动调用close() with open("./file/data.txt", "r", encoding="utf-8") as file1: # print(file.read()) # 读取文件,一次写入内存中,read(10): 读取10个字节 lines = file1.readlines() for line in lines: print(line) # 读取文件,一次读取一行 with open("./file/data2.txt", "r+", encoding="utf-8") as file2: # 文件指针位于文件的开头 file2.write("一二三四五 \n") file2.write("六七八九十 \n")
二十四、基于MySQL实现分页查询案例:
1、前置准备:
# 激活虚拟环境 .\venv\Scripts\activate # 查看当前虚拟环境中安装的包 pip freeze # 安装 Flask pip install Flask # 安装 MySQL Connector/Python pip install mysql-connector-python
2、执行脚本:
# 文件名: Demo03.py # 前置准备 # .\venv\Scripts\activate # 激活虚拟环境 # pip freeze # 查看当前虚拟环境中安装的包 # pip install Flask # 安装 Flask # pip install mysql-connector-python # 安装 MySQL Connector/Python # 访问:http://127.0.0.1:8080/api/demo?page=1&per_page=10 from flask import Flask, request, jsonify import mysql.connector from mysql.connector import Error app = Flask(__name__) # 配置 MySQL 数据库连接 db_config = { 'host': 'localhost', 'user': 'root', 'password': '12345', 'database': 'demo_database', 'port': 3306 } # 创建数据库连接 def create_connection(): try: connection = mysql.connector.connect(**db_config) if connection.is_connected(): print("MySQL Database connection successful") return connection except Error as e: print(f"The error '{e}' occurred") return None # 分页查询接口 @app.route('/api/demo', methods=['GET']) def get_items(): # 创建数据库连接 connection = create_connection() if connection is None: # 返回错误响应 return jsonify({"error": "Database connection failed"}), 500 try: page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 10, type=int) offset = (page - 1) * per_page cursor = connection.cursor(dictionary=True) query = "SELECT * FROM tb_user LIMIT %s OFFSET %s" cursor.execute(query, (per_page, offset)) # 执行查询 items = cursor.fetchall() # 获取查询结果 total_query = "SELECT COUNT(*) as total FROM tb_user" cursor.execute(total_query) total_count = cursor.fetchone()['total'] total_pages = (total_count + per_page - 1) // per_page return jsonify({ 'items': items, 'total': total_count, 'pages': total_pages, 'current_page': page }) except Error as e: print(f"The error '{e}' occurred") return jsonify({"error": str(e)}), 500 finally: if connection.is_connected(): cursor.close() connection.close() if __name__ == '__main__': # 运行 Flask 应用, 端口8080 app.run(debug=True, port=8080)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人