Python booster

这一页会给你一个温暖的感觉在你的胃里。

Non-Basic Python features

Theano不使用你的祖父的python。

  • 属性

    一个具有get和set方法的特定属性,python自动调用。

    请参阅[http://www.python.org/doc/newstyle/新样式类]。

  • 静态方法vs.类方法与实例方法

  • 装饰:

    @f
    def g():
      ...
    

    在每次调用g之前运行函数f。参见PEP 0318staticmethod是一个特定的装饰器,因为python 2.2

  • __metaclass__ is kinda like a decorator for classes. 它在定义类后运行元类__init__

  • setattr + getattr + hasattr

  • *args是C ++中像argv的元组,**kwargs是关键字args版本

  • pass是无操作。

  • 函数(函数对象)也可以具有属性。这种技术通常用于定义函数的错误消息。

    >>> def f(): return f.a
    >>> f.a = 5
    >>> f()
    5
    
  • 关于互导入的警告:

    • 脚本a.py文件定义了类A.
    • 脚本a.py导入文件b.py
    • 文件b.py导入a,并实例化a.A()
    • 脚本a.py实例化自己的A(),并将其传递给b.py中的函数
    • 该函数将其参数看作是类型__main __。A,而不是a.A.

    顺便说一句,这种行为是将自动测试放在不同文件中的主要原因之一。

    如果所有测试用例直接放入.py,那么在测试用例期间,通过单元测试实例化的所有.py类将具有类型__main__.<classname>类型<file>.<classname>这应该永远不会发生在正常使用,并可能导致问题(像你/你正在经历的一个)。