Python unpacking expands an iterable into positional arguments or a mapping into keyword arguments at a call boundary.
Python unpacking: keyword collisions and strict record pairing
Operation contract
The dispatch operation accepts a named region and an optional priority. Passing two mappings with the same keyword raises TypeError before the function body runs. That differs from building a merged dictionary: the latter can overwrite earlier values. The paired receipt import uses strict zip so a missing amount fails instead of silently truncating a record.
Failure and ownership boundary
Strict zip can yield earlier pairs before detecting unequal lengths. The fixture materializes all pairs before any publication, so a length error cannot leave a half-written ledger. Large or infinite input needs an explicit ingestion bound rather than this eager list. Python collection exercise: reject repeated receipt IDs before committing state and Python SQLite project: transactional batches, duplicate IDs and reopen checks apply the same validate-before-write rule.
Working program
def dispatch(*, region, priority=0):
return f"{region}:{priority}"
print(dispatch(**{"region": "DEL"}, **{"priority": 2}))
try:
dispatch(**{"region": "DEL"}, **{"region": "BOM"})
except TypeError:
print("duplicate keyword rejected")
try:
list(zip([41, 42], [125], strict=True))
except ValueError:
print("incomplete record batch rejected")Output
DEL:2
duplicate keyword rejected
incomplete record batch rejectedCosts and limits
Building n pairs takes O(n) time and storage. Mapping expansion copies argument references into call bookkeeping; it does not copy the objects supplied as values.
Common Mistakes
- Dictionary merging and call-time duplicate keywords have different rules.
- Do not publish strict-zip pairs before exhaustion when the batch must be atomic.
Connected lessons
Python function arguments: avoid shared mutable defaults, Python collection exercise: reject repeated receipt IDs before committing state, Python SQLite project: transactional batches, duplicate IDs and reopen checks.
Check this related boundary
Python starred unpacking: allocate the middle and reject wrong arity.
