Python学习心得与笔记分享

入门

python 入门可参考官方教程:Python 教程 — Python 3.13.3 文档

个人学习代码笔记:https://github.com/nancyfrx/MyPythonLearn.git

一、编码规范

python 的编码规范还是和java 有比较大的不一样的。

官方文档:https://peps.python.org/pep-0008/

详见代码样式指导文档:提示信息 – 鱼C论坛 – Powered by Discuz!

核心内容:

  • 缩进:使用 4 个空格。
  • 行长:每行不超过 79 字符。
  • 命名
  • 变量/函数:lower_case_with_underscores
  • 类名:CapitalizedCase
  • 常量:ALL_CAPS
  • 模块:全小写,必要时可使用下划线
  • 包:全小写,不包含下划线
  • 空格与运算符x = 1 + 2 而非 x=1+2
  • 导入:每行导入一个库,标准库在前、第三方库在后。
  • 注释:清晰简洁,避免冗余。
  • 样式例子:

    # 同开始分界符(左括号)对齐
    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # 续行多缩进一级以同其他代码区别
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    # 悬挂缩进需要多缩进一级
    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)

    注意点:

  • 模块中的“双下滑线”(变量名以两个下划线开头,两个下划线结尾)变量。
  • """模块的例子
    
    模块的功能
    """
    
    from __future__ import barry_as_FLUFL
    
    __all__ = ['a', 'b', 'c']
    __version__ = '0.1'
    __author__ = 'Cardinal Biggles'
    
    import os
    import sys
  • 导入应该分行写,而不是都写在一行
  • 在 Python 中表示字符串时,不管用单引号还是双引号都是一样的。
  • 一个小游戏程序

    temp =input("猜猜游戏数字")
    guess =int(temp)
    
    if guess == 8:
         print("猜对了")
    else:
       print("猜错了")
    
    print("结束了")

    果然,还是要亲手敲才能知道有那些语法需要注意,例如

  • if 后面的:;
  • 每行后面不用像java 那样加 ;
  • 每行的缩进都要注意,该有空格的时候必须有,开头的时候不能有空格, 推荐使用空格
  • python 的各种内置函数用法 : dir(__builtins__)
  • 1. 代码布局

    缩进 :每个缩进级别采用4个空格 ,推荐使用空格来进行缩进,python3 不允许tab 和空格进行混用

    导入:如果和本地命名的拼写产生冲突,应当直接导入模块

    2. 表达式和语句中的空格

    在下列情形中避免使用过多的空格。

    1. 方括号,圆括号和花括号之后。

    2. 参数最后一个逗号,和右括号之前。

    3. 逗号,分号或冒号之前。

    4.在切片操作时,冒号和二元运算符是一样的,应该在左右两边保留相同数量的空格。

    5.在二元运算符的两边都使用一个空格。如果使用了优先级不同的运算符,则在优先级较低的操作符周围增加空白。

     

    3. 命名规范

    仅对于非公开方法和变量命名在开头使用一个下划线。

    避免和子类的命名冲突,使用两个下划线开头来触发 Python 的命名修饰机制。

    一般来说,两个下划线开头的命名方法仅用于避免与设计为子类的类中的属性名冲突。

     

    4. 虚拟环境

    python -m venv tutorial-env 
    source tutorial-env/bin/activate  // 激活
    deactivate  //退出
    
    安装卸载:
    python -m pip install novas
    python -m pip list // 显示所有在虚拟环境安装的包
    python -m pip freeze > requirements.txt  // 将虚拟环境的软件安装列表输出到一个文件
    python -m pip install -r requirements.txt

    二、内置数据类型

    官网关于内置类型的分类:

    内置类型 — Python 3.13.3 文档

    1. 列表

    1.1. 切片:

    s[i] :表示s的第i项,起始为0

    s[i:j] :表示s 从i到j 的切片

    s[i:j:k]: 表示从i 到j 步长为k 的切片

    #引号的用法
    print(" hello python")
    print('''
    Hello
    ruxue 
    ''')
    x=112
    print(f"ruxue {x}")
    #字符串链接
    var = "ab" + "bc"
    print(var)
    print("xy" in "12415xy57")
    
    #切片
    s="abcdef"
    print(s[1])
    print(s[1:6:5])
    print(s[1:3])
    print(s[-1])

    1.2. 列表推导式

    list 的一些常用方法

    del 语句:

    2. 布尔类型

    bool(" ") =true

    bool("") =false

    bool(0) =false

    3. 集合

    集合是由不重复元素组成的无序容器。基本用法包括成员检测、消除重复元素。集合对象支持合集、交集、差集、对称差分等数学运算。

    创建集合用花括号或 set() 函数。注意,创建空集合只能用 set(),不能用 {}{} 创建的是空字典

    4. 元组

    多个由逗号隔开的值组成 , 元组输出时是用括圆括号做标注,元组的值不允许改变

    使用tuple([12,1241,12523]) 来创建元组

    5. 字典

    可以把字典理解为键值对的集合,但是字典的键必须是唯一的。花括号用于创建字典

    循环取出字典的值

    for i, v in a.items():

    print(i,v)

    三、判断与循环

    1. for … else

    和java不同的是,else 这里属于for 语句

    for n in range(2, 10):
        for x in range(2, n):
            if n % x == 0:
                print(n, 'equals', x, '*', n//x)
                break
        else:
            # 循环到底未找到一个因数
            print(n, 'is a prime number')

    2. pass

    pass 语句不执行任何动作

    3. match

    def http_error(status):
        match status:
            case 400:
                return "Bad request"
            case 404:
                return "Not found"
            case 418:
                return "I'm a teapot"
            case _:
                return "Something's wrong with the internet"

    四、输入输出与文件操作

    1. with / open / write

    1、使用with 可以在子句体结束后,文件会正确关闭

    常用的文件模式:

    注意事项:

    1. 模式选择'w' 会覆盖原文件,'a' 追加内容。
    2. 换行符处理:在文本模式下,\n 会被转换为系统默认换行符(可通过 newline='' 禁用)。
    3. 编码问题:非UTF-8文件需指定正确编码(如 encoding='gbk')。
    4. 大文件处理:避免用 read()readlines(),推荐逐行迭代。

     

    2. json 相关用法

    1、 python 内置json模块用于处理json 数据

    示例代码:

    import json
    
    ####序列化
    data = {
        "name": "Alice",
        "age": 30,
        "hobbies": ["coding", "reading"],
        "is_student": False
    }
    
    # 将字典转为 JSON 字符串
    json_str = json.dumps(data, indent=4)  # indent 格式化缩进
    print(json_str)
    
    # 写入 JSON 文件
    with open("data.json", "w") as f:
        json.dump(data, f, indent=4)
    
    
    #############反序列化
    # JSON 字符串转字典
    json_str = '{"name": "Bob", "age": 25}'
    python_dict = json.loads(json_str)
    print(python_dict["name"])  # 输出: Bob
    
    # 从文件读取 JSON 数据
    with open("data.json", "r") as f:
        data = json.load(f)
    print(data["hobbies"])  # 输出: ["coding", "reading"]

    五、函数

    1. 关键字参数

    2. 特殊函数

    1.函数定义中未使用 / 时,参数可以按位置传递给函数。

    2.函数定义中未使用* 时,参数可以按关键字传递给函数。
     

    def combined_example(pos_only, /, standard, *, kwd_only):
        ...     print(pos_only, standard, kwd_only)

    3. 任意实参列表

    4. 解包实参列表

    5. Lambda 表达式

    Python 的 lambda 用于创建匿名函数(没有名字的简单函数),适合一次性使用或需要简洁表达的场景。以下是常见用法示例:
     

    add = lambda x, y: x + y
    print(add(3, 5))  # 输出 8

    六、类

    1. nolocal

    def outer():
        x = 10
        def middle():
            x = 20  # 这行注释后,nonlocal 会找到 outer 的 x
            def inner():
                nonlocal x  # 查找最近的 middle 或 outer 中的 x
                x = 30
            inner()
            print("middle:", x)  # 输出 30(如果 middle 有 x)或 30(如果 middle 没有 x)
        middle()
        print("outer:", x)  # 输出 10(若 middle 有 x)或 30(若 middle 无 x)
    
    outer()

    2. __init__

    class Complex:
        def __init__(self, realpart, imagpart):
            self.r = realpart
            self.i = imagpart
    
    x = Complex(3.0, -4.5)
    x.r, x.i

    3. 实例变量

    4. 私有变量

    那种仅限从一个对象内部访问的“私有”实例变量在 Python 中并不存在。 但是,大多数 Python 代码都遵循这样一个约定:带有一个下划线的名称 (例如 _spam) 应该被当作是 API 的非公有部分 (无论它是函数、方法或是数据成员)。

    5. 继承

    # 父类:爸爸
    class Father:
        def __init__(self, name):
            self.name = name
    
        def eat(self):
            print(f"{self.name} 正在吃饭!")
    
        def walk(self):
            print(f"{self.name} 用双腿走路!")
    
    
    # 子类:儿子(继承自 Father)
    class Son(Father):  # 关键点:Son(Father) 表示继承
        def __init__(self, name, game):
            super().__init__(name)  # 先调用父类的初始化方法
            self.game = game  # 子类新增的属性
    
        # 子类新增的方法
        def play_game(self):
            print(f"{self.name} 正在玩 {self.game}!")
    
        # 子类重写父类的方法
        def walk(self):
            print(f"{self.name} 用滑板走路!")  # 改进了走路方式
    
    
    # 测试代码
    father = Father("爸爸")
    father.eat()    # 输出:爸爸 正在吃饭!
    father.walk()   # 输出:爸爸 用双腿走路!
    
    son = Son("小明", "原神")
    son.eat()       # 输出:小明 正在吃饭!(继承自父类)
    son.walk()      # 输出:小明 用滑板走路!(子类重写的方法)
    son.play_game() # 输出:小明 正在玩 原神!(子类新增的方法)

    七、模块与标准库

    1. 导入包/模块/方法

    from 模块 import 方法

    from 包 import 模块

    模块是 以py结尾的文件

    包是文件夹下的所有模块

    标准库: Python 标准库 — Python 3.13.3 文档

    标准库相当于字典的功能,用到的时候查询即可

    自定义模块注意事项:

    第三方模块安装:

    https://pypi.org/project/requests

    为避免冲突,可以创建虚拟环境

    python3 -m venv myvenv

    保存已经安装的程序包

    pip3.10 freeze > requiretments.txt

    八、异常

    1. try…except…else

    2. raise

    raise 用于手动触发异常的关键字,它可以主动中断程序流程并将错误抛给上层调用者处理。

    不带参数的raise 会抛出当前excep 的异常 ,

    也可以自定义异常信息,raise ValueError("自定义消息message~~~")

    class NetworkError(Exception):
        """自定义网络异常"""
        pass
    
    def fetch_data(url):
        import random
        if random.random() < 0.5:
            raise NetworkError(f"无法访问 {url}")
        return "数据内容"
    
    try:
        data = fetch_data("https://example.com")
    except NetworkError as e:
        print(f"网络错误: {e}")
        raise  # 重新抛出异常供上层处理 ,不添加参数
    else:
        print("成功获取数据:", data)
    
    #链式异常: raise ...from 
    try:
        open("non_existent_file.txt")
    except FileNotFoundError as e:
        raise RuntimeError("文件操作失败") from e
    


    附录:

    官方入门网站:3.13.3 Documentation

    python 编码规范官方文档:PEP 8 – Style Guide for Python Code | peps.python.org

    python 官方入门指南:BeginnersGuideChinese – Python Wiki

    python 软件包公共存储库:PyPI · The Python Package Index

    个人学习代码笔记:https://github.com/nancyfrx/MyPythonLearn

    作者:濡雪

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python学习心得与笔记分享

    发表回复