Есть одна последняя языковая особенность, где важно различение. Рассмотрим следующую функцию:
def foo(*positional, **keywords):
print "Positional:", positional
print "Keywords:", keywords
Аргумент *positional
будет хранить все позиционные аргументы, переданные foo()
, без ограничения на количество, которое вы можете предоставить.
>>> foo('one', 'two', 'three')
Positional: ('one', 'two', 'three')
Keywords: {}
Аргумент **keywords
будет хранить любые ключевые аргументы:
>>> foo(a='one', b='two', c='three')
Positional: ()
Keywords: {'a': 'one', 'c': 'three', 'b': 'two'}
И, конечно, вы можете использовать оба одновременно:
>>> foo('one','two',c='three',d='four')
Positional: ('one', 'two')
Keywords: {'c': 'three', 'd': 'four'}
Эти функции используются редко, но иногда они очень полезны, и важно знать, какие аргументы являются позиционными или ключевыми словами.