以下是之前回答的综合:
from copy import deepcopy
def default(number, value = None):
if type(value) is dict or object:
return [deepcopy(value) for _ in range(number)]
else:
return [value] * number
o, p, q, r, s = default(5)
t, u = default(2, false)
v, w, x = default(3, {})
class GPU:
def __init__(self, m, p):
self.model = m
self.price = p
rtx_3080 = GPU("RTX 3080", 99999)
y, z = default(2, rtx_3080)
编辑:
尝试通过更好地处理带有 pandas/numpy 类型的可变变量来优化 deepcopy 调用。可能会错过其他一些情况。如果有人找到了更好的检查可变性的方法,请随时分享。虽然,这可能是过度工程化,无论您的用例是什么...
import builtins
from copy import deepcopy
from numbers import Number
from pandas import api, DataFrame
mutables = (dict, list, set, DataFrame)
immutables = (str, tuple, frozenset, Number)
def is_built_in_type(var):
return type(var).__name__ in dir(builtins)
def is_mutable(var):
return var is not None and (api.types.is_list_like(var) or isinstance(var, mutables) or not is_built_in_type(var))
def is_immutable(var):
return var is None or isinstance(var, immutables)
def default(number, value=None):
if is_mutable(value):
return [deepcopy(value) for _ in range(number)]
elif is_immutable(value):
return [value] * number
else:
raise ValueError("Unexpected value type")
a, b, c, d, e = default(5)
f, g, h = default(3, False)
i, j = default(2, "False")
k, l, m, n = default(4, (3, 2, 1))
o, p = default(2, 3.14159265358979)
q, r, s = default(3, [1, 2, 3])
t, u = default(2, {})
v, w, x = default(3, DataFrame({'col1': [7, 13, 42, 73, 666], 'col2': [1, 0.6, 2, 1.4, 0.3]}))
class GPU:
def __init__(self, m, p):
self.model = m
self.price = p
rtx_3080 = GPU("RTX 3080", 99999)
y, z = default(2, rtx_3080)
dicitonary['details']
,而且KeyErrors
很糟糕。此外,IDE 不会突出显示无效的键,只会突出显示变量。如果我必须使用details = dicitonary['details']
,那么我最好使用details = None
而不是这种循环字典创建、查找和 KeyErrors。 - user5170375a,b=(True,)*2
Ora=b=True
- hassanzadeh.sd