Python基础

 

Python基础

hanlray@gmail.com
Revision: 0.03 Date: 2006/05/04
  • 对于data attribute,local variable,当它们第一次被赋值时才存在
      class MSVCCompiler :
        def __init__(self):
          self.initialized = False
      
        def initialize(self):
          self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX', '/DNDEBUG']
          self.initialized = True
    
    如果这样调用:
      compiler = MSVCCompiler()
      compiler.compile_options.extend()
    
    你会得到AttributeError: MSVCCompiler instance has no attribute 'compile_options' 因为此时compile_options还未被赋值,故还不存在,而当调用了initialize后就不会有这样的问题了。

     

  • import用法

     

    有package如下:
      Sound/                          
            __init__.py              
            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/              
                    __init__.py
                    equalizer.py
                    vocoder.py
                    karaoke.py
                    ...
    
    
    • import Sound.Effects.echo

       

      假如echo中有函数echofilter,则通过Sound.Effects.echo.echofilter来引用
    • from Sound.Effects import echo

       

      此时要引用echofilter函数,通过echo.echofilter即可。
    • from Sound.Effects.echo import echofilter

       

      此时可直接引用echofilter,可用import *来一次引入echo中的所有定义
    • import Sound.Effects

       

      引入Effects package,如果在该package中定义了foo函数(通过Sound/Effects/__init__.py),则可通过Sound.Effects.foo来引用,但是不能引用该package的下层元素(包括module和subpackage),比如Sound.Effects.echo,python不支持从package到下层的引用
    • from Sound import Effects

       

      同上,要引用Effects里的名字不用加Sound的限定

       

    • 不能直接引入module、pakcage中定义的名字

       

      如在Sound/__init__.py中定义了foo函数,则import Sound.foo是不合法的;同理import Sound.Effects.echo.echofilter也是不对的;应该通过from来引入这些定义

       

      由此可见,import的语法是相当灵活的,它可以引入package、module、module中的定义、以及package中的定义,无论在哪种情况下都是把import后跟的名字引入到当前符号表中,如引入的是module/package则必须通过该名字来引用其中定义的名字(函数、类或变量),不管该名字是module/package的限定名(名字中包含其所在的package名)还是非限定名(通过from语句可以写非限定名)。

       

  • Python's Search Path

     

    python变量sys.path的值是一系列目录,python在这些目录下搜索from...import语句里的package和module;运行时可以很容易改变该变量的值,但是其初始值是由什么决定的呢?interpreter本身有个缺省值,这是在安装后就确定的了,在Linux下一般是:
      >>> sys.path
      ['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2', 
       '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload', 
       '/usr/local/lib/python2.3/site-packages']
      >>>
    
    然后python还会在这些目录下搜索.pth文件,把这些文件里指定的目录也加进sys.path。

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值