Python: предотвращение pylint предупреждения о слишком многих аргументах

Сначала вы должны добавить следующий код в файл manifest.json:

{
  "name": "My extension",
  ...
  "content_scripts": [
    {
      "matches": [ "http://*/", "https://*/" ],
      "js": ["content.js"],
      "run_at": "document_start"
    }
  ],
  "permissions": [
    "http://*/",
    "https://*/"
  ]
  ...
}

Теперь вы должны создать файл content.js, содержимое которого:

const injectedScript = document.createElement('script');
injectedScript.src = chrome.extension.getURL('injected.js');
(document.head || document.documentElement).appendChild(injectedScript);

Затем создайте файл injected.js и напишите свой код в этом файле, например:

function doStuff() {
  // Do stuff
}

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

44
задан Anonymous 3 May 2009 в 05:13
поделиться

7 ответов

Хотите ли вы лучший способ передачи аргументов или просто способ не дать пилинту доставить вам неприятности? Если последнее, я, кажется, вспоминаю, что вы могли бы прекратить нытье, поместив pylint -контролирующие комментарии в вашем коде в виде строк:

#pylint: disable-msg=R0913

или:

#pylint: disable-msg=too-many-arguments

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

По моему мнению, нет ничего по своей сути неправильно с передачей множества аргументов и решений, призывающих заключать их все в некоторый контейнерный аргумент, на самом деле не решая никаких проблем, кроме остановки ] Пилинт из-за того, что тебя надоедает: -).

Если вам нужно передать двадцать аргументов, то передайте их. Может случиться так, что это требуется, потому что ваша функция выполняет слишком много, и здесь может помочь повторный факторинг, и это ' Что-то, на что ты должен смотреть. Но это не решение , которое мы можем действительно принять, если не увидим, что такое «настоящий» код.

41
ответ дан 26 November 2019 в 21:36
поделиться

Вы можете легко изменить максимально допустимое количество аргументов в цилиндре. Просто откройте файл pylintrc (сгенерируйте его, если у вас его еще нет) и измените:

max-args = 5

на:

max-args = 6 # или любое подходящее вам значение

Из руководства компании Pylint

. Указание всех возможных вариантов для вашей установки и стандартов кодирования может быть утомительным, так что можно используйте файл rc, чтобы указать значение по умолчанию ценности. Pylint ищет / etc / pylintrc и ~ / .pylintrc. --Generate-rcfile опция сгенерирует комментарий файл конфигурации в соответствии с текущая конфигурация по стандарту выход и выход. Вы можете поставить другие варианты до этого, чтобы использовать их в конфигурации, или начните с значения по умолчанию и ручная настройка конфигурация.

24
ответ дан 26 November 2019 в 21:36
поделиться

Вы можете попробовать использовать переменные аргументы Python :

def myfunction(*args):
    for x in args:
        # Do stuff with specific argument here
12
ответ дан 26 November 2019 в 21:36
поделиться

First, one of Perlis's epigrams:

"If you have a procedure with 10 parameters, you probably missed some."

Some of the 10 arguments are presumably related. Group them into an object, and pass that instead.

Making an example up, because there's not enough information in the question to answer directly:

class PersonInfo(object):
  def __init__(self, name, age, iq):
    self.name = name
    self.age = age
    self.iq = iq

Then your 10 argument function:

def f(x1, x2, name, x3, iq, x4, age, x5, x6, x7):
  ...

becomes:

def f(personinfo, x1, x2, x3, x4, x5, x6, x7):
  ...

and the caller changes to:

personinfo = PersonInfo(name, age, iq)
result = f(personinfo, x1, x2, x3, x4, x5, x6, x7)
92
ответ дан 26 November 2019 в 21:36
поделиться

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

8
ответ дан 26 November 2019 в 21:36
поделиться

Упростите или разбейте функцию так, чтобы она не требовала девяти аргументов (или игнорировала pylint, но уклонялась как те, которые вы предлагаете, не используют инструмент lint).

РЕДАКТИРОВАТЬ: если это временная мера, отключите предупреждение для конкретной рассматриваемой функции, используя комментарий, как описано здесь: http: // lists .logilab.org / pipermail / python-projects / 2006-April / 000664.html

Позже вы можете выполнить grep для всех отключенных предупреждений.

6
ответ дан 26 November 2019 в 21:36
поделиться

В Python есть несколько хороших инструментов для функционального программирования, которые, вероятно, вполне соответствуют вашим потребностям. Проверьте лямбда-функции и карту . Кроме того, вы используете dicts, когда кажется, что вам будет гораздо лучше обслуживать списки. Для приведенного вами простого примера попробуйте эту идиому. Обратите внимание, что карта будет лучше и быстрее, но может не соответствовать вашим потребностям:

def mysum(d):
   s = 0  
   for x in d:
        s += x
   return s

def mybigfunction():
   d = (x1, x2, x3, x4, x5, x6, x7, x8, x9)
   return mysum(d)

Вы упомянули о наличии множества локальных переменных, но, честно говоря, если вы имеете дело со списками (или кортежами), вы должны использовать списки и вычленять все те локальные переменные в долгосрочной перспективе.

0
ответ дан 26 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

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