小编Ray*_*out的帖子

执行 Numba 生成的程序集

在一个奇怪的事件中,我最终陷入了以下困境,我使用以下 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)

python assembly linker numba

8
推荐指数
1
解决办法
574
查看次数

Python 中的自删除类

编辑:免责声明 - 我并不是指适用于非内存管理语言(例如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)

python

3
推荐指数
1
解决办法
413
查看次数

如何随机选择列表中给定值的索引?

假设我有以下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"的随机索引?

python random list

2
推荐指数
1
解决办法
416
查看次数

标签 统计

python ×3

assembly ×1

linker ×1

list ×1

numba ×1

random ×1