Python требуется переменная стиль - PullRequest
3 голосов
/ 18 мая 2010

Каков лучший стиль для метода Python, который требует ключевого аргумента 'required_arg':

def test_method(required_arg, *args, **kwargs):


def test_method(*args, **kwargs):
    required_arg = kwargs.pop('required_arg')
    if kwargs:
        raise ValueError('Unexpected keyword arguments: %s' % kwargs)

Или что-то еще? Я хочу использовать это для всех моих методов в будущем, поэтому я как бы ищу лучший способ справиться с необходимыми аргументами ключевых слов в методах Python.

Ответы [ 3 ]

7 голосов
/ 18 мая 2010

Первый метод на сегодняшний день. Зачем дублировать что-то, что уже есть в языке?

Необязательные аргументы в большинстве случаев должны быть известны (используйте * args и ** kwargs, когда нет возможности узнать аргументы). Обозначим необязательные аргументы, задав им значение по умолчанию (def bar(foo = 0) или def bar(foo = None)). Остерегайтесь классического гоча def bar(foo = []), который не делает то, что вы ожидаете .

2 голосов
/ 18 мая 2010

Первый метод дает вам возможность дать вашему обязательному аргументу осмысленное имя; использование * args не делает. Использование * args прекрасно, когда вам это нужно, но зачем отказываться от возможности более четкого выражения ваших намерений?

0 голосов
/ 18 мая 2010

Если вам не нужны произвольные аргументы ключевых слов, пропустите параметр **. Ради любви ко всему святому, если у вас есть что-то, что необходимо , просто сделайте это нормальным аргументом.

Вместо этого:

def test_method(*args, **kwargs):
    required_arg = kwargs.pop('required_arg')
    if kwargs:
        raise ValueError('Unexpected keyword arguments: %s' % kwargs)

Сделайте это:

def test_method(required_arg, *args):
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...