Использование argparse для передачи количества выходных строк - PullRequest
0 голосов
/ 02 января 2019

Я пишу программу, которая выводит список.Допустим, этот список может содержать сотни элементов.Я хочу использовать argparse, чтобы передать опцию для того, сколько элементов показано в выводе, и по умолчанию 15 строк.Как получить параметр, который будет передан в качестве переменной в моей функции?

def get_args(argv = None):
    parser = argparse.ArgumentParser()
    parser.add_argument(
    # ...omitted code for other options
    parser.add_argument(
        '-n',
        '--noutput',
        default = 15,
        type = int,
        help = 'Number of lines in output'
    )
    return parser.parse_args(argv)


def scramble_words():
"""
Shuffle words in new_list
Print reordered words by newline
"""
    random.shuffle(new_list)
    print( )
    print("\n\n".join(new_list[:--noutput]))

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Другой вариант - использовать пакет Click для создания параметров командной строки.Я лично нахожу это более интуитивным.

import click

@click.command()
@click.option('-n', '--noutput')
def driver(noutput):
    print(noutput)

def scramble_words(noutput):
    """
    Shuffle words in new_list
    Print reordered words by newline
    """
    new_list=['a', 'b', 'c', 'd', 'e']
    random.shuffle(new_list)
    print( )
    print("\n\n".join(new_list[:--noutput]))

if __name__ == "__main__":
    driver()

Если вы хотите придерживаться argparse, вот как вы можете передать аргумент своей функции.Я сделал некоторые предположения о том, как вы можете использовать код.

import sys
import argparse
import random

def get_args(argv = None):
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '-n',
        '--noutput',
        default = 15,
        type = int,
        help = 'Number of lines in output'
    )

    return parser.parse_args()

def scramble_words(noutput):
    """
    Shuffle words in new_list
    Print reordered words by newline
    """
    new_list=['a', 'b', 'c', 'd', 'e']
    random.shuffle(new_list)
    print( )
    print("\n\n".join(new_list[:--noutput]))

if __name__ == "__main__":

    args = get_args(sys.argv)
    scramble_words(args.noutput)
0 голосов
/ 02 января 2019

Вы не показываете, как вы вызываете какую-либо из этих функций, но что-то вроде

def scramble_words(lst, n=15):
    """
    Shuffle words in lst
    Print n reordered words by newline
    """
    random.shuffle(lst)
    print()
    print("\n\n".join(lst[:n]))

# ...
args = get_args()
scramble_words(new_list, args.noutput)

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

...