python怎样开始做项目_Python项目是如何设置的?

为了给您一个典型的Python模块的源代码示例,这里有一些解释。这是一个名为“的文件”淡色.py". 这不是整个文件,只是一些部分,让你知道发生了什么。在#!/usr/bin/env python

这是告诉shell如何执行这个文件的标准第一行。说/usr/bin/env python而不是/usr/bin/python告诉shell通过用户的路径找到Python;所需的Python很可能在~/bin或{}中。在

^{pr2}$

如果文件中的第一个内容是字符串,则它是模块的docstring。docstring是在项开始后立即出现的字符串,可以通过其__doc__属性来访问它。在本例中,由于它是模块的docstring,如果用户使用import Dims导入该文件,那么Dims.__doc__将返回此字符串。在# Units

MM_BASIC = 1500000

MILS_BASIC = 38100

IN_BASIC = MILS_BASIC * 1000

在一个名为PEP (Python Enhancement Proposal) 8的文档中,有很多关于格式化和命名约定的好指南。这些是模块级变量(实际上是常量),所以它们都是用下划线大写的。不,我没有遵守所有的规则,旧习惯很难改掉。既然你刚开始新的生活,那就跟着PEP 8吧,除非你做不到_SCALING = 1

_SCALES = {

mm_basic: MM_BASIC,

"mm": MM_BASIC,

mils_basic: MILS_BASIC,

"mil": MILS_BASIC,

"mils": MILS_BASIC,

"basic": 1,

1: 1

}

这些模块级变量的名称中有前导下划线。这给了他们有限的“隐私”,因为import Dims不允许您访问{}。但是,如果需要处理它,可以显式地说import Dims._SCALING as scaling。在def UnitsToScale(units=None):

"""Scales the given units to the current scaling."""

if units is None:

return _SCALING

elif units not in _SCALES:

raise ValueError("unrecognized units: '%s'." % units)

return _SCALES[units]

UnitsToScale是模块级函数。请注意docstring以及默认值和异常的使用。在默认值声明中,=周围没有空格。在class Length(object):

"""A length. Makes unit conversions easier.

The basic, mm, and mils properties can be used to get or set the length

in the desired units.

>>> x = Length(mils=1000)

>>> x.mils

1000.0

>>> x.mm

25.399999999999999

>>> x.basic

38100000L

>>> x.mils = 100

>>> x.mm

2.54

"""

类声明。注意docstring中有一些类似于Python命令行命令的内容。这些注意事项称为doctests,因为它们是docstring中的测试代码。稍后再谈这个。在def __init__(self, unscaled=0, basic=None, mm=None, mils=None, units=None):

"""Constructs a Length.

Default contructor creates a length of 0.

>>> Length()

Length(basic=0)

Length() or Length() creates a length with the given

value at the current scale factor.

>>> Length(1500)

Length(basic=1500)

>>> Length("1500")

Length(basic=1500)

"""

# Straight copy

if isinstance(unscaled, Length):

self._x = unscaled._x

return

# rest omitted

这是初始值设定项。与C++不同,只有一个,但可以使用默认参数使其看起来像几个不同的构造函数可用。在def _GetBasic(self): return self._x

def _SetBasic(self, x): self._x = x

basic = property(_GetBasic, _SetBasic, doc="""

This returns the length in basic units.""")

这是一个属性。它允许您拥有getter/setter函数,同时使用与访问任何其他数据成员相同的语法,在本例中,myLength.basic = 10与{}执行相同的操作。因为可以这样做,所以默认情况下应该为数据成员编写getter/setter函数。直接对数据成员进行操作。如果以后需要getter/setter函数,可以将数据成员转换为属性,模块的用户不需要更改代码。注意,docstring在属性上,而不是getter/setter函数上。在

如果您有一个只读属性,可以使用property作为装饰器来声明它。例如,如果上面的属性是只读的,我会写:@property

def basic(self):

"""This returns the length in basic units."""

return self._x

请注意,属性的名称是getter方法的名称。您还可以在Python2.6或更高版本中使用decorator来声明setter方法。在def __mul__(self, other):

"""Multiplies a Length by a scalar.

>>> Length(10)*10

Length(basic=100)

>>> 10*Length(10)

Length(basic=100)

"""

if type(other) not in _NumericTypes:

return NotImplemented

return Length(basic=self._x * other)

这将重写*运算符。请注意,您可以返回特殊值NotImplemented来告诉Python该操作没有实现(在本例中,如果您试图乘以字符串之类的非数字类型)。在__rmul__ = __mul__

因为代码和其他方法一样只是一个值,所以可以将一个方法的代码分配给另一个方法。这行代码告诉Python,something * Length操作使用与Length * something相同的代码。D我们自己。在

既然已经声明了类,我就可以回到模块代码了。在本例中,我有一些代码,我只想在这个文件是自己执行的情况下运行,而不是作为模块导入的。因此,我使用以下测试:if __name__ == "__main__":

然后,if中的代码只在直接运行时执行。在这个文件中,我有代码:import doctest

doctest.testmod()

这将遍历模块a中的所有docstringnd查找看起来像Python提示的行,后面有命令。下面的行被假定为命令的输出。如果命令输出其他内容,则认为测试失败,并打印实际输出。阅读doctest模块文档以了解所有详细信息。在

关于医生的最后一点:它们很有用,但它们不是最通用或最彻底的测试。对于这些,您需要阅读unittests(即unittest模块)。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值