[Python] Should I avoid initialization of variables inside blocks?

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

  1. Stack

    Stack Membro Participativo

    I have a code like this

    if condition:
    a = f(x)
    else:
    a = g(y)


    Initialization of a inside of the block looks bad for me. Can it be written better?

    I cannot use ternary operator, because names of functions and/or lists of arguments are long. Saying "long" I mean that the following expression

    a = f(x) if condition else g(y)


    will take more than 79 (sometimes even more than 119) symbols with real names instead of a, f, g, x, y and condition. Usage of multiple slashes will make the code ugly and messy.

    I don't want to initialize a with result of one of the functions by defaul, because both function are slow and I cannot allow such overhead

    a = g(y)
    if condition:
    a = f(x)


    I can initialize the variable with None, but is this solution pretty enough?

    a = None
    if condition:
    a = f(x)
    else:
    a = g(y)


    Let me explain my position: in C and C++ variables inside of a block have the block as their scope. In ES6 the let keyword was introduced — it allows to create variables with the same scoping rules as variables in C and C++. Variables defined with old var keyword have similar scoping rules as in Python. That's why I think that initialization of variables should be made outside blocks if I want to use the variables outside these blocks.

    Here is more complicated example:

    for obj in gen:
    # do something with the `obj`
    if predicate(obj):
    try:
    result = f(obj)
    except Exception as e:
    log(e)
    continue
    else:
    result = g(obj)
    # do something useful with the `result`
    else:
    result = h(obj)

    display(result)


    I go through elements of some generator gen, process them and perform some actions on the result on each iteration. Then I want to do something with the last result outside of the loop.

    Is it pythonic enough to not assign a dummy value to the result beforehand? Doesn't this make the code less readable?

    Is it good to initialize variables inside if/else/for/etc. in Python?

    Continue reading...

Compartilhe esta Página