Несмотря на то, что, похоже, есть библиотека для предварительной обработки python, называемая pypp , я не совсем знаком с ней. Там действительно нет возможности предварительной обработки для встроенного Python. Код Python переводится в байт-код, промежуточных шагов нет. Если вы новичок в python, я бы рекомендовал полностью избегать pypp.
Ближайшим эквивалентом макросов может быть определение глобальной функции. Эквивалент Python для вашего макроса в стиле C может быть:
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, если вы не делаете что-то довольно странное.
Вместо использования лямбда-функции вы также можете сделать это:
import sys
def getSize(x):
return sys.getsizeof(x) / sys.getsizeof(x[0])
OBJWITHSIZE = getSize
aList = [1, 2, 4, 5]
size = OBJWITHSIZE(aList)
print str(size)
Что по сути то же самое.
Как уже упоминалось ранее, ваш пример макроса избыточен в python, потому что вы можете просто написать:
aList = [1, 2, 4, 5]
size = len(aList)
print str(size)