Python 为什么列表理解不生成元组列表?

Python 为什么列表理解不生成元组列表?,python,hy,Python,Hy,我尝试创建一个宏来定义ctypes.Structure。宏如下所示: (defmacro struct [name fields] `(defclass ~name [ctypes.Structure] [-fields- ~(lfor i (range 0 (len fields) 2) (tuple [ (str (get fields (+ i 1))) (get fields i)))])) (defmacro comp

我尝试创建一个宏来定义ctypes.Structure。宏如下所示:

(defmacro struct [name fields]
`(defclass ~name [ctypes.Structure]
    [-fields- 
    ~(lfor i (range 0 (len fields) 2)
        (tuple [
        (str (get fields (+ i 1)))
        (get fields i)))]))
(defmacro compound [typename name fields]
`(defclass ~name [~typename]
    [-fields- 
    ~(lfor i (range 0 (len fields) 2)
        `(, 
            ~(str (get fields (+ i 1)))
            ~(get fields i)))]))
我认为lfor表达式将生成一个元组列表,但是,当我使用macroexpand展开宏时,我发现生成的列表是一个列表列表,没有创建元组。宏扩展的结果如下所示:

=> (macroexpand '(struct Point [ctypes.c_int x ctypes.c_int y]))

HyExpression([
  HySymbol('defclass'),
  HySymbol('Point'),
  HyList([
     HySymbol('ctypes.Structure')]),
     HyList([
        HySymbol('-fields-'),
        HyList([
            HyList([
                HyString('x'),
                HySymbol('ctypes.c_int')]),
            HyList([
                HyString('y'),
                HySymbol('ctypes.c_int')])])])])

我很困惑,lfor表达式中的元组似乎根本不起作用。

因为我是海朗的新手,我不熟悉宏的机制。经过几次尝试,我最终使其正常工作,如下所示:

(defmacro struct [name fields]
`(defclass ~name [ctypes.Structure]
    [-fields- 
    ~(lfor i (range 0 (len fields) 2)
        (tuple [
        (str (get fields (+ i 1)))
        (get fields i)))]))
(defmacro compound [typename name fields]
`(defclass ~name [~typename]
    [-fields- 
    ~(lfor i (range 0 (len fields) 2)
        `(, 
            ~(str (get fields (+ i 1)))
            ~(get fields i)))]))