$ python --version
Python 2.7.15
$ type test.py
import random
while True:
a = random.uniform(0, 1)
b = a ** 2
c = a * a
if b != c:
print "a = {}".format(a)
print "a ** 2 = {}".format(b)
print "a * a = {}".format(c)
break
$ python test.py
a = 0.145376687586
a ** 2 = 0.0211343812936
a * a = 0.0211343812936
Run Code Online (Sandbox Code Playgroud)
我只能在Windows的Python版本上重现这一点 - 确切地说:Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)] on win32 …
我目前正在设计一个通过操纵声明的字段来大量利用反射的类.因此,很多方法在它们的身体方面都有一些共同点,这有希望用这个java代码来说明:
import java.lang.reflect.Field;
public class foo {
public void foo1(/* arguments1 */) {
for (Field f : getClass().getDeclaredFields()) {
// do some stuff using arguments1
}
}
public void foo2(/* arguments2 */) {
for (Field f : getClass().getDeclaredFields()) {
// do some stuff using arguments2
}
}
public void foo3(/* arguments3 */) {
for (Field f : getClass().getDeclaredFields()) {
// do some stuff using arguments3
}
}
//and so on...
}
Run Code Online (Sandbox Code Playgroud)
根据这个类最终包含的方法数量,这可能被视为设计缺陷吗?如果我想使用getFields()而不是getDeclaredFields()例如,我将需要替换每一次出现getDeclaredFields().这对我来说听起来不是一个好的编程习惯.在我的情况下,这可能不是一个非常现实的情况,但为了感兴趣,我想知道是否存在解决此问题的设计模式或概念.
[编辑]
为了避免额外的误解:循环中的操作取决于foo1,foo2等给出的参数.并且这些参数对于每个方法并不总是相同.我很难说明这个事实,sry.我改进了给定的代码以更好地演示它.
在十六进制编辑器中查看 PE 文件时,我经常遇到节表和第一节之间的一些字节,这对我来说没有意义。就我而言,应该有一个 00 字节的填充以适应对齐。但是,这是一个屏幕截图,它演示了相反的情况:
事实证明,突出显示的块几乎是绑定导入表。但我仍然很困惑。为什么这个表不在一个节中?这是总是如此还是只是某个编译器/链接器的规范?我没有找到有关此特定问题的任何文档。关于这个主题的所有内容基本上都说:
... 等等
在我遇到这个问题之前,我什至不知道这些部分之外可能还有其他东西(当然,除了我上面列出的那些)。
[编辑]
概念证明(因为 Mox 不相信我):
