百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

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

csdh11 2025-04-07 13:20 23 浏览

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

回忆上次内容

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

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

从shell开始

  1. 我们上次有两个文件
    1. 被引用模块
    2. my_file.py
    3. 主体程序
    4. 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

  • 导入 共分成 三类
  • 标准库
  • 第三方库
  • 本地库
  • 类别之间需要一个空行
  • 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
      • 导入变量 并 重命名

  • 为什么 从模块中导入的变量 需要改名呢???
  • 下次再说
  • 蓝桥->https://www.lanqiao.cn/courses/3584
  • github->https://github.com/overmind1980/oeasy-python-tutorial
  • gitee->https://gitee.com/overmind1980/oeasypython

相关推荐

NUS邵林团队发布DexSinGrasp基于强化学习实现物体分离与抓取统一

本文的作者均来自新加坡国立大学LinSLab。本文的共同第一作者为新加坡国立大学实习生许立昕和博士生刘子轩,主要研究方向为机器人学习和灵巧操纵,其余作者分别为硕士生桂哲玮、实习生郭京翔、江泽宇以及...

「PLC进阶」如何通过编写SCL语言程序实现物料分拣?

01、前言SCL作为IEC61131-3编程语言的一种,由于其高级语言的特性,特别适合复杂运算、复杂数学函数应用的场合。本文以FactoryIO软件中的物料分拣案例作为硬件基础,介绍如何通过SCL来实...

zk源码—5.请求的处理过程一(http1.1请求方法)

大纲1.服务器的请求处理链...

自己动手从0开始实现一个分布式 RPC 框架

前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异...

MLSys’25 | 极低内存消耗:用SGD的内存成本实现AdamW的优化性能

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,...

线程池误用导致系统假死(线程池会自动销毁吗)

背景介绍在项目中,为了提高系统性能使用了RxJava实现异步方案,其中异步线程池是自建的。但是当QPS稍微增大之后却发现系统假死、无响应和返回,调用方出现大量超时现象。但是通过监控发现,系统线程数正常...

大型乘用车工厂布局规划(六大乘用车基地)

乘用车工厂的布局规划直接影响生产效率、物流成本、安全性和未来扩展能力。合理的布局应确保生产流程顺畅、物流高效、资源优化,并符合现代化智能制造和绿色工厂的要求。以下是详细的工厂布局规划要点:1.工厂布...

西门子 S7-200 SMART PLC 连接Factory IO的方法

有很多同学不清楚如何西门子200smart如何连接FactoryIO,本教程为您提供了如何使用西门子S7-200SMARTPLC连接FactoryIO的说明。设置PC和PLC之间的...

西门子博图高级仿真软件的应用(西门子博途软件仿真)

1.博图高级仿真软件(S7-PLCSIMAdvancedV2.0)S7-PLCSIMAdvancedV2.0包含大量仿真功能,通过创建虚拟控制器对S7-1500和ET200SP控制器进行仿真...

PLC编程必踩的6大坑——请对号入座,评论区见

一、缺乏整体规划:面条式代码问题实例:某快递分拣线项目初期未做流程图设计,工程师直接开始编写传送带控制程序。后期增加质检模块时发现I/O地址冲突,电机启停逻辑与传感器信号出现3处死循环,导致项目延期2...

统信UOS无需开发者模式安装软件包
统信UOS无需开发者模式安装软件包

原文链接:统信UOS无需开发者模式安装软件包...

2025-05-05 14:55 csdh11

100个Java工具类之76:数据指纹DigestUtils

为了提高数据安全性,保证数据的完整性和真实性,DigestUtils应运而生。正确恰当地使用DigestUtils的加密算法,可以实现数据的脱敏,防止数据泄露或篡改。...

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

#秋日生活打卡季#原文链接:...

Java常用工具类技术文档(java中工具类的作用)

一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...

软路由的用法(自动追剧配置)(软路由教学)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:值友98958248861环境和需求...