Есть ли способ определить значение по умолчанию внутри функции?

#python #function

#python #функция

Вопрос:

В названии уже сказано, возможно ли определить значение, указанное в качестве значения по умолчанию в самой функции, я пробовал что-то подобное, но это вызывает ошибку имени:

 def func(x = y):
    y = 6
    print(x)

func(1)
func()
 

Комментарии:

1. Это допустимо только в том случае, если y имеет значение в пределах области, где func определено. Если вы хотите, чтобы значение по умолчанию было 6, просто сделайте def func(x = 6): .

2. Нам нужно, чтобы вы четко представляли, какую семантику вы ожидаете. Чем оно отличается от простого значения по умолчанию (которое вы уже изучили или просмотрели до того, как решили опубликовать этот вопрос)?

3. Да, вы можете указать аргумент по умолчанию для ввода функции, используя метод в вашем примере.

4. Это проблема X-Y. Нет, вы не можете этого сделать, но если вы скажете, почему именно вы этого хотите, чего вы пытаетесь достичь, вы можете получить более полезный ответ.

5. @zvone для справки: в чем проблема XY?

Ответ №1:

Вы не можете присвоить его переменной, вы должны напрямую записать значение в круглых скобках:

 def func(x=6):
    print(x)

func(1)
func()
 

Комментарии:

1. » Вы не можете присвоить его переменной » — технически это на самом деле неверно, вы можете присвоить его переменной, если она находится в области видимости.

Ответ №2:

В настоящее время ваше объявление y = 6 внутри функции делает ее локальной переменной. Это не входит в область, которая будет использоваться в качестве параметра по умолчанию.

Как правило, вы указываете фактическое значение для параметра по умолчанию, например:

 def func(x=6):
    print(x)

func(1)
func()
 

Если вы действительно хотите использовать переменную, то объявите ее где-нибудь перед функцией, чтобы она была в области видимости при объявлении функции, например:

 y = 6

def func(x=y):
    print(x)

func(1)
func()
 

Первый пример предпочтительнее, но есть несколько допустимых вариантов использования для второго подхода использования переменной по умолчанию.

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

 import configparser

config = configparser.ConfigParser()
config.read('config.ini')

def func(x=config['defaults']['x']):
    print(x)

func(1)
func()
 

где ваш config.ini файл выглядит следующим образом:

 [defaults]
x = 6
 

Комментарии:

1. Это def func(x=y) допустимый синтаксис, но обычно он хуже, чем более простой def func(x=6) . OP может ожидать, что значение по умолчанию изменится при y изменении, чего не произойдет. И даже если нет, это просто делает код менее читабельным.

2. @zvone спасибо, это верная точка зрения, я привел 2-й пример, чтобы продемонстрировать, что можно использовать переменную по умолчанию. Я дополнил свое объяснение дополнительным контекстом о том, где это может быть уместно.

Ответ №3:

Я предполагаю, что вы ищете что-то вроде этого:

 def func(x = 6):
    print(x)

func(1)
func()
 

какие результаты:

 1
6