Vale lembrar que, caso não seja possível alterar as funções, ainda dá pra passar um dicionário:
def calcular_imposto(valor_bruto, aliquota, deducoes, dependentes, estado):
# faz algo com os valores...
def calcular_salario_liquido(valor_bruto, aliquota, deducoes, dependentes, estado):
# faz algo com os valores...
# mais trocentas funções com os mesmos parâmetros...
params = { 'valor_bruto': 10, 'aliquota': 20, 'deducoes': 3, 'dependentes': 4, 'estado': 'SP' }
calcular_imposto(**params)
calcular_salario_liquido(**params)
O que faz a "mágica" são os dois asteriscos antes de params
: eles fazem o unpacking do dicionário. No exemplo acima, ele faz com que o parâmetro valor_bruto
receba o valor 10
, aliquota
receba o valor 20
e assim por diante.
Claro que se vc já tiver os valores em variáveis separadas, talvez não compense criar o dicionário. Neste caso eu ia preferir usar uma das soluções acima: a tupla que eu sugeri (caso não possa mudar as funções) ou uma classe (mas aí teria que alterar todas as funções, e dependendo do caso pode valer a pena).
De qualquer forma, esta é uma das possibilidades, mas acho que só seria "melhor" caso o dicionário já estivesse criado (por exemplo, se ele veio de algum lugar que já retorna um JSON com todos os valores).