Пустые формальные аргументы

#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. Буквально, да. Имеет ли значение разница , зависит от контекста, чего-то не хватает в вашем вопросе.