Czy jest coś złego z poniższymi?:

def foo(bar):
    for b in bar:
        print (b)

bar = ['hello', 'world']

foo(bar)

Często w moim kodzie zmieniam parametry funkcji do nazwy, która różni się od przekazanej zmiennej.

def foo(_bar):
    for b in _bar:
        print (b)

bar = ['hello', 'world']

foo(bar)

Robię to, aby być bezpiecznym, ale kiedy inni ludzie patrzą na kod, myślę, że byłoby wspaniale, gdybym mógł zachować tę samą nazwę, więc wiedzą dokładnie, co jest przekazywane.

8
madeslurpy 27 czerwiec 2017, 16:49

4 odpowiedzi

Najlepsza odpowiedź

Z perspektywy składniowej nie ma nic złego z 1 przykładem. Python podąża za Legb Reguła Gdy próbuje uzyskać wartość zmiennej, więc gdy używasz {{x0} } Jako argument przepisujesz Global bar w zakresie funkcji foo.

4
Vlad Sydorenko 27 czerwiec 2017, 13:53

Cóż, nie ma problemu, ponieważ zmienne zdefiniowane wewnątrz funkcji mają zakres lokalne .

IMO, ten problem ma znaczenie tylko wtedy, gdy Twoja funkcja musi używać tej samej nazwy zmiennej lokalnej i niektórych zmiennych globalnych. Ale należy jednak unikać takiego projektu.

Tak radzę sobie z tego rodzaju sytuacjami:

def foo(bar):
    for b in bar:
        print (b)

def main():
    bar = ['hello', 'world']
    foo(bar)
    ...

Więcej, co warto wspomnieć, jest to, że w drugim przykładzie _variable jest zwykle używany do Privatish (Wewnętrzne) rzeczy w Pythonie, ale to tylko konwencja (nie jest egzekwowana przez Język w jakikolwiek sposób, ponieważ Python Programiers są wszystkie Zgoda dorosłymi ). Zamiast tego wolałbym: variable_.

3
27 czerwiec 2017, 14:07

Jedyne ryzyko z tym, że jest to, że używasz jakiegokolwiek Zmienna globalna zakres zmiennej nie ma wpływu.

W zależności od nazwy zmiennej, może być mylące, aby użyć tej samej nazwy zmiennej, ale myślę, że naprawdę powinieneś używać tego, co najwybitniejsze wydaje kontekst. Więc na przykład coś w rodzaju

do_angle_computation(theta):
    return sin(theta) * cos(theta)

theta = 30
print do_angle_computation(theta)

Jest całkowicie dobrze.

2
fjafjan 27 czerwiec 2017, 13:52

Możesz zachować tę samą nazwę, nie ma znaczenia. Zmienne zdefiniowane wewnątrz funkcji nie są dostępne na zewnątrz.

3
BoilingFire 27 czerwiec 2017, 13:52