Функция Python с множеством аргументов

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

Например, эта функция по существу делает печать каждого местоположения строки в файле.

def scan(fpin,base,string,pNo,print_to_file,dumpfile_path,quiet): 

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

2 Solutions collect form web for “Функция Python с множеством аргументов”

Именованные аргументы – ваши друзья. Для вещей, которые действуют как полу-необязательные параметры конфигурации с разумными значениями по умолчанию, задайте параметры по умолчанию и передавайте их (как именованные аргументы) для ситуаций, отличных от по умолчанию. Если имеется множество параметров без разумных значений по умолчанию, вы можете назвать их все при вызове функции.

Рассмотрим встроенную функцию, sorted . Он принимает до четырех аргументов. Является ли reverse параметр до или после cmp ? Что я должен передать в качестве key если я хочу, чтобы поведение по умолчанию? Ответ: Черт, если я помню. Я вызываю sorted(A, reverse=True) и она делает то, что я ожидаю.

Кстати, если бы у меня было тонны аргументов «config», которые я передавал каждому вызову для сканирования, и каждый раз меняя (скажем, fpin и string ), я мог бы fpin все остальные аргументы в словарь, а затем передать его функции с синтаксисом **kwargs . Это немного более продвинуто. Подробнее см. В руководстве. (Обратите внимание, что это НЕ то же самое, что объявить эту функцию как взятие **kwargs . Определение функции одинаков, единственное отличие в том, что вызовы к ней выглядят.)

Нет, в этом нет ничего плохого. Если у вас есть N разных аргументов (вещи, которые контролируют выполнение вашей функции), вы должны каким-то образом передать их – как вы на самом деле делаете это, просто пользовательские предпочтения, если вы спросите меня.

Однако … если вы обнаружите, что делаете что-то вроде этого, хотя:

 func('somestring', a=A, b=B, c=C) func('something else', a=A, b=B) func('something third', a=A, c=C, d=D) 

и т. д., где A, B, C действительно являются конфигурациями для множества разных вещей, тогда вы должны начать изучать класс. Класс делает много вещей, но он также создает контекст. Вместо этого вы можете сделать что-то вроде:

 cf = myclass(a=A, b=B, c=C, d=D) cf.func('somestring') cf.func('something else') cf.func('something third') 

и т.п.

  • 'has_key ()' или 'in'?
  • Правильный способ повторить дважды по списку?
  • Как импортировать многие модули в главные и выполнить
  • Синтаксис Python для пустого цикла while
  • Клиент OAuth2, который работает в App Engine
  • Перенаправить подпроцесс в переменную как строку
  • Объект Generator vs Sequence
  • Я правильно использую «все»?
  • Python - лучший язык программирования в мире.