Python neni java.
Varargs a pole a slovnik jsou priblizne zamenitelne v tomto kontextu, nekdy je pohodlnejsi a prehlednejsi pouzit ty varargs, odkud si funkce po ceste vyzvedavaji sve specificke parametry a naopak pridavaji jine a ta posledni zpracuje, co zbyde.
Ackoli to jde zapsat ruznymi zpusoby, nekdy je tento prehlednejsi (a jindy zase ne). Povazuju za dobre znat moznosti jazyka i do extremu, ale pouzivat je spis umirnene, pokud to neznamena vyrazne zeslozitit kod.
Treba ten muj priklad s html tagama samozrejme jde prepsat pro predavani pole (a to pole nekde vytvorit), nebo dokonce immutable objektu (a ten nekde vytvorit a definovat), ale IMHO takovyto zapis je zrovna v tomto pripade prehlednejsi.
A pokud by nekde niz v print_tag byla funkce na manipulovani treba tech class, tak muze mit v hlavicce (... class="", **kwargs) a rovnou se vi, ze zrovna tahle funkce asi ty class nejak pouziva a zbytek asi proste preposila dal v retezci volani. Zatimco jine funkce se class zabyvat nemusi a jen ji predavaji, pokud je. U nekterych frameworku tento pristup dava velky smysl a vyrazne zvysuje citelnost.