【发布时间】:2020-11-14 07:49:10
【问题描述】:
尝试:
from ast import parse, Name, Load, Constant, Expr, FunctionDef, arguments, arg
func_def_ast = FunctionDef(
args=arguments(
args=[
arg(annotation=Name(ctx=Load(), id='str'),
arg='is_chocolate', type_comment=None),
arg(annotation=Name(ctx=Load(), id='bool'),
arg='verbose', type_comment=None)
],
defaults=[Constant(kind=None, value=True)],
kwarg=arg(annotation=None, arg='extra_kwargs',
type_comment=None), kw_defaults=[],
kwonlyargs=[], posonlyargs=[], vararg=None
),
body=[Expr(value=Constant(kind=None,
value='Crazy hungry function'))
],
decorator_list=[], name='is_choco',
returns=parse('Union[bool, str]'),
type_comment=None
)
现在让我们使用astor 打印出来:
from astor import to_source
src = to_source(func_def_ast)
print(src)
在 Python 3.8.3 上提供以下内容:
def is_choco(is_chocolate: str, verbose: bool=True, **extra_kwargs) ->
Union[bool, str]:
"""Crazy hungry function"""
有效的 Python 要求 Union[bool, str] 与顶部位于同一行,否则您会得到:
def is_choco(is_chocolate: str, verbose: bool=True, **extra_kwargs) ->
^
SyntaxError: 无效语法
【问题讨论】:
标签: python function code-generation abstract-syntax-tree python-typing