show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次我们研究了函数作为参数
- 函数本质上是一个函数对象
- 是一个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__
- 已经有一些比较成熟的模块了
- 如何理解这些已经内建好的模块呢?🤔
- 下次再说👋