python syntactic suger
11510 ワード
目次装飾器原函数名 を変更しない redisモジュール StrictRedis Redis json解包float回転str アクセラレータは元の関数名を変更しません
最下層関数の関数名を変更し、関数属性
redisモジュール
2.9.1バージョンでは、redisクライアントには
StrictRedis
Redis
json解包float回転str
json列に浮動小数点型データがある場合、正確にパケットを解くことはできません
最下層関数の関数名を変更し、関数属性
__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クライアントには
StrictRedis
とRedis
の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)