我正在阅读朋友的代码,但我不明白为什么有时他会使用以下内容:
aFieldInATable = db.Column(db.String(6), nullable=False)
其他时候他使用:
anotherField = db.Column(db.String(length=255), nullable=False)
db.String(6)
和 和有什么不一样db.String(length=6)
?
我正在阅读朋友的代码,但我不明白为什么有时他会使用以下内容:
aFieldInATable = db.Column(db.String(6), nullable=False)
其他时候他使用:
anotherField = db.Column(db.String(length=255), nullable=False)
db.String(6)
和 和有什么不一样db.String(length=6)
?
一个使用位置参数,另一个使用关键字参数。
如果String()
对象定义有length
作为第一个参数,这两个版本的含义相同,因为 Python 将从左到右填充参数,即使这些参数是关键字参数。
据推测,您正在查看使用 SQLAlchemy 的代码;该String()
类型恰好具有该签名;length
是第一个参数:
class sqlalchemy.types.String(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)
如果这就是它的样子——字符串类型列的 SQLAlchemy 定义——那么唯一的区别就是显式性。有人说这是不必要的冗长,但它很好地提醒了您在学习、大量重构或拥有一长串参数时参数的含义。
您可以在此处阅读有关关键字参数的更多信息
http://docs.python.org/2/tutorial/controlflow.html#keyword-arguments
http://docs.python-guide.org/en/latest/writing/style.html#function-arguments