python中的对象
在python中,一切都是对象。每个对象由:标识(identity),类型(type),value(值)组成
- 标识用于唯一标识对象,通常对应于对象在计算机内存中的地址。使用内置函数id(obj)可返回对象obj的标识。
- 类型用于表示对象存储的数据类型。类型用于限制对象的取值范围以及可执行的操作。可以使用type(obj)获取对象的所属类型。
- 值表示对象所存储的数据的信息。使用print(obj)可以直接打印出值。
对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作
python是动态类型语言
变量不需要显示声明类型。根据变量引用的对象,python解释器可以自动确定数据类型
python是强类型语言
每个对象都有数据类型,只支持该类型支持的操作。
del用来主动删除不用的变量。当变量不再被引用时,会被垃圾回收。
x=y=123 链式赋值
a,b=10,20
python不支持常量,没有语法规则限制改变一个常量的值
python中可以通过time.time()获得当前时刻,返回的值以秒为单位,带微妙精度的浮点数。
封装JsonRpc请求:
from typing import Callable
from functools import wraps
from hulk.http import smart_payload
from inspect import signature, _empty
def rpc_method(method_handle: Callable[[str], str]=None):
“”“用于rpc接口,将会把函数的参数直接透传给rpc方法”""
def wrapper(func):
@wraps(func)
def _wrapper(self, *args, **kwargs):
func(self, *args, **kwargs)
# 取参数的默认值
parameters = signature(func).parameters
kds = {parameter.name: parameter.default for _, parameter in parameters.items() if parameter.default
is not _empty and parameter.name != “self”}
kds.update(kwargs)
expected_parameters = func.code.co_varnames[1:] # ignore self
if len(args) < len(expected_parameters):
unreceived_parameters = expected_parameters[len(args):] # 未接收到的参数名称
args = list(args)
[args.append(kds[p]) for p in unreceived_parameters]
method = func.name
if method_handle is not None:
method = method_handle(func.name)
return getattr(self, “call”)(method, *args) # 传参都是以array的形式
return _wrapper
return wrapper
def rpc_pack_params(method_handle: Callable[[str], str]=None, param_handle: Callable[[str], str]=None,
remove_null=False):
“”“将包装接口的参数组装成dict,传入json rpc接口”""
def wrapper(func):
@wraps(func)
def _wrapper(self, *args, **kwargs):
func(self, *args, **kwargs)
obj = smart_payload(func)(self, *args, **kwargs)
method = func.name
if method_handle is not None:
method = method_handle(func.name)
if param_handle:
obj = {param_handle(k): v for k, v in obj.items()}
if remove_null:
obj = {k: v for k, v in obj.items() if v is not None}
return getattr(self, “call”)(method, obj)
return _wrapper
return wrapper