Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0213
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在:
- 个人网站: `https://oeasy.org`
- 蓝桥云课: `https://www.lanqiao.cn/courses/3584`
- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
- Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次我们研究了函数作为参数
- 函数本质上是一个函数对象
- 是一个callable的对象
- 也有类型、地址
- 我们把函数作为实参传进去之后
- 可以函数中完成调用
- 这某种程度实现了抽象
- 具体做什么操作是由函数参数决定
- 我可以访问别的模块的参数么🤔
- main.py
import my_module
print(a)- my_module.py
global a
a = oeasy- 运行 main.py
- 不能直接找到a
- my_module模块内
- 全局可见的变量a
- 即使声明了global
- 在main.py中也不可见
- 那怎么才能看见这个a变量呢?
- 只要说清楚a是哪里的a就可以了
- a是my_module模块里面的a
- 如果a是在函数里声明的global变量
- 在main.py里面可以访问么?
- 函数fun中
- 声明了a 为
- global全局类型
- 在main.py中还是找不到
- 还是得在主程序部分定义变量
- 确实可以通过名字空间来访问my_module的变量a
- 如果我导入两个模块呢?
- 里面都有变量a
- my_module_2.py
a = "o2z"
- 2个文件分别导入
- 2个a分别属于2个不同的模块
- 这样也就可以用名字空间(namespace)区分不同的变量来源
- 导入的模块也可以通过inspect观察么?
- 尝试一下
import my_module
import inspect
members = inspect.getmembers(my_module)
for element in members:
print(element)- 尝试运行
- 可以找到
- 这样确实可以观察到模块的一些信息
__doc__文档手册信息__file__文件来源- 甚至anoterh模块的全局(global)变量i
- 使用模块名字空间(namespace)有什么意义呢
- 帮助文件中
- 用名字空间
- 区分不同的函数来源
- 如果用from ... import...呢
from my_module import a
from my_module_2 import a
print(a)- 运行
- 执行结果是o2z
- 这如何理解呢?
- 解决方式
- from ... import ... as ...
- 尝试修改 代码
- 能将两个a分别输出
- 这次我们研究了文件模块(module)
- 不同的模块有各自的全局(global)变量字典
- import A之后
- 可以用A.a引用A模块内的全局(global)变量
- 也可以引入(import)别的模块的全局(global)变量
- 彼此不会互相影响
- 如果都使用from A import a这种模式
- 可能a会被其他的模块中a覆盖
- 这有点危险
- 各种数据来自不同的名字空间
- time
- math
- oeasy
__builtins__
- 已经有一些比较成熟的模块了
- 如何理解这些已经内建好的模块呢?🤔
- 下次再说👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。















