[oeasy]python072_名字空间是怎么玩的_from_import_as_导入_namespace

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 本文介绍了Python中名字空间和模块导入的使用方法。主要内容包括:1. **回忆上次内容**:回顾了之前导入系统模块(如`__hello__`、`time`)和自定义模块(如`my_file`),并介绍了如何导入和使用模块中的变量。2. **从shell开始**:展示了如何在命令行中编辑和切换文件,以及如何通过`import`语句引入模块。3. **修改oeasy.py**:演示了如何通过`import my_file`导入模块,并将模块中的`pi`赋值给本地变量`pi`。4. **locals()函数**:解释了如何使用`locals()`查看当前作用域内的本地变量及其值。

名字空间是怎么玩的_from_import_as_导入_namespace

回忆上次内容

  • 上次导入了系统模块
  • __hello__
  • time
  • 自己 定义了 模块
  • my_file
  • 导入 my_file.py
  • 作为 自定义的
  • my_file模块
  • 可以使用
  • my_file.pi
  • my_file模块中的变量pi
  • 但不能直接 用pi

  • 如果 想 直接用pi
  • 又应该怎么办呢???🤔

从shell开始

  1. 我们上次有两个文件
  1. 被引用模块
  • my_file.py
  1. 主体程序
  • oeasy.py
vi my_file.py oeasy.py
  • :ls效果

  • 依次打开了两个文件

  • :b2
  • 切到oeasy.py
  • 可以直接输出pi吗?

修改oeasy.py

import my_file
pi = my_file.pi
print(pi)
  • 如下图所示

  • 声明本地变量pi
  • 并将my_file模块中
  • pi的值(3.14)
  • 赋给 本地变量pi

  • 本地 都有 哪些 变量?

locals()

  • locals函数
  • 查询本地变量
import my_file
pi = my_file.pi
print(pi)
print(locals())
  • 相比 dir()
  • 只显示 本地变量名
  • locals()
  • 不但 显示本地变量
  • 还显示 变量的值

  • 本地变量 包括
  • my_file 模块
  • pi 浮点小数变量
  • 模块 可以 改名吗?

导入模块

import my_file as my_module
pi = my_module.pi
print(pi)
print(locals())
  • 确实可以重命名

  • 只想 引入 模块中的变量
  • 可以吗?

提问

from...import...

  • from my_file import pi
  • 就相当于 声明了 本地变量pi
  • 并将 my_file.pi的值(3.14)
  • 赋给 本地变量pi

  • 真的没有导入模块吗?
  • locals()函数
  • 查看 本地局部变量

  • 本地变量
  • 导入 my_file模块
  • 只导入 my_file.pi值
  • 赋给 本地变量pi
  • 不同 模块中 导入的
  • 同名 变量
  • 会冲突吗?
  • 可以观察到冲突现场吗?

冲突现场

  • 声明了pi之后
  • 先将 my_file模块中 pi的值(3.14)
  • 赋给 本地变量pi

  • math模块中
  • pi的值(3.141592553589793)
  • 赋给 本地变量pi
  • 本地变量名(local name)pi
  • 被两次赋值
  • 第二次赋值 覆盖了 第一次

  • 本地变量pi 只有一个值
  • 3.141592553589793
  • 最开始从 my_file模块中
  • 赋过来的 3.14被覆盖掉了
  • 新 导进来的变量
  • 也 可以 改名 吗?

from ... import ... as ...

  • 可以的
  • from ... import ... as ...
  • 可以把变量名 更明确一点
  • 其实就是 起个新名字
  • 然后 进行赋值

  • 这样的话
  • 本地 就有了 两个不同的 pi
  • my_pi
  • math_pi
  • 分别来自 两个不同名字空间

  • 任务达成!!!
  • 总结一下 !✿✿ヽ(°▽°)ノ✿
  • 什么 是 名字空间 呢?

名字空间(namespace)

  • my_file 和 math 就是名字空间
  • 不同名字空间中
  • 可以 有 相同的 变量pi
  • 他们 彼此之间 不受影响

  • 不同的 命名空间
  • 可以 同时存在
  • 相同 变量名
  • 互不干扰

python之禅最后一句

  • 导入this模块
import this
  • 展示 python之禅
  • 名字空间 是 个好主意!

  • 可以用 名字空间 保护
  • 各自空间中的 变量
  • 彼此之间 会 覆盖
  • 目前 还有个 瑕疵

pep-8

  • 导入 共分成 三类
  1. 标准库
  2. 第三方库
  3. 本地库
  4. 类别之间需要一个空行
  5. https://peps.python.org/pep-0008/#imports

  • 根据这一原则我们修改代码

最终代码

  • math 是 系统类库 在前面
  • my_file 是 本地自建类库 在后面
  • 之间有一个空行
from math import pi as math_pi
from my_file import pi as my_pi
print(locals())

总结

  • 这次直接从模块中导入变量、函数
  • from my_file import pi
  • 导入my_file.pi
  • 并作为 pi 使用
  • from my_file import pi as my_pi
  • 导入变量 并 重命名

相关文章
|
3月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
6月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
237 97
|
6月前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
197 62
|
5月前
|
API 开发工具 网络架构
【Azure Service Bus】使用Python SDK创建Service Bus Namespace资源(中国区)
本文介绍了如何使用Python SDK创建Azure Service Bus Namespace资源。首先,通过Microsoft Entra ID注册应用获取Client ID、Client Secret和Tenant ID,完成中国区Azure认证。接着,初始化ServiceBusManagementClient对象,并调用`begin_create_or_update`方法创建资源。
118 29
|
5月前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
363 8
|
6月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
129 20
|
7月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
206 29
|
6月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
122 17
|
6月前
|
Python 容器
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
168 13
|
6月前
|
索引 Python
[oeasy]python092_eval_衡量_转化为列表
本文探讨了 Python 中 `eval` 函数的用法及其与字符串和列表之间的转换关系。通过实例分析,展示了如何使用 `eval` 将字符串转化为对应的数据类型,例如将表示列表的字符串转回列表。同时,文章深入讲解了 `eval` 的工作机制,包括根据本地和全局变量对字符串进行计算的能力。此外,还提醒了命名变量时需避免覆盖内置类名(如 `str`、`int`、`list`)的重要性,以免影响程序正常运行。最后,简要提及字符串和列表索引中负数的应用,并为读者提供了进一步学习的资源链接。
124 2