hx0011yy 发表于 2018-8-8 07:46:00

Python30 动态导入模块/断言

#在A1.py中  mod1 = __import__('code1')#当前只导入了code1这个路径
  mod2 = __import__('code1.aa')   #这里虽然写的是'code1.aa',但是导入的也只是code1这个路径
  print (mod1)
  print (mod2)
  执行结果:
  <module 'code1' from 'E:\\python\\代码练习\\code1\\__init__.py'>
  <module 'code1' from 'E:\\python\\代码练习\\code1\\__init__.py'>
  #当前结果我们看到的虽然一样,但实际是有区别的;
  mod1 = __import__('code1')#当前只导入了code1这个路径
  mod2 = __import__('code1.aa')   #这里虽然写的是'code1.aa',但是导入的只是code1这个路径
  print (mod1.aa)
  print (mod2.aa)
  执行结果:
  <module 'code1.aa' from 'E:\\python\\代码练习\\code1\\aa.py'>
  <module 'code1.aa' from 'E:\\python\\代码练习\\code1\\aa.py'>
  #在这里可能认为我们定义变量的时候(mod2 = __import__('code1.aa')),是否加后面的'.aa'都是可以的,但请看下面的代码
  #将mod2注释掉
  mod1 = __import__('code1')
  print (mod1.aa)
  执行结果:
  Traceback (most recent call last):
  File "E:/python/代码练习/A1.py", line 4, in <module>
  print (mod1.aa)
  AttributeError: module 'code1' has no attribute 'aa'
  #可以看到单独的mod1是没有定义后面的'.aa',所以这里无法调用mod1.aa;上面的代码能调用那是因为mod2中已经定义了'.aa',所以mod1才可以调用的。
  #将mod1注释掉
  mod2 = __import__('code1.aa')
  print (mod2)
  print (mod2.aa)
  执行结果:
  <module 'code1' from 'E:\\python\\代码练习\\code1\\__init__.py'>
  <module 'code1.aa' from 'E:\\python\\代码练习\\code1\\aa.py'>
  #执行结果说明了当定义了,假如只定义了2层路径时,第1层和第2层路径都是可以访问的,但是如果只定义了1层路径时,第2层路径是不能访问的(因为根本就不知道第2层路径的内容)。
页: [1]
查看完整版本: Python30 动态导入模块/断言