import 与from import注意事项

sound/                          顶层包
      __init__.py               初始化 sound 包
      formats/                  文件格式转换子包
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  声音效果子包
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  filters 子包
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

  

注意点一

1  import sound.effects.echo

import 后到某一py文件,正确,但使用时必须用全名,即sound.effects.echo,最后一项不能是方法,类或者变量名

注意点二

  import sound.effects     与    from sound.effects import *   

上两语句看起来都是把sound文件夹下的effects下的内容都导入,但是你会发现,第一条和第二条语句,就算是用全名,也访问不到effects里面的py文件,当然访问不到py文件里的方法。原因是没有配置effects下的__init__.py,这里需要注意,这两条语句配置方式不同:

方式一:

在effects包中的__init__.py配置from .echo import f    (这里f表示echo.py中的方法),第一条语句就可以顺利通过sound.effects.echo.f()或者直接sound.effects.f()访问f了,第二条语句可以直接echo.f()或者f()来访问了。

方式二:

在effects包中的_init__.py配置__all__=['echo'],此方法与上述方法类似,就是告诉python,在导入包effects时,把[]的内容给我一起导入(此时只导入echo)。不过区别是,第一条语句只能用sound.effects.echo.f(),第二条语句只能用echo.f()来访问f

------------------------

这两种方式体现了出,只要当一个包里有__init__.py时,并且配置了其内容,python才把这个包导入相应的内容,若一个包中没有__init__.py,python会当这个包为一个普通的包,不是一个python包。


from sound import effects

对于这种形式,必须走方式一,方式二不管用


注意点三  

假设我们想使用numpy里的zeros()方法:

              import numpy

             numpy.zeros()

或者

from numpy import zeros
a=zeros()
但不可以:

import numpy.zeros

原因上面注意一提到过,不做过多描述。

这里想解释的是,numpy这个包为什么可以直接调用方法zeros?

根据注意点二来看,模型应该是注意点二第一条语句,又配置了方式一。

我们来找一个这个init文件:

首先我能发现提示zeros来自numpy.core.multiarray.

打开numpy的__init__.py文件,发现确实有,然后我打开core文件夹想找下multiarray,却没有找到,



然后看看core的__init__.py文件,发现有这句  ,from是从当前路径找multiarray呀。我core文件夹的当前路径没有multiarray,怎么回事呢??这个问题真是奇怪了,求大神解答



 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值