Установка значений по умолчанию для пустых аргументов (Python) - PullRequest
0 голосов
/ 03 июня 2018

Допустим, у нас есть функция f, и мне нужен аргумент b по умолчанию для пустого списка, но нельзя установить b = [] из-за проблемы, связанной с изменяемыми аргументами по умолчанию.

Какой из них самый питонский, или есть лучший способ?

def f(a, b=None):
   if not b:
     b = []
   pass

def f(a, b=None):
   b = b or []
   pass

Ответы [ 2 ]

0 голосов
/ 03 июня 2018
def f(a, b=''):
   if not b:
      b = []

   print(a)

Вы можете сделать что-то простое, например, «если не b».Если вы собираетесь сделать аргумент по умолчанию пустой строкой или установить его равным None, вы можете просто использовать оператор if, чтобы определить, каким должен быть B, если вы никогда не собираетесь вводить аргумент для b.В этом примере мы просто устанавливаем пустой список.

0 голосов
/ 03 июня 2018

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

def f(a, b=None):
   if b is None:
     b = []
   pass

С PEP 8, Рекомендации по программированию :

Кроме того, остерегайтесь писать, если x, когда вы действительно имеете в виду, что если x не None - например, при проверке, было ли для переменной или аргумента, который по умолчанию равен None, установлено какое-то другое значение.Другое значение может иметь тип (например, контейнер), который может быть ложным в логическом контексте!

Примеры этого можно увидеть в репозитории cpython:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...