Я должен отключить компилятор C несоответствие со знаком/неподписанное, предупреждающее?

Что такое __init__.py, используемый для?

Основное использование __init__.py - инициализация пакетов Python. Самый простой способ продемонстрировать это - взглянуть на структуру стандартного модуля Python.

package/
    __init__.py
    file.py
    file2.py
    file3.py
    subpackage/
        __init__.py
        submodule1.py
        submodule2.py

Как вы можете видеть в структуре выше, включение файла __init__.py в каталог указывает интерпретатору Python, что каталог должен рассматриваться как пакет Python

Что входит в __init__.py?

__init__.py может быть пустым файлом, но часто используется для выполнения (импортировать вещи, загружать вещи в путь и т. д.).

. Одна общая вещь, которую вы делаете в своем __init__.py, - импортировать выбранные классы, функции и т. д. в уровень пакета, чтобы они могли быть уверенно импортированным из пакета.

В приведенном выше примере мы можем сказать, что файл.py имеет файл класса. Таким образом, без чего-либо в нашем __init__.py вы импортируете этот синтаксис:

from package.file import File

Однако вы можете импортировать файл в свой __init__.py, чтобы сделать его доступным на уровне пакета:

# in your __init__.py
from file import File

# now import File from package
from package import File

Еще одна вещь, которую нужно сделать, это на уровне пакета сделать подпакеты / модули доступными с переменной __all__. Когда интерпретатор видит переменную __all__, определенную в __init__.py, он импортирует модули, перечисленные в переменной __all__, когда вы это делаете:

from package import *

__all__ - это список, содержащий имена модули, которые вы хотите импортировать с импортом *, так что мы снова рассмотрим наш вышеприведенный пример, если хотим импортировать подмодули в подпакету, переменная __all__ в subpackage/__init__.py будет:

__all__ = ['submodule1', 'submodule2']

С помощью __all__, так что, когда вы выполняете

from subpackage import *

, он будет импортировать подмодуль1 и подмодуль2.

Как вы можете видеть, __init__.py может быть очень полезным, кроме его основной функции указывает, что каталог является модулем.

Ссылка

15
задан Jeff Atwood 7 February 2009 в 08:24
поделиться

11 ответов

О, это имеет. Но наоборот. Игнорирование , что предупреждение вызвало огромную головную боль мне однажды. Я писал функцию, которая построила график и смешала подписанные и неподписанные переменные. В одном месте я сравнил отрицательное число с неподписанным:

int32_t t; ...
uint32_t ut; ...

if(t < ut) { 
    ...
}

Предположение, что произошло? Числу со знаком способствовали на неподписанный тип и таким образом было больше в конце, даже при том, что это было ниже 0 первоначально. Мне потребовались несколько часов, пока я не нашел ошибку.

24
ответ дан 30 November 2019 в 23:58
поделиться

Никогда не игнорируйте предупреждения компилятора.

30
ответ дан 30 November 2019 в 23:58
поделиться

Если необходимо задать вопрос, Вы не знаете достаточно о том, безопасно ли отключить его, таким образом, ответ является №

, я не отключил бы его - я не предполагаю, что всегда знаю лучше, чем компилятор (не в последнюю очередь, потому что я часто не делаю), и более подробно потому что я иногда делаю ошибки контролем, когда компилятор не делает.

4
ответ дан 30 November 2019 в 23:58
поделиться

Вы должны , изменение a и b к обоим использованию подписало типы, или оба используют неподписанные типы. Но это не может быть практично (например, это, возможно, вне Вашего управления).

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

3
ответ дан 30 November 2019 в 23:58
поделиться

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

, например,-1 равно 4294967295 при преобразовании от со знаком до неподписанного теперь сравните это с 100 (неподписанный)

2
ответ дан 30 November 2019 в 23:58
поделиться

Предупреждения там для цели... Они заставляют Вас думать трудно о своем коде!

Лично, я всегда явно бросал бы со знаком-> неподписанный и неподписанный-> подписанный, если это возможно. Путем выполнения этого Вы удостоверяетесь, чтобы Вы взяли владение транзакции и что Вы знаете то, что собирается произойти. Я понимаю, что это не могло бы всегда быть возможно, в зависимости от проекта сделать это, но всегда стремиться к 0 предупреждениям компилятора... это может только помочь!

2
ответ дан 30 November 2019 в 23:58
поделиться

Я даже настроил компилятор для создания того предупреждения ошибки компиляции. по причинам все другие парни уже упомянули.

, Если я когда-нибудь встречаюсь с несоответствием со знаком/неподписанным, я спрашиваю меня, почему я выбрал отличающийся "со знаком". Это обычно - ошибка дизайна.

0
ответ дан 30 November 2019 в 23:58
поделиться

@gimel объяснение об охоте весь участок найденных позади Вашей ссылки действительно хорош для этой проблемы.

- "Кто-то, кто избегает простых проблем, может просто быть достижением not-so-simple один".

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

Обновление/Johan

: корректный способ преобразовать от uint до интервала состоит в том, чтобы проверить значения по limits.h или чему-то как этот. (Но я редко делаю это мой сам, даже Вы я знаю, что я должен... :-)

0
ответ дан 30 November 2019 в 23:58
поделиться

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

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

В конечном счете эти вещи перемещаются от пропущенного нюанса в сознательное решение при разработке нового кода. Результат оставляет меньше комнаты для mickmouse угловых случаев для разрушения или клиентский день и в целом лучшее качественное программное обеспечение.

0
ответ дан 30 November 2019 в 23:58
поделиться

Только один из многих путей, которыми C позволяет Вам охота самим в ноге - необходимо знать то, что Вы делаете. кавычка C приписывается Bjarne Stroustrup , создатель C++ .

-1
ответ дан 30 November 2019 в 23:58
поделиться

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

В нашем продукте используется этот подход, и то, что у нас есть, - это некоторые (многие) основные функции, которые одинаковы для все клиенты, настраиваемые модули, которые используются одним или несколькими клиентами, и по сути «настройка» - это простой механизм рабочего процесса, который использует разные рабочие процессы для разных клиентов, поэтому каждый клиент получает базовую функциональность, Скорее, чем наоборот.

0
ответ дан 30 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

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