在Python中有没有一种方法可以将代码转换为字符串,反之亦然?

2024-06-24 11:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

最初的问题是:

有没有一种方法可以像C:

#define OBJWITHSIZE(_x) (sizeof _x)/(sizeof _x[0])

我想知道的是:

在Python中有没有避免代码重复的方法? 在我正在编写的程序的一部分中,我有一个函数:

^{pr2}$

在另一部分中,我将这些代码嵌入到一个字符串中,稍后将
输出到自身将运行的python文件:

"""
def replaceProgramFilesPath(filenameBr):
  def getProgramFilesPath():
    import os
    return os.environ.get("PROGRAMFILES") + chr(92)
  return filenameBr.replace("<ProgramFilesPath>",getProgramFilesPath() )
"""

如何构建一个“宏”来避免这种重复?在


Tags: 文件方法函数字符串代码程序returnos
3条回答

回答新问题。在

在您的第一个python文件(例如称为first.py)中:

import os

def replaceProgramFilesPath(filenameBr):
  new_path = os.environ.get("PROGRAMFILES") + chr(92)
  return filenameBr.replace("<ProgramFilesPath>", new_path)

在第二个python文件(例如,second.py)中:

^{pr2}$

请注意,first.py需要位于python的模块搜索路径中,或者与second.py位于同一目录中,这样才能在second.py中进行导入。在

不,Python不支持像C这样的预处理器宏。不过,您的示例并不需要在Python中执行;您可以考虑提供一个相关的示例,以便人们可以建议一种Python方法来表达您的需要。在

虽然似乎确实有一个名为pypp的python预处理库,但我并不完全熟悉它。实际上,python内置没有预处理功能。Python代码被翻译成字节码,没有中间步骤。如果您是python的初学者,我建议您完全避免使用pypp。在

与宏最接近的等价物可能是定义全局函数。相当于C风格宏的python可能是:

import sys
OBJWITHSIZE = lambda x: sys.getsizeof(x) / sys.getsizeof(x[0])
aList = [1, 2, 4, 5]
size = OBJWITHSIZE(aList)
print str(size)

请注意,您很少需要获得python对象的大小,因为所有的分配和删除都是在python中为您处理的,除非您正在做一些非常奇怪的事情。在

您也可以执行以下操作,而不是使用lambda函数:

^{pr2}$

基本上是一样的。在

如前所述,您的示例宏在python中是多余的,因为您可以简单地编写:

aList = [1, 2, 4, 5]
size = len(aList)
print str(size)

相关问题 更多 >