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

app*_*ple 4 python python-2.7

是否有可能以某种方式内联 python 中的函数?

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

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

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

use*_*197 5

Python 中内联的方式有多种

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


将符号 x86ASM汇编语言内联到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()
Run Code Online (Sandbox Code Playgroud)

内联几乎 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 )
Run Code Online (Sandbox Code Playgroud)

有关详细信息和其他选项,请查看 >>> 这个


内联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"
Run Code Online (Sandbox Code Playgroud)

另一种方法是 >>> PyInline