Python 作业。是否可以区分值和变量?
Python assignment. Is it possible to distinguish between value and variable?
抱歉,我想不出更好的标题,命名我的 use-example 一个模糊的字典不会解释任何事情。
我想写一个模糊的字典。键将是整数元组,但检索将检索该键的值 以及相邻键的值 所以
fd = FuzzyDict()
fd[(0,0)] = {x1,x2,x3}
fd[(0,1)] = (x4,x5}
fd[(1,0)] = {x6,x7,x8}
print(f[(0,0)])
# gives {x1,x2,x3,x4,x5,x6,x7,x8}
我可以做到,只需为我的 class 编写 __setitem__()
和 __getitem__()
即可
def __getitem__(self,key):
answer = {}
for nbr in neighours
answer |= self.innerdict[key+nbr]
return answer
当我写作时乐趣就开始了
fd[(0,1)] |= {x10}
# or, equivalently
fd[(0,1)] = fd[(0,1)] + {x10}
因为赋值左边的fd[(0,1]
是按变量引用赋值,右边的fd[(0,1)]
是按值赋值。如果我能实现这种分离,我的代码看起来会更优雅,否则我将不得不为 fuzzy-fetch.
编写一个普通的 __getitem__()
和一个额外的函数
有没有办法在 python 中实现这种区别?
感谢所有回复的人。正如我所想,变量和值之间没有区别。 Miyagi 先生说得最好。我选择了这个代码
import collections
class BlurredDict(collections.defaultdict):
def __init__(self,blur=(1,1)):
self.default_factory = lambda:set()
self.nbs = []
for i in range(-blur[0],blur[0]+1):
for j in range(-blur[1],blur[1]+1):
self.nbs.append( (i,j) )
def values(self,key):
answer = set()
_add = lambda a,b:tuple([x+y for x,y in zip(a,b)])
for n in self.nbs:
answer |= self[_add(key,n)]
return answer
if __name__ == "__main__":
bd = BlurredDict()
bd[(3,4)] = {34}
bd[(3,4)] |= {1000}
bd[(2,4)] = {24,0}
bd[(3,3)] = {33}
bd[(2,4)].remove(0)
print(f"{bd.values((3,4)) = }")
我的应用是模拟物理过程,其中影响随距离而减弱。此代码可以更轻松地耗尽附近的物体。
抱歉,我想不出更好的标题,命名我的 use-example 一个模糊的字典不会解释任何事情。
我想写一个模糊的字典。键将是整数元组,但检索将检索该键的值 以及相邻键的值 所以
fd = FuzzyDict()
fd[(0,0)] = {x1,x2,x3}
fd[(0,1)] = (x4,x5}
fd[(1,0)] = {x6,x7,x8}
print(f[(0,0)])
# gives {x1,x2,x3,x4,x5,x6,x7,x8}
我可以做到,只需为我的 class 编写 __setitem__()
和 __getitem__()
即可
def __getitem__(self,key):
answer = {}
for nbr in neighours
answer |= self.innerdict[key+nbr]
return answer
当我写作时乐趣就开始了
fd[(0,1)] |= {x10}
# or, equivalently
fd[(0,1)] = fd[(0,1)] + {x10}
因为赋值左边的fd[(0,1]
是按变量引用赋值,右边的fd[(0,1)]
是按值赋值。如果我能实现这种分离,我的代码看起来会更优雅,否则我将不得不为 fuzzy-fetch.
__getitem__()
和一个额外的函数
有没有办法在 python 中实现这种区别?
感谢所有回复的人。正如我所想,变量和值之间没有区别。 Miyagi 先生说得最好。我选择了这个代码
import collections
class BlurredDict(collections.defaultdict):
def __init__(self,blur=(1,1)):
self.default_factory = lambda:set()
self.nbs = []
for i in range(-blur[0],blur[0]+1):
for j in range(-blur[1],blur[1]+1):
self.nbs.append( (i,j) )
def values(self,key):
answer = set()
_add = lambda a,b:tuple([x+y for x,y in zip(a,b)])
for n in self.nbs:
answer |= self[_add(key,n)]
return answer
if __name__ == "__main__":
bd = BlurredDict()
bd[(3,4)] = {34}
bd[(3,4)] |= {1000}
bd[(2,4)] = {24,0}
bd[(3,3)] = {33}
bd[(2,4)].remove(0)
print(f"{bd.values((3,4)) = }")
我的应用是模拟物理过程,其中影响随距离而减弱。此代码可以更轻松地耗尽附近的物体。