python syntactic suger

11510 ワード

目次
  • 装飾器原函数名
  • を変更しない
  • redisモジュール
  • StrictRedis
  • Redis
  • json解包float回転str
  • アクセラレータは元の関数名を変更しません
    最下層関数の関数名を変更し、関数属性__name__を再割り当て
    # encoding=utf8
    
    def deco1():
        def func1(func):
            def func2(*args, **kwargs):
                return func(*args, **kwargs)
            func2.__name__ = func.__name__
            return func2
        return func1
    
    def deco2():
        def func1(func):
            def func2(*args, **kwargs):
                return func(*args, **kwargs)
            return func2
        return func1
    
    @deco2()
    def main(*args, **kwargs):
        pass
    
    print(main.__name__)
    
    @deco1()
    def main(*args, **kwargs):
        pass
    
    print(main.__name__)
    
    >>> func2
    >>> main
    

    redisモジュール
    2.9.1バージョンでは、redisクライアントにはStrictRedisRedisの2つのクラスがあり、同じメソッドのパラメータの順序と名前にはいくつかの違いがあります.特に注意してください.
    StrictRedis
    def lrem(self, name, count, value):
    

    Redis
    def lrem(self, name, value, num=0):
    

    json解包float回転str
    json列に浮動小数点型データがある場合、正確にパケットを解くことはできません
    import json
    # json.__version__ = 1.9
    j = '''{"float": 9.9}'''
    print json.loads(j)
    >>> {u'float': 9.9000000000000004}
    
    json.loadsメソッドのparse_floatパラメータを設定することで、浮動小数点型データを文字列に変換できます.
    print json.loads(j, parse_float=lambda x: x)
    >>> {u'float': '9.9'}
    
    json.loads関数には、parse_float != Noneの場合、復号時に浮動小数点型が整形に変換されることが示されている.同様に、parse_intパラメータが設定されている場合も同様の前処理が行われる
    print json.loads.__doc__
    >>> ...
    	``parse_float``, if specified, will be called with the string
        of every JSON float to be decoded. By default this is equivalent to
        float(num_str). This can be used to use another datatype or parser
        for JSON floats (e.g. decimal.Decimal).
        ...
    
    json.decoder.py次の変換あり
    def JSONNumber(match, context):
        match = JSONNumber.regex.match(match.string, *match.span())
        integer, frac, exp = match.groups()
        if frac or exp:
            fn = getattr(context, 'parse_float', None) or float
            res = fn(integer + (frac or '') + (exp or ''))
        else:
            fn = getattr(context, 'parse_int', None) or int
            res = fn(integer)
        return res, None
    pattern(r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?')(JSONNumber)