Tapez automatiquement les paramètres de diffusion en Python

De fond:
J'ai principalement d'exécuter des scripts python à partir de la ligne de commande dans les pipelines et si mes arguments sont toujours les chaînes qui doivent être de type coulé du type approprié. Je fais beaucoup de petits scripts chaque jour et de conversion de type de chaque paramètre pour chaque script prend plus de temps qu'il ne le devrait.

Question:
Est-il une manière canonique pour automatiquement le type de fonte paramètres d'une fonction?

Ma Façon:
J'ai développé un décorateur pour faire ce que je veux si il n'y a pas une meilleure façon. Le décorateur est l'autocast fxn ci-dessous. La décorées fxn est fxn2 dans l'exemple. Notez qu'à la fin du bloc de code j'ai passé 1 et 2 comme des chaînes de caractères et si vous exécutez le script, il va ajouter automatiquement. Est-ce une bonne façon de le faire?

def estimateType(var):
    #first test bools
    if var == 'True':
            return True
    elif var == 'False':
            return False
    else:
            #int
            try:
                    return int(var)
            except ValueError:
                    pass
            #float
            try:
                    return float(var)
            except ValueError:
                    pass
            #string
            try:
                    return str(var)
            except ValueError:
                    raise NameError('Something Messed Up Autocasting var %s (%s)' 
                                      % (var, type(var)))

def autocast(dFxn):
    '''Still need to figure out if you pass a variable with kw args!!!
    I guess I can just pass the dictionary to the fxn **args?'''
    def wrapped(*c, **d):
            print c, d
            t = [estimateType(x) for x in c]
            return dFxn(*t)
    return wrapped

@autocast
def fxn2(one, two):

   print one + two 

fxn2('1', '2')      

EDIT: Pour la personne qui vient ici et veut que la mise à jour et concis version de travail rendez-vous ici:

https://github.com/sequenceGeek/cgAutoCast

Et ici est aussi rapide version de travail basé sur la ci-dessus:

def boolify(s):
    if s == 'True' or s == 'true':
            return True
    if s == 'False' or s == 'false':
            return False
    raise ValueError('Not Boolean Value!')

def estimateType(var):
    '''guesses the str representation of the variables type'''
    var = str(var) #important if the parameters aren't strings...
    for caster in (boolify, int, float):
            try:
                    return caster(var)
            except ValueError:
                    pass
    return var

def autocast(dFxn):
    def wrapped(*c, **d):
            cp = [estimateType(x) for x in c]
            dp = dict( (i, estimateType(j)) for (i,j) in d.items())
            return dFxn(*cp, **dp)

    return wrapped

######usage######
@autocast
def randomFunction(firstVar, secondVar):
    print firstVar + secondVar

randomFunction('1', '2')

source d'informationauteur sequenceGeek