#python #python-3.x
#python #python-3.x
Вопрос:
def f():
print (x)
def g():
print (x)
x = 1
x = 3
f()
x = 3
g()
Сейчас я изучаю функции, почему в этих функциях используются пустые аргументы?
Комментарии:
1. Как вы можете видеть, выполняя свой код, он выдает ошибку, потому что когда внутри функции, в области действия функции, x не определен. Таким образом, вы должны передать x в качестве аргумента.
2. @Mathieu, да, я знаю, что цель этого кода — показать ошибку. Но почему мы иногда не используем аргументы, такие как f(), g() при вызове функции?
3. Потому что иногда вам не нужен аргумент. Например, если функция всегда возвращает один и тот же элемент, или если аргумент определен в глобальной области видимости и, следовательно, доступен изнутри функции. Это просто зависит от приложения и структуры кода.
4. Распространенным примером функций без аргументов является метод класса, например, класс, в котором массив данных numpy определяется как атрибут, может иметь метод raw.get_data() . Он также используется для методов визуализации: raw.plot() . (эти 2 примера взяты из НЕОБРАБОТАННОГО объекта библиотеки MNE для обработки сигналов мозга.)
Ответ №1:
Никакие аргументы не используются (поскольку ни один из них не передается).
Внутри f
x
находится свободная переменная. Локальной переменной с таким именем нет, поэтому ее значение ищется в следующей охватывающей области, которая в данном случае является глобальной областью.
Внутри g
x
находится локальная переменная (в силу присваиваемого ей значения), но она еще не определена при вызове print(x)
. Если бы вы изменили порядок присваивания и вызова на print
обратный, вы бы увидели 1
результат как результат, поскольку глобальная переменная с тем же именем игнорируется.
Комментарии:
1. Я имею в виду, почему бы нам не написать def f(x): print(x) и вызвать его как f(x)
2. Вероятно, вам следует. Тот, кто написал этот код, этого не сделал. Хотя к глобальным переменным обычно относятся неодобрительно , есть редкие случаи, когда имеет смысл их использовать.
3. Так есть ли разница между использованием аргумента и нет?
4. Буквально, да. Имеет ли значение разница , зависит от контекста, чего-то не хватает в вашем вопросе.