Python случайное значение аргумента функции по умолчанию - PullRequest
0 голосов
/ 16 июня 2020

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

import random

for i in range(10):
    print(random.randint(0,10))

Однако это не работает, если я использую функцию:

import random

def f(val: int = random.randint(0,10)):
    print(val)

for i in range(10):
    f()

Почему результат второго фрагмента кода всегда одно и то же число? Самый похожий вопрос, который я смог найти, - это этот , но он относится к другому языку (я не владею им).

Ответы [ 3 ]

3 голосов
/ 16 июня 2020

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

Типичный способ обойти это - использовать значение флага и заменить его внутри тела функции:

def f(val=None):
    if val is None:
        val = random.randint(0,10)
    print(val)
0 голосов
/ 16 июня 2020

Параметр по умолчанию не может быть изменен при вызове. Не понимаю, зачем это было нужно. вы можете сделать это просто так.

import random
def f():
  print(random.randint(0,10))
for i in range(10):
  f()
0 голосов
/ 16 июня 2020

Вы хотите, чтобы значение по умолчанию было определенным значением c. Чтобы сделать его таким же динамическим c, вы захотите установить его по умолчанию на что-то другое, проверьте это, а затем измените значение.

Например:

import random

def f(val=None):
    if val is None:
        val = random.randint(0,10)
    print(val)

for i in range(10):
    f()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...