Class foo有一个酒吧.条形码在访问之前不会加载.进一步访问bar应该不会产生任何开销.
class Foo(object):
def get_bar(self):
print "initializing"
self.bar = "12345"
self.get_bar = self._get_bar
return self.bar
def _get_bar(self):
print "accessing"
return self.bar
Run Code Online (Sandbox Code Playgroud)
是否可以使用属性或更好的属性来执行此类操作,而不是使用getter方法?
目标是在所有后续访问中没有开销的延迟加载......
我有一个这样的发电机:
def iterate_my_objects_if_something(self):
for x in self.my_objects:
if x.something:
yield x
Run Code Online (Sandbox Code Playgroud)
我称之为:
for x in self.iterate_my_objects_if_something():
pass
Run Code Online (Sandbox Code Playgroud)
在没有任何东西要返回的情况下,这会尝试迭代NoneType并抛出异常.
如何返回空发电机?
我需要帮助创建一个专门的线碰撞算法,允许在某些角度"切角".
在下面的图片中,让蓝色方块代表玩家,黑色方块代表墙壁.然后,白色方块表示玩家"视线"中的方块(有效方块),灰色方块是玩家"视线"外的方块(无效方块):

第二张图片是我们开始偷工减料时事情变得更有趣的地方:

让我们仔细看看这条线尽管经过墙角但仍允许这条线:

该行是允许的,因为:
不允许使用相反的行,因为比率(在这种情况下为dy/dx)太低:

或许我应该谈谈进入的角度与广场的退出......
我遇到的主要问题是我无法弄清楚如何对网格上两点之间以任意角度行进的向量进行推广.我无法决定是否应该使用三角法或什么.到目前为止,我最接近的解决方案是使用每个方格的线截取的小数部分作为dx和dy,并根据线的斜率和它所在的象限检查是否允许它.
有人可以帮忙吗?
我也看过借用或从其他线算法开始,但我没有发现任何有用的东西.我见过的大多数人希望从(x1,y1)到(x2,y2)的行与从(x2,y2)到(x1,y1)的行相同,这使得这个问题大不相同.
language-agnostic algorithm trigonometry collision-detection line
我最近设置了以下logrotate作业:
/var/log/app.*.log {
daily
rotate 7
copytruncate
nocompress
dateext
}
Run Code Online (Sandbox Code Playgroud)
我发现当我去查看我的日志文件时,他们从一些二进制垃圾开始.我必须grep使用--text并在vim中加载文件需要永远.
这是预期的吗?我能做些什么来阻止它吗?
注意:以前的日志是utf8文本文件.