这是bb.py文件#方式一
"""import aa #只在第一次导入时才执行my_module.py内代码,此处的显式效果是只打印一次'from the my_module.py',当然其他的顶级代码也都被执行了,只不过没有显示效果.
import aa
import aa
import aa
# python的优化手段是:第一次导入后就将模块名加载到内存了,
# 后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,
# 不会重新执行模块内的语句"""
#方式二
"""#测试一:money与aa.money不冲突
每个模块都是一个独立的名称空间,定义在这个模块中的函数,
把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,
就不用担心我们定义在自己模块
中全局变量会在被导入时,与使用者的全局变量冲突
#bb.py
import aa
money=10
print(aa.money)
'''
啦啦啦啦啦啦啦啦
1000
'''"""
#方式三
"""#测试二:read1与aa.read1不冲突
#demo.py
import aa
def read1():
print('这是本地模块哈哈哈')
aa.read1()
read1()
'''啦啦啦啦啦啦啦啦
bb->read1->money 1000
这是本地模块哈哈哈
'''"""
#方式四
"""执行bb.change()操作的全局变量money仍然是aa中的
#demo.py
import aa
money=1
aa.change()
print(aa.money)
print(money)
'''
啦啦啦啦啦啦啦啦
0
1
'''"""
#1.为源文件(aa模块)创建新的名称空间,在aa中定义的函数和方法若是使用到了global时访问的就是这个名称空间。#2.在新创建的命名空间中执行模块中包含的代码,见初始导入import aa
#方式五
"""import aa as c # 给引入aa的模块给aa模块 取一个别名 c
print(c.money)"""
#方式六
"""# 导入的函数read1,执行时仍然回到aa.py中寻找全局变量money
from aa import read1
money=8222
read1()
'''
啦啦啦啦啦啦啦啦
bb->read1->money 1000
'''"""
#方式七
"""#测试二:导入的函数read2,执行时需要调用read1(),仍然回到aa.py中找read1()
#demo.py
from aa import read2
def read1():
print('==========')
read2()
'''
啦啦啦啦啦啦啦啦
bb->read2 calling read1
bb->read1->money 1000
'''"""
#方式八
"""#测试三:导入的函数read1,被当前位置定义的read1覆盖掉了
#demo.py
from aa import read1
def read1():
print('==========')
read1()
'''
啦啦啦啦啦啦啦啦
==========
'''"""
#方式九
"""# 要特别强调的一点是:python中的变量赋值不是一种存储操作,而只是一种绑定关系
from aa import money,read1
money=100 #将当前位置的名字money绑定到了100
print(money) #打印当前的名字
read1() #读取aa中的名字money,仍然为1000
'''
啦啦啦啦啦啦啦啦
100
bb->read1->money 1000
'''"""
#方式十
"""# 多模块导入
from aa import (read1,read2,money)
print(money)"""
#方式十一
"""# * 全部导入
from aa import * #将模块my_module中所有的名字都导入到当前名称空间
print(money)
print(read1)
print(read2)
print(change)
啦啦啦啦啦啦啦啦
1000
"""