# e0501-builtins **Repository Path**: edrft/e0501-builtins ## Basic Information - **Project Name**: e0501-builtins - **Description**: 供学生理解常用的 Python 内置函数与内置类型所使用的仓库。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 136 - **Created**: 2023-11-24 - **Last Updated**: 2023-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 练习0501: Python 常用内置函数与内置类型 本次练习题从宏观层面过渡到微观层面来讲解 Python 语言的各种核心概念, 然后要求同学们做一些代码填空练习。要求填写的代码, 涉及到内置函数 (built-in functions) 与内置类型 (built-in types) 的方方面面。同学们务必亲自独立完成全部填空, 就能够比较全面地初步了解 Python 最核心的那部分对象 (object) 的常用操作。 ```plain 阿里云盘: https://www.aliyundrive.com/s/aJu2A5AKf4e 百度网盘: https://pan.baidu.com/s/1MGu7rJUO6BMXno5siMyujg?pwd=97vl ``` 以上视频内容主要是举例, 目的是让同学们对各种核心概念有个初步的印象, 不至于太陌生。对核心概念有了初步印象之后, 同学们还需要持续不断的练习, 才能够逐渐巩固对概念的理解和把握。本周的填空练习数量虽然不少, 但就 “巩固” 而言, 其实是还不够的。“巩固” 需要长年累月的积累, 而本周的练习可能仅供开胃。在开始着手练习之前, 请先观看讲解, 听懂并理解以下基本概念: 1. Python 代码的层次结构由大到小依次为: 1. 软件包 (package) (文件夹)、子软件包 (文件夹) 由模块 (`.py` 文件) 组成 1. 模块 (module) (`.py` 文件) 里是一条一条的语句 (statement) 1. 语句 (statement) 要遵循语句的语法 (syntax), 按照特定的结构, 由关键字、表达式和子语句组成 (子语句可以进一步嵌套) 1. 表达式 (expression) 要遵循表达式的语法 (syntax), 表达式可以嵌套, 表达式里不能含有语句 1. Python 表达式 (expression); 计算 (evaluate); 返回值 (return value); 副作用 (side effects); 异常 (exception) 1. Python 语句 (statement); 执行 (execute) 1. Python 模块 (module); 导入 (import) 1. Python 表达式 (expression) 允许多种语法形态 ([参考](https://docs.python.org/3/reference/expressions.html)): 1. 名称 (name) / 变量 (variable) / 标识符 (identifier) 1. 字符串 (str)、字节串 (bytes)、整数 (int)、浮点数 (float) 的字面值 (literal) 1. `True`, `False`, `None` 等个别关键字 (keyword) (其他关键字都不是表达式) 1. 列表 (list)、字典 (dict)、集合 (set) 的陈列式 (display) 1. 列表 (list)、字典 (dict)、集合 (set) 的推导式 (comprehension) 1. 生成器表达式 (generator expression); `(f(i) for i in s)`; 延迟计算 (lazy evaluation) (难点) 1. 取值表达式 (yield expression); `yield`; `yield from`; 仅限在 `def` 语句内部 (高级 Python 知识, 不讲) 1. 属性访问 (attribute access); `obj.attr` 1. 容器 (container) 对象的抽取 (subscription); `c[index]` 1. 序列 (sequence) 对象的切片 (slicing); `a[start:stop:step]` 1. 可调用 (callable) 对象的调用 (call); `f(arg)` 1. 异步等待 (asynchronous wait) 表达式; `await`; 仅限在 `async def` 语句内部 (高级 Python 知识, 不讲) 1. 幂 (power) 运算符 (operator); `a**b` 1. 一元 (unary) 运算符 (`-a`, `+a`, `~a`) 1. 乘法级 (multiplicative) 二元 (binary) 运算符 (`x * y`, `x @ y`, `x / y`, `x // y`, `x % y`) 1. 加法级 (additive) 二元 (binary) 运算符 (`x + y`, `x - y`) 1. 比特移位 (bitwise shift) 运算符 (`x << n`, `x >> n`) (很少用) 1. 二元 (binary) 比特位 (bitwise) 运算符 (`x & y`, `x | y`, `x ^ y`) 1. 比较 (comparison) 运算符 (`x == y`, `x != y`, `x > y`, `x >= y`, `x < y`, `x <= y`) 1. 成员检测 (membership test) 运算符 (`a in c`, `a not in c`) 1. 身份比较 (identity comparison) 运算符 (`x is y`, `x is not y`) 1. 布尔 (boolean) 运算符 (`not a`, `a and b`, `a or b`) 1. 赋值表达式 (assignment expression) (`x := expr`) (较新, 不太流行) 1. 条件表达式 (conditional expression) (`x if c else y`) 1. 匿名函数 (lambda) 表达式 (`lambda x, y: x + y`) 1. 解包 (unpacking) 表达式 (`*sequence`, `**mapping`) 1. 表达式计算有优先级 (precedence); 加括号改变优先级(`(a + b) * c`) 1. Python 语句 (statement) 有简单语句 (simple statement) 和复合语句 (compound statement) 1. 复合语句的子语句 (sub-statements) 若换行则必须缩进 (indent) 对齐; 缩进对齐与否是 Python 判定子语句界限的关键 1. Python 允许下列简单语句 (simple statement) ([参考](https://docs.python.org/3/reference/simple_stmts.html)): 1. 表达式语句 (expression statement) 1. 导入语句 (import statement) (`import`) 1. 赋值语句 (assignment statement) (`=`) 1. 运算赋值语句 (augmented assignment statement) (`+=`, `-=`, `*=`, `@=`, `/=`, `//=`, `%=`, `**=`, `>>=`, `<<=`, `&=`, `|=`, `^=`) 1. 删值语句 (del statement) (`del`) 1. 占位语句 (pass statement) (`pass`) 1. 断言语句 (assert statement) (`assert`) 1. 报错语句 (raise statement) (`raise`) 1. 返回语句 (return statement) (`return`); 仅限在 `def` 语句内部 1. 取回语句 (yield statement) (`yield`); 仅限在 `def` 语句内部 (后面讲, 本节跳过) 1. 循环终止语句 (break statement) (`break`); 仅限在 `for` 或 `while` 语句内部 (后面讲, 本节跳过) 1. 循环跳跃语句 (continue statement) (`continue`); 仅限在 `for` 或 `while` 语句内部 (后面讲, 本节跳过) 1. 全局变量声明语句 (global statement) (`global`) (后面讲, 本节跳过) 1. 外层变量声明语句 (nonlocal statement) (`nonlocal`) (后面讲, 本节跳过) 1. Python 允许下列复合语句 (compound statement) ([参考](https://docs.python.org/3/reference/compound_stmts.html)): 1. 条件分支 (conditional branching) 语句 (`if`) (后面细讲, 本节简介) 1. 异常分支 (exceptional branching) 语句 (`try`) (后面细讲, 本节简介) 1. 模式匹配 (pattern matching) 语句 (`match`) (太新, 暂未流行, 不讲) ([教程](https://peps.python.org/pep-0636/), [参考](https://docs.python.org/3/reference/compound_stmts.html#the-match-statement)) 1. 条件循环 (conditional loop) 语句 (`while`) (后面细讲, 本节简介) 1. 迭代循环 (iterative loop) 语句 (`for`) (后面细讲, 本节简介) 1. 情境 (context) 语句 (`with`) (后面讲, 本节跳过) 1. 函数定义 (function definition) 语句 (`def`) (后面细讲, 本节简介) 1. 类定义 (class definition) 语句 (`class`) (后面细讲, 本节简介) 1. 协程定义 (coroutinue definition) 语句 (`async def`) (高级 Python 知识, 不讲) 1. 异步迭代 (asynchronous iteration) 语句 (`async for`) (高级 Python 知识, 不讲) 1. 异步情境 (asynchronous context) 语句 (`async with`) (高级 Python 知识, 不讲) 在学习理解上述概念之后, 请同学们按以下步骤完成代码填空练习: 1. Fork 本代码仓库到你个人的 gitee 账户之下 1. 将你个人 gitee 账户下的本仓库 `git clone` 至你的本地计算机 1. 可以使用之前建立的 `pystudy` 虚拟环境, 也可以专门为本次练习新建一个虚拟环境 1. 激活虚拟环境, 在虚拟环境里安装 `pytest` 软件包 1. 使用 VS Code (或者 `nano`) 编辑器, 编辑本次练习所提供的 `e01_str_quiz.py` ([代码](e01_str_quiz.py)) 文件, 按照文件里注释的要求, 尝试完成代码的填写 1. 在该文件里有 11 个题目, 可以每完成一个题目, 就运行一次下面的测试命令, 查看题目完成的进展 ``` pytest -x e01_str_test.py ``` 命令加上 `-x` 选项的作用是: 一旦遇到第一个测试不通过, 测试即告结束, 不再继续运行下面的测试 1. 建议一道题目一道题目地做, 每完成一道题目, 就可以使用 `pytest -x` 来确认一下进度 1. `e01_str_quiz.py` 文件 ([代码](e01_str_quiz.py)) 里集中了关于字符串 (`str`) 类型的相关练习, 共 11 题, `e01_str_test.py` 文件 ([代码](e01_str_test.py)) 是相应的测试 1. `e02_list_quiz.py` 文件 ([代码](e02_list_quiz.py)) 里集中了关于列表 (`list`) 类型的相关练习, 共 21 题 `e02_list_test.py` 文件 ([代码](e02_list_test.py)) 是相应的测试 1. `e03_dict_quiz.py` 文件 ([代码](e03_dict_quiz.py)) 里集中了关于字典 (`dict`) 类型的相关练习, 共 23 题 `e03_dict_test.py` 文件 ([代码](e03_dict_test.py)) 是相应的测试 1. 完成之后运行 `pytest` 命令, 若能够看到全部 107 项测试通过, 则说明填空题全部正确完成 1. 接下来就可以像之前一样, add, commit, 然后 push, 最后提交 PR ### 相关链接 - 上一课 - [练习0401: 用 Python 读写文件](https://gitee.com/cueb-fintech/e0401-file-io) - 下一课 - 建设中... --- 知识共享许可协议
本作品由首都经济贸易大学-高强采用知识共享署名-禁止演绎 4.0 国际许可协议进行许可。