python - 是否有可能以某种方式内联 python 中的函数? (兼顾性能+可维护性)

标签 python python-2.7

是否可以以某种方式在 python 中内联函数?

我在 python 中有一个很长的函数,我想将其拆分为几个函数以提高可读性。因此,这些部分仅从程序中的一个点调用,但非常频繁。

这会降低性能,因为函数调用非常昂贵。

有没有一种方法既能保持不分割的性能,又能提高可读性/可维护性?

最佳答案

Python 中内联的方式有多种

除了 numba 和类似的 JIT 编译器(保留自己的内联缓存)之外,这可能会帮助您进行 JIT 代码重用,正如您在许多重新使用中所指出的那样调用未指定的函数, 有多种方法可以内联到 Python 代码中。

<小时/>

将符号 x86 ASM 汇编语言内联到 python

from pyasm              import Program
from pyasm.data         import String
from pyasm.macro        import syscall
from pyasm.instructions import mov, ret, push, add
from pyasm.registers    import eax, ebx, ecx, edx, ebp
import sys

def example():
    msg = 'Hello World!'
    prog = Program(     # _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                        #
                        ### ASSUME NOTHING - a lovely ASM note to always remember & self.remind
                        mov(ebx, 1),
                        mov(ecx, String(msg)),
                        mov(edx, len(msg)),
                        syscall('write'),
                        ret(),
                        # _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                        )
    fun = prog.compile()
    fun()

if __name__ == '__main__':
    example()

内联几乎 c语言到python

from pycca.cc import CCode, Function, Assign, Return

code = CCode( [ Function( 'int', 'add_one', [( 'int', 'x' )],
                        [
                          Assign( x='x + 1' ),
                          Return('x')
                          ])
                ])
print code.dump_asm()
print "3 + 1 = %d" % code.add_one( 3 )

For details & other options look at >>> this

<小时/>

c 语言内联到 python(自 2001 年起)

import PyInline, __main__

m = PyInline.build( language     = "C",
                    targetmodule = __main__,
                    code         = """
                                   /*_______________________________WORLDS-OF-C*/


                                     double my_C_adder( double a, double b )
                                     {
                                                        return a + b;
                                     }


                                   /*_______________________________WORLDS-OF-C*/
                                  """
                    )

print my_C_adder( 4.5, 5.5 )                     # Should print out "10.0"

Another approach at >>> PyInline

关于python - 是否有可能以某种方式内联 python 中的函数? (兼顾性能+可维护性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34595671/

相关文章:

python - python 中的 Johansen 协整检验

python - 使用 Python 在 Windows 中发送 SIGINT

mongodb - mongoengine 唯一约束

python - 在 Twisted 上处理多部分/混合

python - 我们可以在调用时设置 AWS python lambda 的环境变量吗

java - GAE 实例是否限制为 10 个并发请求?

python - 未封闭的 XML token

python - 导入错误 : No module named _imagingtk

python - Psycopg2 Python SSL 支持未编译

python - 根据其他两个词典的差异创建词典的最佳方法是什么?