[Python] Why do f-strings require parentheses around assignment expressions?

Discussão em 'Python' iniciado por Stack, Agosto 5, 2025.

  1. Stack

    Stack Membro Participativo

    In Python (3.11) why does the use of an assignment expression (the "walrus operator") require wrapping in parentheses when used inside an f-string?

    For example:

    #!/usr/bin/env python

    from pathlib import Path

    import torch


    DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")

    ckpt_dir = Path("/home/path/to/checkpoints")

    _ckpt = next(ckpt_dir.iterdir())
    print(_ckpt)
    sdict = torch.load(_ckpt, map_location=DEVICE)

    model_dict = sdict["state_dict"]

    for k, v in model_dict.items():
    print(k)
    print(type(v))
    print(_shape := v.size())
    print(f"{(_numel := v.numel())}")
    print(_numel == torch.prod(torch.tensor(_shape)))


    The code block above with print(f"{_numel := v.numel()}") instead does not parse.

    What about the parsing / AST creation mandates this?

    Continue reading...

Compartilhe esta Página