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-421000
float 浮点数类型,用于表示带小数的数值 3.14-0.0012.0
bool 布尔类型,用于表示逻辑值,只有 True 和 False TrueFalse
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语句:跳出 forwhile 的循环体,任何对应的循环 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)
复制代码

 

posted on   爱文(Iven)  阅读(3)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示

目录导航