Я написал очень маленькую функцию, которая должна возвращать параметры, переданные при ее вызове. Вместо этого я получаю NameError: имя 'a' не определено

Этот фрагмент кода действительно работает, когда 'b' получает целочисленное значение

def func(a,b,c):
    return a,b,c

result = func(a=5, c=15, b=25)
print(result)

Но когда ему присваивается сумма 'a' и 'c', появляется NameError.

def func(a,b,c):
    return a,b,c

result = func(a=5, c=15, b=a+c)
print(result)


"NameError: name 'a' is not defined"
0
Adarsh Namdev 28 Июн 2019 в 16:56

3 ответа

Лучший ответ

Вы используете именованные параметры при вызове функции, но на самом деле вы не объявляете переменные, поэтому a и b фактически не определены, когда вы пытаетесь передать их как значение для c , Вам нужно сделать следующее:

a=5
c=15
result = func(a=a, c=c, b=a+c)
1
jacalvo 28 Июн 2019 в 13:59

a, b и c в этом случае являются не переменными, а именами аргументов (они становятся переменными только в области действия функции, а не там, где вы их называете), поэтому что-то вроде этого:

b = 25
result = func(a=5, c=15, b=b)

Работает, хотя b=b похоже, что это не имеет никакого смысла.

Кроме того, это не будет работать:

result = func(a=5, c=15, b=25)
print(a)

Потому что a не является переменной в этой области.

1
h4z3 28 Июн 2019 в 14:00

На этой линии:

func(a=5)

A не переменная, это аргумент, что означает, что вы не можете получить к ней доступ вне функции. Что означает, когда вы делаете:

func(a=5, b=a)

Он попытается найти переменную с именем a, которая не существует. Вместо этого просто установите переменные перед вызовом функции, и она должна работать:

def func(a,b,c):
    return a,b,c

a=5
c=15
b=a+c

result = func(a=a, c=c, b=b)
print(result)
1
Kevin Müller 28 Июн 2019 в 14:11