Есть ли в Python переключатель «только для компиляции», как в Perl -c?

Мне просто нужно было объединить словарный номер неизвестного номера и после того, как мы увидели ответы на этот вопрос, появились более универсальные решения:

1) словари значений:

dic1 = {'A': 1, 'B': 1, 'C': 1}
dic2 = {'A': 2, 'B': 2, 'C': 2}
dic3 = {'D': 3, 'E': 3, 'F': 3}

def combineDictVal(*args):
    result = {}
    for dic in args:
        for key in (result.viewkeys() | dic.keys()):
            if key in dic:
                result.setdefault(key, []).append(dic[key])
    return result

print combineDictVal(dic1, dic2, dic3)

Результат : {'A': [1, 2], 'C': [1, 2], 'B': [1, 2], 'E': [3], 'D': [3], 'F': [3]}

2) словари списков (различие находится в append / extend *):

dic1 = {'A': [1, 2], 'B': [1, 2], 'C': [1, 2]}
dic2 = {'A': [3, 4], 'B': [3, 4], 'C': [3, 4]}
dic3 = {'D': [5, 6], 'E': [5, 6], 'F': [5, 6]}

def combineDictList(*args):
    result = {}
    for dic in args:
        for key in (result.viewkeys() | dic.keys()):
            if key in dic:
                result.setdefault(key, []).extend(dic[key])
    return result

print combineDictList(dic1, dic2, dic3)

Результат: {'A': [1, 2, 3, 4], 'C': [1, 2, 3, 4], 'B': [1, 2, 3, 4], 'E': [5, 6], 'D': [5, 6], 'F': [5, 6]}

3) Universal для int / lists:

dic1 = {'A': 1, 'B': 1, 'C': [1, 1]}
dic2 = {'A': 2, 'B': [2, 2], 'C': 2}
dic3 = {'D': 3, 'E': 3, 'F': [3, 3]}

def combineDict(*args):
    result = {}
    for dic in args:
        for key in (result.viewkeys() | dic.keys()):
            if key in dic:
                if type(dic[key]) is list:
                    result.setdefault(key, []).extend(dic[key])
                else:
                    result.setdefault(key, []).append(dic[key])
    return result

print combineDict(dic1, dic2, dic3)

Результат:

{'A': [1, 2], 'C': [1, 1, 2], 'B': [1, 2, 2], 'E': [3], 'D': [3], 'F': [3, 3]}

Эти решения не являются максимально возможными, однако они ясны и работают нормально. Надеюсь, это поможет кому-то.

14
задан Nathan Fellman 6 October 2009 в 22:03
поделиться

3 ответа

Вы можете сказать

python -m py_compile script_to_check.py

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

20
ответ дан 1 December 2019 в 09:13
поделиться

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

0
ответ дан 1 December 2019 в 09:13
поделиться

Еще лучше запустить pyflakes , pychecker или, возможно, pylint в коде. Они выявляют некоторые распространенные ошибки, которых не будет при компиляции.

9
ответ дан 1 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

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