gpt4 book ai didi

python - 如何使用 Python 的 ast 创建类型化返回? - `def f() -> bool: return True`

转载 作者:行者123 更新时间:2023-12-03 23:45:25 25 4
gpt4 key购买 nike

我如何使用 PEP484返回类型的语法,使用内置 ast图书馆?
试图:

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: invalid syntax

最佳答案

哦,我忘了访问它
这个:

returns=parse('Union[bool, str]'),
应该:
returns=parse('Union[bool, str]').body[0].value,

关于python - 如何使用 Python 的 ast 创建类型化返回? - `def f() -> bool: return True`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63073675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com