我讀一個朋友的代碼,我不爲什麼有時理解(長度= 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)
之間的區別?
我讀一個朋友的代碼,我不爲什麼有時理解(長度= 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將填補參數,由左到右,即使這些PARAMATERS是關鍵字參數。
大概,你正在使用SQLAlchemy查看代碼; String()
type恰好具有該簽名; length
是第一個參數:
class sqlalchemy.types.String(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)
如果這是什麼樣子 - a SQLAlchemy definition of a string type column - 那麼,唯一的區別明晰。有些人說這是不必要的冗長,但它很好地提醒了你的參數在你學習,重構很多或者有很長的參數列表時意味着什麼。
你可以閱讀更多的關鍵字參數這裏
http://docs.python.org/2/tutorial/controlflow.html#keyword-arguments
http://docs.python-guide.org/en/latest/writing/style.html#function-arguments
因此,如果它們是相同的,你能想到的任何理由爲什麼他會在兩者之間交替? – RockJake28
@ RockJake28:糟糕的短期記憶? –
@ RockJake28:真的,沒有理由相互使用。也許關鍵字使用版本可以被看作是自我記錄。 –