在一个奇怪的事件中,我最终陷入了以下困境,我使用以下 Python 代码将 Numba 生成的程序集写入文件:
@jit(nopython=True, nogil=True)
def six():
return 6
with open("six.asm", "w") as f:
for k, v in six.inspect_asm().items():
f.write(v)
Run Code Online (Sandbox Code Playgroud)
汇编代码已成功写入文件,但我不知道如何执行它。我尝试了以下方法:
$ as -o six.o six.asm
$ ld six.o -o six.bin
$ chmod +x six.bin
$ ./six.bin
Run Code Online (Sandbox Code Playgroud)
但是,链接步骤失败并显示以下内容:
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000f0
six.o: In function `cpython::__main__::six$241':
<string>:(.text+0x20): undefined reference to `PyArg_UnpackTuple'
<string>:(.text+0x47): undefined reference to `PyEval_SaveThread'
<string>:(.text+0x53): undefined reference to `PyEval_RestoreThread'
<string>:(.text+0x62): undefined reference to `PyLong_FromLongLong'
<string>:(.text+0x74): undefined reference to `PyExc_RuntimeError'
<string>:(.text+0x88): …Run Code Online (Sandbox Code Playgroud) 编辑:免责声明 - 我并不是指适用于非内存管理语言(例如free在 C++ 中)的意义上的删除。这里的删除可以理解为超类被删除后,子类不再是其子类之一。
在Python中,您可以通过执行以下操作来删除a class(是的,我的意思是一个类,而不是一个实例):
class Super:
...
class DeleteMe(Super):
...
print(Super.__subclasses__())
# [<class '__main__.DeleteMe'>]
del DeleteMe
import gc
gc.collect() # Force a collection
print(Super.__subclasses__())
# []
Run Code Online (Sandbox Code Playgroud)
我正在尝试模仿这种行为,但我希望该类DeleteMe能够自我毁灭。这是我尝试过的:
class Super:
...
class DeleteMe(Super):
def self_delete(self):
print(self.__class__)
# <class '__main__.DeleteMe'>, this looks right
del self.__class__ # this fails
import gc
gc.collect()
print(Super.__subclasses__())
# [<class '__main__.DeleteMe'>]
DeleteMe().self_delete()
Run Code Online (Sandbox Code Playgroud)
它失败并出现以下回溯:
Traceback (most recent call last):
File "/Users/rayan/Desktop/test.py", line 10, in <module>
DeleteMe().self_delete()
File "/Users/rayan/Desktop/test.py", line …Run Code Online (Sandbox Code Playgroud) 假设我有以下8x8 2D列表:
[[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[-1, 0, -1, 0, -1, 0, -1, 0],
[0, -1, 0, -1, 0, -1, 0, -1],
[-1, 0, -1, 0, -1, 0, -1, 0]]
Run Code Online (Sandbox Code Playgroud)
例如,如何获得值"1"的随机索引?