Параметр 'from' в python3: имя формального параметра ожидается [дубликат]

Добавить почтовый заголовок в функцию почты

$header = "From: noreply@example.com\r\n"; 
$header.= "MIME-Version: 1.0\r\n"; 
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$header.= "X-Priority: 1\r\n"; 

$status = mail($to, $subject, $message, $header);

if($status)
{ 
    echo '<p>Your mail has been sent!</p>';
} else { 
    echo '<p>Something went wrong, Please try again!</p>'; 
}
3
задан Lav 23 February 2016 в 09:21
поделиться

2 ответа

Если вы украшаете свой метод с помощью

@click.option('--format', '-f', 'format_arg_name')
def plug(format_arg_name):
    print(format_arg_name)

, он отобразит параметр в параметр format_arg_name.

format_arg_name не будет доступна в командной строке .

2
ответ дан jeremyjjbrown 22 August 2018 в 00:25
поделиться

В то время как Click не имеет dest -эквивалента argparse, он имеет определенное поведение именования аргументов, которое может быть использовано. В частности, для параметров с несколькими возможными именами он предпочтет не пунктирные имена, а как вторичные предпочтения, приоритет будет определять более длинные имена по более коротким именам.

URL: http: //click.pocoo .org / dev / parameters / # parameter-names

Итак, если вы объявите свою опцию как ...

@click.option('--format', 'not-format', type=click.Choice(['t', 'j']))

... затем щелкните по приоритетам, -dashed ('not-format') и вызовите свою функцию с аргументом not_format=....

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

import functools

def rename_kwargs(**replacements):
    def actual_decorator(func):
        @functools.wraps(func)
        def decorated_func(*args, **kwargs):
            for internal_arg, external_arg in replacements.iteritems():
                if external_arg in kwargs:
                    kwargs[internal_arg] = kwargs.pop(external_arg)
            return func(*args, **kwargs)
        return decorated_func
    return actual_decorator

Код тестирования:

if __name__ == '__main__':

    @rename_kwargs(different_arg='format')
    def tester(different_arg):
        print different_arg

    tester(format='test value')

Выход теста:

$ python test_decor.py
test value

В вашем случае это будет выглядеть так:

@click.option('--format', type=click.Choice(['t', 'j']))
@replace_kwargs(not_format='format')
def plug(not_format):
    pass
8
ответ дан Lav 22 August 2018 в 00:25
поделиться
  • 1
    Поведение относительно «определенного поведения именования аргументов, которое может быть использовано», явно документировано (хотя я не нашел его, пока коллега не указал мне на него). click.pocoo.org/5/parameters/#parameter-names – Tom Dalton 21 October 2016 в 14:57
  • 2
    мне кажется, что return func(*args, **kwargs) - один уровень слишком глубокий ... – Hubert Kario 22 February 2018 в 02:07
  • 3
    @HubertKario Хороший улов, спасибо! Исправлена. – Lav 26 February 2018 в 14:14
Другие вопросы по тегам:

Похожие вопросы: