Page not found — ОХРАНА ТРУДА
Unfortunately the page you’re looking doesn’t exist (anymore) or there was an error in the link you followed or typed. This way to the home page.
Blog
- 04/05/2021 — Тема Всемирного дня охраны труда в 2021 году
- 04/01/2021 — Вступает в силу новый порядок проведения обязательных предварительных и периодических медосмотров
- 03/27/2021 — Минтруд разъяснил, как указывать наименование вредных или опасных производственных факторов и видов работ при составлении списка для медосмотров
- 03/25/2021 — Роструд разъяснил вопрос выдачи работникам средств индивидуальной защиты, бывших в употреблении
- 03/17/2021 — Утверждены новые требования к комплектации аптечки для оказания первой помощи работникам
- 03/01/2021 — Вступили в силу новые Правила по охране труда при работе в ограниченных и замкнутых пространствах
- 02/10/2021 — Продлены сроки обучения по охране труда и срок действия результатов специальной оценки условий труда
- 02/09/2021 — Ростехнадзор разъяснил вопрос о внеочередной проверке знаний новых правил по охране труда
- 02/03/2021 — Утвержден новый порядок проведения обязательных предварительных и периодических медосмотров работников
- 01/22/2021 — Минтруд России разъяснил вопрос о внеочередной проверке знаний требований охраны труда в связи с введением в действие новых правил по охране труда
- 01/18/2021 — Роструд напоминает о необходимости соблюдения режима работы в холодное время
- 01/01/2021 — Введены в действие новые правила по охране труда
- 01/01/2021 — Вступил в силу новый Перечень работ, профессий, должностей, непосредственно связанных с управлением транспортными средствами или управлением движением ТС
- 01/01/2021 — Вводится новый перечень производств, работ и должностей с вредными и (или) опасными условиями труда, на которых ограничивается применение труда женщин
- 01/01/2021 — Вступили в силу требования о подготовке работников в области защиты от чрезвычайных ситуаций
- 12/31/2020 — Принят Закон о бессрочных декларациях соответствия условий труда государственным нормативным требованиям охраны труда
- 12/31/2020 — Утверждены СП 2.2.3670-20 «Санитарно-эпидемиологические требования к условиям труда»
- 12/31/2020 — Утверждены Правила по охране труда при эксплуатации электроустановок
- 12/31/2020 — Утверждены Правила по охране труда при эксплуатации объектов теплоснабжения и теплопотребляющих установок
- 12/31/2020 — Утверждены Правила по охране труда при работе в ограниченных и замкнутых пространствах
- 12/31/2020 — Утверждены Правила по охране труда при обработке металлов
- 12/31/2020 — Утверждены Правила по охране труда при выполнении электросварочных и газосварочных работ
- 12/31/2020 — Утверждены Правила по охране труда при производстве строительных материалов
- 12/31/2020 — Утвержден порядок проведения медицинского освидетельствования частных охранников
- 12/31/2020 — Утверждены Правила по охране труда при проведении водолазных работ
- 12/30/2020 — Утверждены Правила по охране труда в медицинских организациях
- 12/30/2020 — Утверждены Правила по охране труда при строительстве, реконструкции и ремонте
- 12/30/2020 — Утверждены Правила по охране труда при выполнении работ на объектах связи
- 12/30/2020 — Утверждены Правила по охране труда при производстве отдельных видов пищевой продукции
- 12/30/2020 — Утверждены Правила по охране труда при выполнении окрасочных работ
- 12/30/2020 — Утверждены Правила по охране труда в подразделениях пожарной охраны
- 12/30/2020 — Утверждены Правила по охране труда при выполнении работ в театрах, концертных залах, цирках, зоотеатрах, зоопарках и океанариумах
- 12/30/2020 — Утверждены Правила по охране труда в лесозаготовительном, деревообрабатывающем производствах и при выполнении лесохозяйственных работ
- 12/30/2020 — Утверждены Правила по охране труда при хранении, транспортировании и реализации нефтепродуктов
- 12/30/2020 — Утверждены Правила по охране труда на морских судах и судах внутреннего водного транспорта
- 12/29/2020 — Утверждены Правила по охране труда при нанесении металлопокрытий
- 12/29/2020 — Утверждены Правила по охране труда при производстве дорожных строительных и ремонтно-строительных работ
- 12/29/2020 — Утверждены Правила по охране труда на городском электрическом транспорте
- 12/29/2020 — Утверждены Правила по охране труда при использовании отдельных видов химических веществ и материалов
- 12/29/2020 — Утверждены Правила по охране труда в целлюлозно-бумажной и лесохимической промышленности
- 12/28/2020 — Утверждены Правила по охране труда при работе на высоте
- 12/28/2020 — Утверждены Правила по охране труда при строительстве, реконструкции, ремонте и содержании мостов
- 12/27/2020 — Утверждены Правила по охране труда на автомобильном транспорте
- 12/26/2020 — Утверждены Правила по охране труда при осуществлении охраны (защиты) объектов и (или) имущества
- 12/26/2020 — Утверждены Правила по охране труда при проведении работ в легкой промышленности
- 12/26/2020 — Утверждены Правила по охране труда при производстве цемента
- 12/26/2020 — Утверждены Правила по охране труда при проведении полиграфических работ
- 12/25/2020 — Утверждены Правила по охране труда при работе с инструментом и приспособлениями
- 12/24/2020 — Утверждены Правила по охране труда при погрузочно-разгрузочных работах и размещении грузов
- 12/23/2020 — Утверждены критерии определения степени утраты профессиональной трудоспособности от несчастных случаев и профзаболеваний
- 12/22/2020 — Утверждены Правила по охране труда при добыче и переработке водных биоресурсов
- 12/21/2020 — Утверждены Правила по охране труда при размещении, монтаже, техобслуживании и ремонте технологического оборудования
- 12/18/2020 — Утверждено Типовое положение о единой системе управления промышленной безопасностью и охраной труда в сфере добычи угля
- 12/17/2020 — Утверждены Правила по охране труда при осуществлении грузопассажирских перевозок на железнодорожном транспорте
- 12/16/2020 — Утверждены Правила по охране труда при эксплуатации промышленного транспорта
- 12/15/2020 — Утверждены Особенности режима рабочего времени, времени отдыха и условий труда водителей автомобилей
- 12/14/2020 — Утверждены Правила по охране труда при эксплуатации объектов инфраструктуры железнодорожного транспорта
- 12/12/2020 — Минтруд России разъяснил вопросы проведения инструктажа и СОУТ для работников, вернувшихся с удаленной работы в офис
- 12/11/2020 — Утверждены Правила по охране труда в жилищно-коммунальном хозяйстве
- 12/09/2020 — Минстрой России разработал новые рекомендации по профилактике COVID-19 в строительной отрасли
- 12/04/2020 — Утверждены Правила по охране труда при проведении работ в метрополитене
- 12/03/2020 — Утвержден порядок проведения обязательных медосмотров на железнодорожном транспорте
- 11/30/2020 — Утверждены Правила по охране труда в сельском хозяйстве
- 11/05/2020 — Минтрансом России утверждены новые обязательные реквизиты и порядок заполнения путевых листов
- 11/02/2020 — Утвержден временный порядок установления степени утраты профессиональной трудоспособности в результате несчастных случаев на производстве и профзаболеваний
- 10/21/2020 — Минтруд России разъяснил, вправе ли работодатель требовать от работников прохождения теста на COVID-19
- 10/12/2020 — Утверждены Правила по охране труда в морских и речных портах
- 10/06/2020 — Минтранс России отменил ряд актов по вопросам охраны труда
- 09/21/2020 — Отменен ряд типовых инструкций и правил по охране труда
- 09/02/2020 — Роспотребнадзор разъяснил порядок допуска к работе вахтовых работников, переболевших коронавирусной инфекцией
- 09/02/2020 — Внесены изменения в некоторые правовые акты Минтруда России по вопросам проведения спецоценки условий труда
- 08/27/2020 — ФСС России разъяснил особенности возмещения расходов на мероприятия по предупреждению распространения COVID-19
- 08/05/2020 — Расходы на мероприятия по предупреждению распространения COVID-19 могут быть возмещены за счет средств ФСС России
- 08/05/2020 — Минтруд России разъяснил вопрос об обязательных медосмотрах сотрудников, работающих с персональными компьютерами
- 07/17/2020 — Минтруд разъяснил, как следует присваивать индивидуальный номер рабочим местам при проведении внеплановой или повторной СОУТ
- 07/07/2020 — Утверждены санитарно-эпидемиологические требования к работе образовательных организаций в условиях COVID-19
- 07/06/2020 — Роспотребнадзор дал рекомендации для работающих в условиях повышенных температур воздуха
- 07/02/2020 — Утверждена новая годовая форма федерального статистического наблюдения N 7-травматизм
- 06/17/2020 — Продлены сроки для проведения обучения по охране труда и сроки действия результатов проведения спецоценки условий труда
- 06/11/2020 — МЧС России даны разъяснения по организации вводного инструктажа по гражданской обороне
- 06/08/2020 — ФСС России разъяснил вопросы продления сроков уплаты страховых взносов на травматизм в связи с распространением COVID-19
- 05/28/2020 — Роспотребнадзор подготовил рекомендации по организации работы предприятий автотранспорта в условиях распространения COVID-19
- 05/26/2020 — Утвержден временный порядок расследования страховых случаев причинения вреда здоровью медработников от COVID-19
- 05/24/2020 — С 24 мая 2020 года работа за компьютером более 50% рабочего времени не является основанием для обязательных медосмотров
- 05/19/2020 — Роспотребнадзор дал рекомендации по организации работы образовательных организаций в условиях распространения COVID-19
- 05/19/2020 — Уточнено, при каких значениях частот электромагнитного поля работники должны будут проходить обязательные медосмотры
- 05/12/2020 — Роспотребнадзор дал новые рекомендации по организации работы вахтовым методом в условиях распространения COVID-19
- 05/06/2020 — Утверждены временные правила работы вахтовым методом
- 05/06/2020 — Роспотребнадзор дал рекомендации по организации работы вахтовым методом в условиях распространения COVID-19
- 05/06/2020 — Минтруд России разъяснил, как следует указывать сведения об условиях труда в трудовом договоре до и после проведения СОУТ
- 04/20/2020 — Определен временный порядок установления степени утраты профессиональной трудоспособности в результате несчастных случаев на производстве
- 04/20/2020 — Минтруд России разъяснил вопросы проведения медосмотров в период действия ограничений, связанных с COVID-19
- 04/14/2020 — Минстрой дал рекомендации по профилактике распространения коронавируса для организаций строительной отрасли
- 04/10/2020 — Правительством РФ определен минимум проверок в отношении юридических лиц и индивидуальных предпринимателей
- 04/10/2020 — Роспотребнадзор подготовил для работодателей новые рекомендации по профилактике распространения коронавирусной инфекции
- 04/09/2020 — Продлены сроки уплаты страховых взносов на травматизм для малого и среднего бизнеса, пострадавшего от коронавируса
- 04/08/2020 — До 1 октября 2020 года отложена проверка знаний требований охраны труда и безопасности, предъявляемых к организации и выполнению работ в электроустановках
- 04/04/2020 — До конца года не будут проводиться проверки в отношении субъектов малого и среднего предпринимательства
- 04/02/2020 — Тема Всемирного дня охраны труда в 2020 году
- 04/02/2020 — Дополнение к Рекомендациям работникам и работодателям в связи с объявлением в Российской Федерации нерабочих дней
- 03/30/2020 — Минтруд России дал разъяснения для работников и работодателей в связи с предстоящей нерабочей неделей
- 03/30/2020 — Уточнены особенности проведения специальной оценки условий труда на рабочих местах работников, занятых на подземных работах
- 03/11/2020 — Минтруд России разъяснил вопросы оплаты работодателем проезда и проживания работников в месте проведения медосмотров
- 02/28/2020 — Минздрав России разъяснил ряд вопросов, связанных с проведением профилактических прививок отдельным категориям работников
- 02/17/2020 — Министерством просвещения подготовлены примерные положения о СУОТ в образовательных организациях
- 02/16/2020 — Росархивом определены сроки хранения документов по охране труда
- 02/13/2020 — Роструд разъяснил вопросы, связанные с выполнением сверхурочной работы и установлением ненормированного рабочего дня
- 02/05/2020 — Роструд разъяснил вопросы, связанные с расторжением и прекращением трудовых договоров
- 01/21/2020 — До 27 января 2020 года необходимо сдать отчетность по форме N 7-травматизм
- 01/15/2020 — До 21 января 2020 года необходимо сдать отчетность по форме N 1-Т (условия труда)
- 01/05/2020 — Внесены изменения в порядок проведения обязательных медицинских осмотров работников
- 01/04/2020 — Минтруд России разъяснил вопрос о возможности введения в штатное расписание должности специалиста по охране труда на 0,5 ставки
- 01/03/2020 — Определен порядок осуществления госнадзора за расследованием и учетом несчастных случаев на производстве
- 01/01/2020 — Вступили в силу изменения в Федеральный закон «О специальной оценке условий труда»
- 12/26/2019 — Водители грузовиков и автобусов должны соблюдать нормы времени управления транспортным средством
- 11/18/2019 — Гарантии женщинам, работающим в сельской местности, теперь закреплены в Трудовом кодексе РФ
- 11/05/2019 — Минтруд России разъяснил порядок предоставления компенсаций за работу во вредных условиях труда
- 10/07/2019 — Минтруд России разъяснил вопрос об обучении безопасным методам выполнения работ на высоте при смене работодателя
- 10/03/2019 — Вступили в силу изменения в Правила противопожарного режима
- 09/16/2019 — Минтруд разъяснил порядок продления срока действия декларации соответствия условий труда государственным нормативным требованиям охраны труда
- 09/11/2019 — Внесены изменения в порядок расследования и учета несчастных случаев с обучающимися в образовательных организациях
- 09/06/2019 — Разъяснен порядок оформления трудовых отношений с педагогическими, медицинскими работниками и руководителями организаций отдыха детей
- 08/27/2019 — Минтруд России разъяснил, когда работающие за компьютером сотрудники должны проходить обязательные медосмотры
- 08/26/2019 — Введены в действе Правила по охране труда при эксплуатации подвижного состава железнодорожного транспорта
- 08/15/2019 — Утвержден новый перечень производств, работ и должностей, на которых ограничивается труд женщин
- 07/04/2019 — Минтранс России разъяснил некоторые вопросы по заполнению путевых листов
- 07/03/2019 — Введены в действие Правила по охране труда в морских и речных портах
- 06/03/2019 — Минтруд России разъяснил вопрос о необходимости проведения инструктажей по охране труда с лицом, выполняющим работы по гражданско-правовому договору
- 06/03/2019 — Утверждены Правила по охране труда при эксплуатации подвижного состава железнодорожного транспорта
- 05/16/2019 — Вступили в силу изменения в Правила по охране труда при производстве отдельных видов пищевой продукции
- 04/29/2019 — Минтранс России разъяснил особенности проведения обязательных предрейсовых и послерейсовых медосмотров
- 04/18/2019 — Роструд утвердил методические рекомендации по проверке создания и обеспечения функционирования СУОТ у работодателей
- 04/17/2019 — Введены в действие Типовые нормы бесплатной выдачи спецодежды и СИЗ работникам торфозаготовительных и торфоперерабатывающих организаций
- 04/11/2019 — Утверждены Правила по охране труда в морских и речных портах
- 04/09/2019 — Введены в действие правила по охране труда при выполнении работ по эксплуатации, техобслуживанию и ремонту промышленного транспорта
- 03/21/2019 — Введены в действие Типовые нормы бесплатной выдачи СИЗ работникам организаций легкой промышленности
- 03/05/2019 — Тема Всемирного дня охраны труда в 2019 году
- 03/04/2019 — Утверждены типовые формы контрактов на оказание услуг по проведению специальной оценки условий труда и обучению по охране труда
- 03/04/2019 — Минтруд России разъяснил, каким образом должна осуществляться разработка и выдача инструкций по охране труда работникам организаций
- 02/28/2019 — Минтруд России разъяснил, какой инструктаж должен проводиться водителям перед выездом на линию
- 02/28/2019 — Внесены изменения в Правила по охране труда при производстве отдельных видов пищевой промышленности
- 02/27/2019 — С 27 февраля 2019 года при проведении госэнергонадзора может проверяться соблюдение требований охраны труда
- 01/29/2019 — 29 января 2019 года вступили в силу изменения в правила по охране труда в строительстве, при работе на высоте и при работе с инструментом
- 01/23/2019 — Утверждены Типовые нормы бесплатной выдачи спецодежды и СИЗ работникам торфозаготовительных и торфоперерабатывающих организаций
- 01/21/2019 — Минтруд России разъяснил, в каких случаях у индивидуальных предпринимателей не проводится специальная оценка условий труда
- 01/21/2019 — Уточнены правила финансового обеспечения предупредительных мер по сокращению производственного травматизма и профзаболеваний
- 01/16/2019 — Уточнен порядок осуществления госнадзора за соблюдением требований охраны труда при эксплуатации электроустановок и тепловых энергоустановок
- 01/08/2019 — Вступили в силу изменения в законе о специальной оценке условий труда
- 01/01/2019 — 1 января 2019 года вступил в силу закон, определяющий размеры страховых взносов на травматизм в 2019 году
- 12/28/2018 — Утверждены Типовые нормы бесплатной выдачи СИЗ работникам организаций легкой промышленности
- 12/10/2018 — Утвержден порядок организации и проведения предрейсового или предсменного контроля технического состояния транспортных средств
- 12/10/2018 — Роструд разъяснил отдельные вопросы оказания первой помощи
- 12/08/2018 — Разъяснен порядок оплаты расходов на реабилитацию лиц, пострадавших от несчастных случаев на производстве и профзаболеваний
- 12/07/2018 — Постановление Пленума Верховного Суда РФ от 29.11.2018 N 41
- 12/06/2018 — Определены нормы бесплатной выдачи СИЗ работникам государственных природных заповедников, находящихся в ведении Минобрнауки России
- 12/03/2018 — Минтруд России разъяснил порядок применения ГОСТ 12.0.004-2015
- 11/13/2018 — Утверждены новые формы проверочных листов, используемых при проведении плановых проверок соблюдения требований пожарной безопасности
- 11/01/2018 — Вступили в силу изменения в Правила по охране труда в строительстве
- 11/01/2018 — Вступили в силу изменения в Правила по охране труда в лесозаготовительном, деревообрабатывающем производствах и при лесохозяйственных работах
- 11/01/2018 — Минздравом России разъяснены вопросы оказания первой помощи работникам организации
- 10/24/2018 — Минтрудом и Минздравом России разъяснены отдельные вопросы, связанные с отнесением условий труда на рабочих местах медицинских работников к определенному классу
- 10/15/2018 — Роспотребнадзор разъяснил, чем регламентированы гигиенические требования к условиям труда женщин
- 10/12/2018 — Минтруд России разъяснил отдельные вопросы, связанные с охраной труда при работе на высоте
- 10/09/2018 — Минтруд России разъяснил некоторые вопросы о порядке обучения по охране труда и проверки знания требований охраны труда
- 10/09/2018 — Утверждены правила по охране труда при выполнении работ по эксплуатации, техническому обслуживанию и ремонту промышленного транспорта
- 10/05/2018 — Рострудом утверждены 26 новых проверочных листов, которые будут использоваться при проведении плановых проверок
- 09/27/2018 — Минтруд России напоминает о необходимости проведения специальной оценки условий труда до конца 2018 года
- 09/27/2018 — Вступили в силу Правила по охране труда на автомобильном транспорте
- 09/26/2018 — За счет средств ФСС работодатель сможет возместить расходы на приобретение работникам СИЗ, изготовленных на территории государств — членов ЕАЭС
- 09/09/2018 — Вступили в силу Правила по охране труда при выполнении окрасочных работ
- 08/22/2018 — Роструд разъяснил вопрос необходимости включения пункта о СИЗ в программу вводного инструктажа по охране труда
- 08/21/2018 — Утверждено новое приложение к форме федерального статистического наблюдения N 7-травматизм
- 08/17/2018 — Определены особенности СОУТ на рабочих местах работников, участвующих в производстве и уничтожении взрывчатых веществ и боеприпасов
- 08/16/2018 — Внесены изменения в Правила по охране труда в сельском хозяйстве
- 08/15/2018 — Утверждена новая форма N 1-Т (условия труда) «Сведения о состоянии условий труда и компенсациях на работах с вредными и опасными условиями труда»
- 08/07/2018 — Внесены изменения в Правила по охране труда в строительстве
- 08/06/2018 — Минтруд России разъяснил отдельные вопросы обучения безопасным методам и приемам выполнения работ на высоте
- 08/03/2018 — Внесены изменения в Правила по охране труда в деревообрабатывающем, лесозаготовительном производствах и при лесохозяйственных работах
- 07/30/2018 — Минтруд России разъяснил требования к оформлению журналов проведения инструктажей по охране труда
- 07/23/2018 — Приняты законы об исключении дублирования полномочий федеральных органов исполнительной власти в сфере охраны труда
- 07/01/2018 — С 1 июля 2018 года при проведении плановых проверок работодателей должны использоваться проверочные листы
- 06/27/2018 — МЧС России разработаны методические рекомендации по организации и проведению вводного инструктажа по ГО
- 06/13/2018 — Утверждены правила охраны труда при выполнении окрасочных работ
- 06/12/2018 — Минтруд России разъяснил особенности проведения плановых проверок с использованием проверочных листов
- 06/12/2018 — Вступили в силу изменения в порядок выдачи работникам смывающих и обезвреживающих средств
- 06/09/2018 — Минтруд России разъяснил, какие правила по охране труда должны применяться в организациях связи
- 06/05/2018 — Утверждены новые предельно допустимые концентрации (ПДК) микроорганизмов-продуцентов, бактериальных препаратов в воздухе рабочей зоны
- 06/03/2018 — Введены в действие типовые нормы бесплатной выдачи СИЗ работникам отдельных отраслей промышленности
- 05/29/2018 — Минтрансом России внесены изменения в Положение о режиме труда и отдыха водителей автомобилей
- 05/28/2018 — Правительством России одобрен законопроект о ратификации Конвенции о безопасности и гигиене труда в строительстве
- 05/21/2018 — Вступили в силу Правила по охране труда в организациях связи
- 05/17/2018 — Подготовлен проект порядка прохождения ежегодного медосмотра работниками ведомственной охраны
- 05/14/2018 — Роструд разъяснил некоторые вопросы порядка продления срока для исполнения предписания Государственной инспекции труда
- 05/10/2018 — Утверждены Основы государственной политики РФ в области промышленной безопасности на период до 2025 года и дальнейшую перспективу
- 05/07/2018 — Минтруд России предлагает разрешить отзыв из отпуска работников, занятых на работах с вредными или опасными условиями труда
- 05/02/2018 — Введен в действие ГОСТ Р 57974-2017, устанавливающий требования к проведению проверок систем противопожарной защиты в зданиях
- 04/25/2018 — Утверждены новые размеры предельно допустимой концентрации (ПДК) вредных веществ в воздухе рабочей зоны
- 04/25/2018 — ФСС России разъяснил отдельные вопросы обязательного социального страхования от несчастных случаев на производстве и профзаболеваний
- 04/23/2018 — Вступили в силу Типовые нормы бесплатной выдачи СИЗ работникам элеваторной, мукомольно-крупяной и комбикормовой промышленности
- 04/16/2018 — Подготовлен проект, определяющий перечень работ с вредными и опасными условиями труда, на которых ограничен труд женщин
- 04/06/2018 — Подготовлен проект Правил по охране труда при выполнении работ в театрах, концертных залах, цирках и зоопарках
- 04/05/2018 — Роструд разъяснил условия для снижения категории риска деятельности юридических лиц и индивидуальных предпринимателей
- 04/04/2018 — Письмо Роструда от 07.03.2018 N 837-ТЗ «О добровольном внутреннем контроле работодателями соблюдения требований трудового законодательства»
- 04/01/2018 — Определены нормы бесплатной выдачи СИЗ работникам государственных природных заповедников, находящихся в ведении ФАНО России
- 03/29/2018 — Минтруд России разработал проект обновленного порядка обучения по охране труда и проверки знания требований охраны труда работников организаций
- 03/28/2018 — Утверждены Правила по охране труда на автомобильном транспорте
- 03/28/2018 — Роструд разработал формы 28 новых проверочных листов для применения при проведении проверок соблюдения трудового законодательства
- 03/26/2018 — Тема Всемирного дня охраны труда в 2018 году
- 03/17/2018 — Минтруд России разработал проекты типовых контрактов на оказание услуг по проведению СОУТ и услуг по обучению вопросам охраны труда
- 03/16/2018 — Работники организаций социального обслуживания должны будут проходить обязательные медицинские осмотры
- 03/15/2018 — Минтрудом России утвержден примерный перечень мероприятий по снижению травматизма на производстве
- 03/12/2018 — Утверждены типовые нормы выдачи СИЗ работникам промышленности стройматериалов, стекольной и фарфоро-фаянсовой промышленности
- 03/07/2018 — Утверждены типовые нормы бесплатной выдачи СИЗ работникам, выполняющим геологические, топографо-геодезические и землеустроительные работы
- 03/01/2018 — Минздрав России разъяснил порядок перевода младшего медицинского персонала в уборщики служебных помещений
- 02/21/2018 — Утверждены Правила по охране труда в организациях связи
- 02/21/2018 — Уточнены основания для изменения присвоенной категории риска деятельности юридических лиц или индивидуальных предпринимателей
- 02/19/2018 — Подготовлен проект правил по охране труда в морских и речных портах
- 02/17/2018 — Вступают в силу Правила по охране труда при осуществлении охраны (защиты) объектов и (или) имущества
- 02/04/2018 — Вступил в силу приказ Роструда об утверждении форм 107 проверочных листов, используемых при проведении плановых проверок
- 02/02/2018 — Уточнен порядок осуществления Рострудом государственного надзора за соблюдением трудового законодательства
- 01/30/2018 — Подготовлен проект уточняющий обязанности работодателя по обеспечению безопасных условий и охраны труда в отношении подрядных организаций
- 01/24/2018 — ФСС РФ разъяснил, какой должна быть продолжительность неполного рабочего дня для возмещения Фондом расходов на выплату пособия по уходу за ребенком
- 01/23/2018 — Утверждены Типовые нормы бесплатной выдачи СИЗ работникам элеваторной, мукомольно-крупяной и комбикормовой промышленности
- 01/14/2018 — Подготовлен проект, изменяющий Правила по охране труда в сельском хозяйстве
- 01/12/2018 — Правительством РФ внесен проект о лишении Ростехнадзора и Росздравнадзора контрольных функций в сфере охраны труда
- 01/12/2018 — Утверждено Типовое положение о единой системе управления промышленной безопасностью и охраной труда для организаций по добыче угля
- 01/11/2018 — За нарушение требований к организации безопасного использования и содержания лифтов и эскалаторов могут установить административную ответственность
- 01/10/2018 — Минтруд России разъяснил вопрос о проведении внеплановой спецоценки условий труда при перемещении рабочих мест
- 01/09/2018 — Правительством РФ внесены изменения в Правила противопожарного режима в Российской Федерации
- 01/08/2018 — Нарушение порядка оформления трудовых отношений будет являться основанием для проведения внеплановой проверки
- 01/06/2018 — Определены страховые тарифы на травматизм на 2018 год и на плановый период 2019 и 2020 годов
- 01/06/2018 — МЧС России утверждены формы проверочных листов, используемых при проведении плановых проверок соблюдения требований пожарной безопасности
- 01/01/2018 — С 1 января 2018 года при проведении проверок соблюдения трудового законодательства должны применяться риск-ориентированный подход и проверочные листы
- 01/01/2018 — С 1 января 2018 года инспекторы Роструда будут проверять обеспечение доступности рабочих мест и условий труда для инвалидов
- 01/01/2018 — Введен в действие ГОСТ 12.0.230.3-2016 «ССБТ. Системы управления охраной труда. Оценка результативности и эффективности»
- 12/29/2017 — Рострудом подготовлены доклады за I и II кварталы 2017 года с руководствами по соблюдению обязательных требований трудового законодательства
- 12/27/2017 — Внесены изменения в Правила финансового обеспечения предупредительных мер по сокращению производственного травматизма и профзаболеваний
- 12/26/2017 — Роструд опубликовал перечень типовых нарушений обязательных требований трудового законодательства с классификацией по степени риска причинения вреда работнику
- 12/18/2017 — МЧС России разъяснены требования об организации подготовки работников в области ГО и вопросы проведения плановых и внеплановых проверок
- 12/15/2017 — Определены особенности проведения СОУТ на рабочих местах водителей городского наземного пассажирского транспорта общего пользования
- 12/14/2017 — Подготовлен проект, изменяющий Закон о специальной оценке условий труда
- 12/13/2017 — Уточнены правила выдачи работникам смывающих и обезвреживающих средств
- 12/08/2017 — Постановление Конституционного Суда РФ от 07.12.2017 N 38-П
- 12/04/2017 — Подготовлен проект, изменяющий Методику проведения специальной оценки условий труда
- 12/01/2017 — Вступают в силу Типовые нормы бесплатной выдачи СИЗ работникам авиационной промышленности
- 11/27/2017 — Региональные органы власти имеют право расширять перечень профессий, подлежащих обязательным медицинским осмотрам
- 11/27/2017 — Инспекторы Роструда будут осуществлять надзор за обеспечением доступности для инвалидов специальных рабочих мест и условий труда
- 11/26/2017 — Подготовлен проект, уточняющий особенности режима рабочего времени и времени отдыха водителей автомобилей
- 11/25/2017 — Утвержден новый Перечень должностных лиц Ростехнадзора, уполномоченных составлять протоколы об административных правонарушениях
- 11/24/2017 — Рострудом утверждено руководство по установлению степени утраты профессиональной трудоспособности от несчастных случаев на производстве и профзаболеваний
- 11/22/2017 — Внесены изменения в Правила противопожарного режима в Российской Федерации
- 11/21/2017 — Подготовлен проект, устанавливающий новые предельно допустимые концентрации вредных веществ в воздухе рабочей зоны
- 11/17/2017 — Утверждены Правила по охране труда при осуществлении охраны (защиты) объектов и (или) имущества
- 11/17/2017 — Утверждены формы 107 проверочных листов, которые будут использоваться Рострудом при проведении плановых проверок
- 11/16/2017 — Минтрудом России утверждены методические рекомендации по выявлению признаков дискриминации инвалидов в трудовой сфере
- 11/13/2017 — Роструд разъяснил вопрос о соблюдении и исполнении требований межотраслевых правил по охране труда
- 11/08/2017 — МЧС России разработан проект нового порядка обучения мерам пожарной безопасности
- 11/07/2017 — Минтруд России разъяснил порядок прохождения работниками обучения по охране труда и проверки знаний требований охраны труда
- 11/02/2017 — Рострудом опубликован доклад с руководством по соблюдению работодателями обязательных требований трудового законодательства
- 11/01/2017 — Вводятся в действие Правила по охране труда при проведении работ в легкой промышленности
- 10/31/2017 — Отменен запрет на проведения проверок исполнения работодателями нормативно-правовых актов СССР и РСФСР в сфере труда
- 10/30/2017 — Подготовлен проект изменений в Правила по охране труда в строительстве
- 10/17/2017 — Книга МОТ: «Коллективные переговоры. Стратегическое руководство»
- 10/13/2017 — Вступает в силу приказ Ростехнадзора, уточняющий требования к производству сварочных работ на опасных производственных объектах
- 10/05/2017 — Утвержден Порядок расследования и учета несчастных случаев с обучающимися во время пребывания в образовательной организации
- 10/02/2017 — Минтруд России разъяснил порядок применения ГОСТов и правил по охране труда
- 10/02/2017 — С 1 октября 2017 года плановые проверки органами ГПН осуществляются с использованием проверочных листов
- 09/28/2017 — Ростехнадзор предполагает уточнить перечень должностных лиц, уполномоченных составлять протоколы об административных правонарушениях
- 09/27/2017 — Внесены изменения в Порядок оформления декларации промышленной безопасности опасных производственных объектов
- 09/26/2017 — Обязательные медосмотры водителей могут перевести на телемедицинские технологии
- 09/14/2017 — Минобрнауки России разработан примерный перечень мероприятий соглашения по охране труда в организациях, осуществляющих образовательную деятельность
- 09/14/2017 — Минтруд России подготовил план мероприятий по совершенствованию правового регулирования в сфере охраны труда
- 09/14/2017 — Утверждена новая форма N 1-Т (условия труда), которая должна применяться с отчета за 2017 год
- 09/13/2017 — В 2018 году при проведении плановых проверок государственные инспекторы труда должны использовать проверочные листы
- 09/12/2017 — Установлены особенности проведения СОУТ медработников, оказывающих психиатрическую и иную медпомощь лицам с психическим расстройством
- 09/12/2017 — Подготовлен проект, уточняющий правила выдачи работникам смывающих и обезвреживающих средств
- 09/11/2017 — Подготовлен проект Правил по охране труда при выполнении окрасочных работ
- 09/07/2017 — Подготовлен проект, определяющий порядок обучения мерам пожарной безопасности работников организаций
- 09/05/2017 — Утверждены типовые нормы бесплатной выдачи спецодежды работникам авиационной промышленности
- 09/05/2017 — Минтруд России разъяснил порядок организации работы комиссии по проведению специальной оценки условий труда
- 08/28/2017 — Введены в действие Правила по охране труда при использовании отдельных видов химических веществ и материалов
- 08/28/2017 — МЧС России разъяснило положения об обязанности проведения вводного инструктажа по гражданской обороне с вновь принятыми работниками
- 08/23/2017 — Минздрав России разъяснил некоторые вопросы санитарно-эпидемиологических требований к безопасности условий труда несовершеннолетних
- 08/16/2017 — Разработан проект об уточнении порядка осуществления Рострудом функций по надзору за соблюдением трудового законодательства
- 08/16/2017 — Разработан проект Правил по охране труда при производстве строительных материалов
- 08/10/2017 — Ужесточена уголовная ответственность за уклонение от уплаты страховых взносов
- 08/06/2017 — Вводятся в действие Правила по охране труда при производстве дорожных строительных и ремонтно-строительных работ
- 08/04/2017 — Подготовлен проект изменений в Правила по охране труда при работе на высоте
- 08/02/2017 — Минтруд России разъяснил правила предоставления специальных перерывов работникам, работающим за компьютером
- 08/01/2017 — Минтрудом России утверждены Правила по охране труда при проведении работ в легкой промышленности
- 08/01/2017 — Внесены изменения в Технический регламент о требованиях пожарной безопасности
- 07/31/2017 — Урегулировано взаимодействие ФСС РФ и следственных органов при выявлении фактов уклонения от уплаты страховых взносов на травматизм
- 07/31/2017 — С 1 августа 2017 года меняются правила возмещения расходов на специальную одежду за счет взносов на производственный травматизм
- 07/29/2017 — Минтруд России подготовил проект приказа об утверждении Правил по охране труда при эксплуатации промышленного транспорта
- 07/27/2017 — Страховые тарифы на травматизм на 2018 год и на плановый период 2019 и 2020 годов планируется сохранить на прежнем уровне
- 07/27/2017 — МЧС России разработало нормативный документ, который определяет дополнительное снижение нагрузки на бизнес сообщество
- 07/27/2017 — Принят технический регламент ЕАЭС о требованиях к средствам обеспечения пожарной безопасности и пожаротушения
- 07/24/2017 — Водителям, не прошедшим независимую оценку квалификации, могут запретить осуществлять трудовую деятельность
- 07/19/2017 — МЧС России предлагает проводить обучение работников в области гражданской обороны только в организациях, отнесенных к категориям по ГО
- 07/18/2017 — Минтруд России разъяснил требования к испытательным лабораториям организаций, претендующих на проведение спецоценки условий труда
- 07/07/2017 — Решение Верховного Суда РФ от 27.04.2017 N АКПИ17-144
- 07/05/2017 — Уточнены некоторые вопросы регулирования трудовой деятельности несовершеннолетних
- 06/29/2017 — Утвержден порядок организации и проведения предрейсового контроля технического состояния транспортных средств
- 06/29/2017 — Обновлена форма расчета по начисленным и уплаченным страховым взносам на ОСС от несчастных случаев на производстве и профзаболеваний
- 06/29/2017 — Правительством РФ утвержден перечень заболеваний, препятствующих работе на морских судах, судах внутреннего и смешанного плавания
- 06/27/2017 — Утверждена новая годовая статистическая форма для предоставления сведений о травматизме на производстве и профзаболеваниях
- 06/24/2017 — Роспотребнадзор разъяснил возможность использования светодиодного освещения в образовательных учреждениях
- 06/21/2017 — МЧС России разъяснило порядок проведения вводных инструктажей и курсового обучения по гражданской обороне
- 06/16/2017 — Уточнен порядок оплаты дополнительных расходов на реабилитацию лиц пострадавших вследствие несчастных случаев на производстве
- 06/16/2017 — Минтруд России разъяснил вопрос о прохождении медицинского осмотра работником, уволенным и принятым на ту же работу
- 06/14/2017 — Минтруд России разъяснил вопрос о порядке проведения вводного инструктажа по охране труда
- 06/09/2017 — Определен порядок осуществления Рострудом госнадзора за соблюдением требований законодательства о специальной оценке условий труда
- 06/06/2017 — Подготовлен проект определяющий порядок расследования и учета несчастных случаев с обучающимися во время пребывания в образовательной организации
- 06/06/2017 — Минтруд России разъяснил порядок подачи декларации соответствия условий труда государственным нормативным требованиям охраны труда
- 06/02/2017 — Роструд разъяснил вопрос о прохождении обязательных медицинских осмотров работниками, занятыми на работе с ПЭВМ
- 05/31/2017 — Утверждены Правила по охране труда при использовании отдельных видов химических веществ и материалов
- 05/27/2017 — Ростехнадзор разъяснил отдельные вопросы присвоения I группы по электробезопасности
- 05/25/2017 — Запрет на проверку с 1 июля 2017 года требований нормативно-правовых актов СССР и РСФСР, по отдельным вопросам регулирования трудовых отношений может быть отмен
- 05/18/2017 — Роструд разъяснил условия и порядок снижения категории риска работодателя на более низкую категорию
- 05/13/2017 — Утверждены Правила по охране труда при производстве дорожных строительных и ремонтно-строительных работ
- 05/11/2017 — Правительством России утвержден план мероприятий по повышению уровня занятости инвалидов на 2017-2020 годы
- 05/05/2017 — Минтруд России разъяснил порядок организации обучения по оказанию первой помощи пострадавшим на производстве
- 05/03/2017 — Минтруд России подготовил законопроект о сопровождаемом содействии трудоустройству инвалидов
- 04/30/2017 — В России начинает действовать Конвенция МОТ о работе на условиях неполного рабочего времени
- 04/27/2017 — Роструд разработал для государственных инспекторов труда методические рекомендации припроведении расследования несчастных случаев
- 04/27/2017 — Минфин России разъяснил вопрос о применении дополнительных тарифов страховых взносов на ОПС исходя из результатов спецоценки условий труда
- 04/22/2017 — Минтруд России установил тождество отдельных наименований профессий для целей назначения досрочной пенсии по старости
- 04/22/2017 — ФСС России разъяснил отдельные вопросы финансового обеспечения предупредительных мер по сокращению травматизма и профзаболеваний
- 04/21/2017 — Информация Минтруда России по вопросам независимой оценки квалификации
- 04/21/2017 — Вступили в действие Правила по охране труда при добыче (вылове), переработке водных биоресурсов и производстве продукции из водных биоресурсов
- 04/20/2017 — Вступили в действие Правила по охране труда при нанесении металлопокрытий и Правила по охране труда на городском электрическом транспорте
- 04/13/2017 — Вступило в силу Положение о правилах обязательного страхования гражданской ответственности владельца опасного объекта
- 04/12/2017 — Утверждены новые формы документов, применяемых при контроле за уплатой страховых взносовна ОСС от несчастных случаев и профзаболеваний
- 04/08/2017 — Организации должны подавать в инспекцию нулевой расчет по страховым взносам, если в отчетном периоде хозяйственная деятельность не велась
- 04/07/2017 — Отчитаться по начисленным и уплаченным страховым взносам по обязательному социальному страхованию нужно по новой форме
- 04/05/2017 — Информация Минтруда России по вопросам применения профессиональных стандартов
- 04/04/2017 — Ростехнадзор разъяснил вопрос обучения персонала электрослужб оказанию первой помощи пострадавшим
- 04/04/2017 — Разъяснение Роструда по вопросу применения профессионального стандарта специалиста в области охраны труда
- 03/30/2017 — Минздравом России подготовлен проект приказа, уточняющий порядок проведения обязательных медосмотров работников
- 03/29/2017 — В Госдуму внесен проект изменений в ТК РФ в части ограничения использования ненормированного рабочего дня
- 03/28/2017 — Минтруд России разъяснил требования к средствам индивидуальной защиты
- 03/28/2017 — Минтруд России разъяснил порядок пересмотра инструкций по охране труда
- 03/25/2017 — Роструд разъяснил некоторые вопросы порядка проведения проверок
- 03/25/2017 — Минтруд России разъяснил вопрос проведения работодателем вводного инструктажа по охране труда
- 03/25/2017 — Минтруд России разъяснил отдельные вопросы декларирования рабочих мест
- 03/23/2017 — Целевой инструктаж по охране труда при проведении субботника
- 03/20/2017 — Подготовлен проект, определяющий особенности проведения спецоценки условий труда отдельных категорий медицинских работников
- 03/17/2017 — Подготовлен проект, определяющий особенности проведения спецоценки условий труда водителей городского наземного пассажирского транспорта
- 03/17/2017 — Роструд разъяснил порядок обучения работников безопасным методам и приемам выполненияработ на высоте
- 03/16/2017 — Страхователи уплачивающие взносы на травматизм должны подтвердить основной вид экономической деятельности до 17 апреля 2017 года
- 03/09/2017 — Утверждена Национальная стратегия действий в интересах женщин
- 03/09/2017 — Роспотребнадзор разработал новые требования к рабочим местам женщин
- 03/08/2017 — Доклад Международной организации труда и Института Гэллапа «К лучшему будущему для женщин и сферы труда: мнения женщин и мужчин»
- 03/06/2017 — Решение Верховного Суда РФ от 26.01.2017 N АКПИ16-1035
- 03/06/2017 — Книга Международной организации труда (МОТ): «Равная оплата труда. Вводное руководство»
- 03/06/2017 — Работники целлюлозно-бумажного, деревообрабатывающего, лесохимического производств будут получать спецодежду и СИЗ по новым нормам
- 03/05/2017 — Минтруд России разъяснил правовой статус Рекомендаций по организации работы службы охраны труда в организации
- 03/04/2017 — Руководство МОТ «Формирование культуры охраны труда»
- 03/03/2017 — Минтруд России разъяснил порядок выполнения работ по обслуживанию опор линий связи
- 03/02/2017 — Утвержден порядок проведения экспертизы временной нетрудоспособности
- 03/02/2017 — Минтруд России разъяснил вопрос о необходимости проведения внеплановой СОУТ при перемещении рабочего места
- 03/01/2017 — Как организовать медицинские осмотры водителей
- 02/28/2017 — С 1 марта 2017 года вводятся в действие новые ГОСТы в сфере охраны труда
- 02/27/2017 — Доклад Международной организации труда (МОТ) о возможностях и проблемах, связанных с ростом масштабов удаленной работы
- 02/22/2017 — Государственный надзор в сфере труда будет осуществляться с применением риск-ориентированного подхода
- 02/20/2017 — Установлены общие требования к разработке и утверждению проверочных листов для проведения проверок
- 02/19/2017 — Утверждены Правила вынесения предостережений в адрес предпринимателей
- 02/17/2017 — Новый сервис для отправки деклараций соответствия условий труда в электронном виде
- 02/16/2017 — Подготовлен проект изменений в Порядок обучения по охране труда и проверки знаний требований охраны труда
- 02/14/2017 — Минобрнауки России разъяснило отдельные вопросы обучения по охране труда
- 02/12/2017 — Проверочные листы при проведении плановых проверок могут быть введены уже в этом году
- 02/09/2017 — Роструд напоминает об условиях труда в морозы
- 02/09/2017 — Изменена форма декларации соответствия условий труда государственным нормативным требованиям охраны труда
- 02/08/2017 — Минтруд России разъяснил порядок приема деклараций соответствия условий труда государственным нормативным требованиям
- 02/06/2017 — Минэкономразвития внесло в Правительство проект постановления о введении институтапредостережения в контрольно-надзорной деятельности
- 02/06/2017 — Предостережение вместо внеплановых проверок
- 02/03/2017 — Тема Всемирного дня охраны труда в 2017 году
- 02/01/2017 — Определение Верховного Суда РФ от 20.12.2016 N 67-КГ16-22
- 02/01/2017 — Минтруд России разъяснил порядок применения профстандарта для специалистов по охране труда
- 02/01/2017 — Минтруд России разъяснил порядок предоставления работникам лечебно-профилактического питания
- 02/01/2017 — Минтруд России разъяснил порядок обеспечения работодателем ухода за средствами индивидуальной защиты
- 01/31/2017 — Определены перечни НПА соблюдение которых должно оцениваться Рострудом при проведении проверок
- 01/31/2017 — Утверждены Правила по охране труда при добыче и переработке рыбы и морепродуктов
- 01/30/2017 — Утверждены Правила по охране труда при нанесении металлопокрытий
- 01/27/2017 — Утверждены Правила по охране труда на городском электрическом транспорте
- 01/20/2017 — Минтруд России разъяснил порядок применения Типового положения о системе управления охраной труда
- 01/09/2017 — Постановление Пленума Верховного Суда РФ от 23.04.1991 N 1 (ред. 03.03.2015)
- 01/06/2017 — Определен порядок рассмотрения разногласий по вопросам проведения спецоценки условий труда
- 01/04/2017 — С 3 января 2017 года вступили в силу изменения уточняющие правила заполнения акта о несчастном случае на производстве
- 01/03/2017 — Документация и отчетность по охране труда
- 01/01/2017 — Изменения в сфере охраны труда, вступающие в силу с 1 января 2017 года
- 12/29/2016 — Памятки для работников и работодателей стали доступны на портале Роструда «Онлайнинспекция.рф»
- 12/28/2016 — Уточнены правила начисления учета и расходования средств на обязательное соцстрахование от несчастных случаев на производстве и профзаболеваний
- 12/27/2016 — Уточнены правила заполнения акта о несчастном случае на производстве
- 12/22/2016 — Роструд разъяснил вопросы ответственности работодателя за необеспечение работников средствами индивидуальной защиты
- 12/21/2016 — Минтруд России разъяснил порядок действий комиссии по проведению СОУТ в случае несогласия с результатами идентификации потенциально вредных (опасных) факторов
- 12/21/2016 — Уточнен порядок обучения по охране труда и проверки знаний требований охраны трудаработников организаций
- 12/20/2016 — Роструд запустил мобильное приложение, позволяющее фотографировать нарушения и сообщать об этом в инспекцию
- 12/20/2016 — Организация работы службы охраны труда
- 12/20/2016 — Уточнен перечень рабочих мест в отношении которых спецоценка условий труда должна проводиться с учетом особенностей
- 12/19/2016 — Минтруд России разъяснил вопрос о создании работодателем службы охраны труда в организации
- 12/15/2016 — Оценка деятельности по выполнению требований охраны труда
- 12/15/2016 — Утверждены новые формы акта о причинах и обстоятельствах аварии на опасном объекте иизвещения об аварии на опасном объекте
- 12/07/2016 — Минтруд России разъяснил порядок применения Типового положения о системе управления охраной труда
- 12/07/2016 — Минтруд России разъяснил порядок проведения внеочередной проверки знаний требований охраны труда
- 12/01/2016 — Организация контроля за состоянием охраны труда
- 11/24/2016 — Уточнены основания для проведения внеплановых проверок в процессе осуществления государственного надзора за соблюдением трудового законодательства
- 11/23/2016 — Определен порядок проведения независимой оценки квалификации в форме профессионального экзамена
- 11/17/2016 — Минтруд России разъяснил вопросы декларирования соответствия условий труда государственным нормативным требованиям охраны труда и обучения по охране труда
- 11/17/2016 — Роструд разъяснил порядок прохождения обязательного обучения по охране труда и проверки знаний требований охраны труда работников
- 11/16/2016 — Минтруд России разъяснил порядок обеспечения работников средствами индивидуальной защиты
- 11/14/2016 — Трудоустройство и охрана труда несовершеннолетних
- 11/03/2016 — Минтруд России разъяснил порядок выдачи работникам средств индивидуальной защиты
- 11/02/2016 — Минтруд России разъяснил порядок проведения вводного инструктажа по охране труда
- 11/01/2016 — Учет рабочего времени на работах с вредными условиями труда
- 10/31/2016 — Минтруд России разъяснил порядок проведения внеочередной проверки знаний требований охраны труда
- 10/27/2016 — Роструд разъяснил порядок прохождения работниками обязательного психиатрического освидетельствования
- 10/21/2016 — Минтруд России разъяснил порядок проведения обучения и проверки знаний требований охраны труда
- 10/20/2016 — 19 октября 2016 года вступили в силу изменения в Правилах по охране труда приэксплуатации электроустановок
- 10/19/2016 — Личная карточка учета выдачи средств индивидуальной защиты
- 10/18/2016 — Утверждено Типовое положение о системе управления охраной труда
- 10/17/2016 — Минтруд России разъяснил порядок выдачи работникам средств индивидуальной защиты
- 10/14/2016 — Минтруд России разъяснил порядок выдачи работникам смывающих и (или) обезвреживающих средств
- 10/12/2016 — Минтруд России разъяснил порядок прохождения работниками обязательных психиатрических освидетельствований
- 10/05/2016 — Дополнительный отпуск за работу с вредными и/или опасными условиями труда
- 09/30/2016 — Система независимой оценки квалификации заработает в полную силу с 1 января 2017 года
- 09/29/2016 — Минтруд России разъяснил порядок разработки инструкций по охране труда
- 09/28/2016 — Минтруд России разъяснил порядок ведения журналов учета и выдачи инструкций по охране труда
- 09/27/2016 — Минтруд России разъяснил статус приказа, определяющего типовые нормы бесплатной выдачи специальной сигнальной одежды работникам всех отраслей экономики
- 09/18/2016 — Почему ни одной стране не удалось полностью исключить несчастные случаи на производстве
- 09/14/2016 — Минтруд России разъяснил порядок выдачи работникам смывающих и (или) обезвреживающих средств
- 08/30/2016 — Утверждена типовая форма трудового договора для микропредприятий
- 08/12/2016 — С 1 января 2017 года предъявить к финансированию за счет средств ФСС России можно будет только российские СИЗ
- 07/22/2016 — Утверждены Правила по охране труда при размещении, монтаже, техническом обслуживании и ремонте технологического оборудования
- 07/21/2016 — Минтруд России разъяснил порядок выдачи смывающих и (или) обезвреживающих средств
- 07/15/2016 — Минтруд России разъяснил вопросы охраны труда при выполнении погрузочно-разгрузочных работ и размещении грузов
- 07/14/2016 — Современные требования охраны труда при выполнении погрузочно-разгрузочных работ и размещении грузов установлены в 2014 году
- 07/02/2016 — Минтруд России разъяснил отдельные положения законодательства о спецоценке условий труда
- 07/01/2016 — Вступили в силу Правила по охране труда в сельском хозяйстве
- 06/24/2016 — Уточнены правила отнесения видов экономической деятельности к классу профессионального риска
- 06/23/2016 — Минтруд России разъяснил порядок выдачи работникам смывающих и (или) обезвреживающих средств
- 06/15/2016 — Подготовлен проект Правил по охране труда при проведении работ в легкой промышленности
- 06/08/2016 — Утвержден порядок проведения экспертизы профессиональной пригодности
- 06/06/2016 — Компенсацию за каждый день просрочки выплаты зарплаты хотят увеличить
- 06/04/2016 — Внесены изменения в ФЗ «О промышленной безопасности опасных производственных объектов»
- 06/02/2016 — Введен в действие ГОСТ 12.0.002-2014 «Система стандартов безопасности труда. Термины и определения»
- 05/30/2016 — Минтруд России разъяснил порядок применения Правил по охране труда при работе с инструментом и приспособлениями
- 05/25/2016 — Минтруд России разъяснил вопрос о выдаче офисным сотрудникам смывающих и (или) обезвреживающих средств
- 05/13/2016 — Минтруд России предлагает расширить перечень мер по охране труда, расходы на которые возмещаются работодателям за счет страховых взносов
- 05/05/2016 — Внесены изменения в Закон о специальной оценке условий труда
- 05/03/2016 — Коллективные переговоры в социально-трудовой сфере
- 05/03/2016 — Что такое органы социального партнерства
- 05/03/2016 — Представители сторон социального партнерства
- 05/02/2016 — Что такое социальное партнерство в сфере труда
- 05/02/2016 — С 4 мая 2016 года вступают в силу Правила по охране труда при хранении, транспортировании и реализации нефтепродуктов
- 04/30/2016 — Профсоюзы в трудовом праве
- 04/30/2016 — Гарантии прав профсоюзов
- 04/30/2016 — Основные права профсоюзов
- 04/30/2016 — Право на объединение в профсоюзы
- 04/30/2016 — Что такое профсоюз
- 04/29/2016 — Уточнено содержание профессионального стандарта для специалистов в области охраны труда
- 04/28/2016 — Доклад МОТ к Всемирному дню охраны труда 2016
- 04/27/2016 — Минтруд России разъяснил особенности проведения специальной оценки условий труда на рабочих местах медицинских работников
- 04/22/2016 — Минтруд России проводит работу по сближению российского законодательства об охране труда с международными нормами
- 04/21/2016 — С 2017 года финансовому обеспечению будут подлежать только изготовленные в России средства индивидуальной защиты
- 04/21/2016 — Работодатели, регулярно и качественно проводящие внутренний контроль, могут избежать плановых проверок
- 04/20/2016 — Минтруд России планирует внести изменения в Трудовой кодекс
- 04/19/2016 — Внесены изменения в Правила по охране труда при эксплуатации электроустановок
- 04/11/2016 — Внесены изменения в пункт 36 Правил противопожарного режима в РФ
- 04/11/2016 — ФСС России разъяснил отдельные вопросы применения Закона об обязательном социальном страховании от несчастных случаев на производстве
- 04/07/2016 — Подготовлены проекты, предусматривающие изменения по вопросам специальной оценки условий труда
- 04/01/2016 — С 1 апреля 2016 года вступили в силу Правила по охране труда при производстве отдельных видов пищевой продукции
- 03/31/2016 — Утверждены Правила по охране труда в сельском хозяйстве
- 03/26/2016 — Минтруд России разъяснил порядок обеспечения средствами индивидуальной защиты работников связи
- 03/19/2016 — Тема Всемирного дня охраны труда в 2016 году
- 03/17/2016 — Минтруд России разъяснил отдельные положения Правил по охране труда при работе на высоте
- 03/14/2016 — Введена новая форма медицинского заключения для водителей и кандидатов в водители
- 02/17/2016 — Утверждены Правила по охране труда в лесозаготовительном, деревообрабатывающем производствах и при проведении лесохозяйственных работ
- 02/05/2016 — Утверждены Правила по охране труда при хранении, транспортировании и реализации нефтепродуктов
- 02/04/2016 — Определены типовые нормы бесплатной выдачи СИЗ работникам организаций нефтеперерабатывающей и нефтехимической промышленности
- 02/02/2016 — Минтруд России разъяснил вопросы, касающиеся обучения работников безопасным методам и приемам выполнения работ на высоте
- 02/01/2016 — Утверждены Правила по охране труда при производстве цемента
- 01/26/2016 — Минтруд России разъяснил порядок обучения оказанию первой помощи пострадавшим на производстве
- 01/14/2016 — Утверждены Правила по охране труда при производстве отдельных видов пищевой продукции
- 12/30/2015 — Разработан проект закона, предусматривающий комплексные изменения в сфере охраны труда
- 12/29/2015 — Внесены изменения в отдельные законодательные акты РФ по вопросам обязательного социального страхования от несчастных случаев на производстве и профзаболеваний
- 12/24/2015 — Разработан проект Типового положения о системе управления охраной труда
- 12/13/2015 — Утвержден Порядок формирования, хранения и использования сведений о результатах проведений специальной оценки условий труда
- 12/10/2015 — Утверждены типовые нормы бесплатной выдачи СИЗ работникам судостроительных и судоремонтных организаций
- 12/04/2015 — Финансовая нагрузка на работодателей, которые постоянно обеспечивают безопасные условия труда,будет снижена
- 12/02/2015 — Роструд освободит от штрафов малый бизнес
- 12/02/2015 — Работодатели с низким уровнем риска будут полностью исключены из планов проверок
- 11/24/2015 — Минтруд России разъяснил порядок предоставления гарантий и компенсаций работникам, занятым во вредных и опасных условиях труда
- 11/18/2015 — Утвержден ГОСТ 12.0.002-2014 «Система стандартов безопасности труда. Термины иопределения»
- 11/14/2015 — С 14 ноября начинают действовать Правила по охране труда в жилищно-коммунальном хозяйстве
- 11/06/2015 — Внесены изменения в закон о защите прав юридических лиц и индивидуальных предпринимателей при осуществлении государственного контроля (надзора)
- 10/31/2015 — Минтрансом России внесены изменения в Положение об особенностях режима рабочего времени и времени отдыха водителей автомобилей
- 10/29/2015 — Внесены изменения в Положение о федеральном государственном пожарном надзоре
- 10/09/2015 — Утверждены Правила по охране труда при работе с инструментом и приспособлениями
- 10/09/2015 — Утверждены Правила по охране труда при эксплуатации тепловых энергоустановок
- 10/06/2015 — Минтруд России разъяснил порядок внесения в карты спецоценки условий труда СНИЛС работников
- 10/02/2015 — Определен перечень должностных лиц Роструда и его территориальных органов, уполномоченных составлять протоколы об административных правонарушениях
- 09/17/2015 — ФСС России разъяснил вопросы финансового обеспечения предупредительных мер по сокращению производственного травматизма и профзаболеваний работников
- 09/04/2015 — Минтруд России определил порядок оказания госуслуги по аккредитации организаций, оказывающих услуги в области охраны труда
- 08/25/2015 — Минобрнауки России разработаны рекомендации по созданию и функционированию системы управления охраной труда в образовательных организациях
- 08/21/2015 — Утверждены Правила по охране труда в строительстве
- 08/15/2015 — Утверждены Правила по охране труда в жилищно-коммунальном хозяйстве
- 08/14/2015 — Минтруд России обяжет предприятия вести учет любых травм работников
- 08/03/2015 — Определены особенности проведения специальной оценки условий труда на рабочих местах спортсменов
- 07/27/2015 — Внесены изменения в Правила по охране труда при работе на высоте
- 07/23/2015 — Внесены изменения в Положение о федеральном государственном надзоре за соблюдением трудового законодательства
- 07/22/2015 — Утверждены новые межгосударственные стандарты для специалистов в области охраны и безопасности труда
- 07/18/2015 — Определен порядок оказания Минтрудом России госуслуги по формированию и ведению реестра организаций, проводящих специальную оценку условий труда
- 07/17/2015 — Внесены изменения в ст. 213 Трудового кодекса РФ «Медицинские осмотры некоторых категорий работников»
- 07/16/2015 — В закон о защите прав юридических лиц и индивидуальных предпринимателей при осуществлении госконтроля (надзора) внесены изменения
- 07/15/2015 — Уточнены Правила аккредитации организаций, оказывающих услуги в области охраны труда
- 07/01/2015 — 1 июля 2015 года вступают в силу Правила по охране труда при погрузочно-разгрузочных работах и размещении грузов
- 06/24/2015 — Подготовлены Рекомендации по разработке и оформлению Правил по охране труда
- 06/15/2015 — Рекомендации по разработке и оформлению Правил по охране труда – 2015
- 06/03/2015 — 3 июня 2015 года вступают в силу Правила по охране труда при эксплуатации холодильных установок
- 06/02/2015 — 2 июня 2015 года вступают в силу Правила по охране труда на судах морского и речного флота
- 06/01/2015 — Утверждено Положение об аттестации экспертов в области промышленной безопасности
- 05/25/2015 — Утверждены особенности проведения спецоценки условий труда на рабочих местах отдельных категорий медицинских работников
- 05/06/2015 — 6 мая 2015 года вступают в силу новые Правила по охране труда при работе на высоте
- 05/01/2015 — 1 мая 2015 года вступил в силу Порядок проведения предсменных, предрейсовых и послесменных, послерейсовых медицинских осмотров
- 04/30/2015 — Уточнен перечень рабочих мест в организациях, в отношении которых предусмотрены особенности проведения специальной оценки условий труда
- 04/26/2015 — Сведения о результатах проведения специальной оценки условий труда разрешено передавать на электронных носителях
- 04/20/2015 — Утвержден Порядок проведения предсменных, предрейсовых и послесменных, послерейсовых медицинских осмотров
- 04/10/2015 — Письмо Минтруда России от 24.04.2015 N 17-3/В-215
- 03/26/2015 — Утверждены особенности проведения спецоценки условий труда на рабочих местах с пребыванием работников в условиях повышенного давления газовой и воздушной среды
- 03/23/2015 — Утверждены особенности проведения специальной оценки условий труда на рабочих местах водолазов
- 03/18/2015 — Утверждены особенности проведения специальной оценки условий труда на рабочих местах работников, занятых на подземных работах
- 03/12/2015 — Разъяснение Минтруда России о вступлении в силу и применении новых Типовых норм бесплатной выдачи спецодежды и различных средств индивидуальной защиты
- 03/04/2015 — Утверждены Правила по охране труда при эксплуатации холодильных установок
- 03/04/2015 — Утверждены Типовые нормы бесплатной выдачи СИЗ работникам сквозных профессий и должностей всех видов экономической деятельности
- 03/03/2015 — Письмо Роспотребнадзора от 02.02.2015 N 01/951-15-31 «Об оценке условий труда»
- 03/01/2015 — Утверждены Правила по охране труда при выполнении электросварочных и газосварочных работ
- 02/27/2015 — Минтруд утвердил методику снижения класса (подкласса) условий труда при применении работниками эффективных средств индивидуальной защиты
- 02/23/2015 — Ведение реестра организаций, проводящих специальную оценку условий труда, возложено на Департамент условий и охраны труда
- 02/20/2015 — Внесены изменения в Методику проведения специальной оценки условий труда и Классификатор вредных и (или) опасных производственных факторов
- 02/06/2015 — Уточнен перечень вредных и опасных производственных факторов, при наличии которых должны проводиться обязательные предварительные и периодические медосмотры
- 02/04/2015 — Учебное пособие Международной организации труда «Безопасность, охрана здоровья и условия труда»
- 01/30/2015 — Утверждено Положение о проведении общероссийского мониторинга условий и охраны труда
- 01/27/2015 — Утверждены методические рекомендации по определению размера платы за проведение экспертизы качества специальной оценки условий труда
- 01/16/2015 — Решение Верховного Суда РФ от 14.10.2014 N АКПИ14-918
- 01/14/2015 — Создается единый реестр для обеспечения учета проверок, проводимых при осуществлении государственного и муниципального контроля
- 01/11/2015 — Решение Верховного Суда РФ от 14.01.2013 N АКПИ12-1570
- 01/05/2015 — Проведение специальной оценки условий труда. Законодательные изменения
- 01/01/2015 — С 1 января 2015 года вступают в силу положения КоАП РФ, касающиеся нарушения требований в сфере охраны труда
Ростехнадзор разъясняет: Об идентификации, регистрации ОПО металлургической промышленности
Письмо Ростехнадзора от 09.10.2015 №00-04-05/1149 «Идентификация опасных производственных металлургической промышленности»
Руководителям территориальных органов Ростехнадзора (по списку)
В Ростехнадзор поступают многочисленные обращения от организаций, эксплуатирующих металлургические предприятия, и территориальных органов Ростехнадзора (далее — территориальный орган), связанные с регистрацией опасных производственных объектов (далее — ОПО) металлургической промышленности, которые в результате идентификации регистрируются по различным признакам, что приводит к неоднозначным результатам в контрольно-надзорной деятельности и страховании объектов.
Ростехнадзор, учитывая практику правоприменения порядка регистрации в государственном реестре опасных производственных объектов, письмом от 28.09.2015 № 00-01-33/565 указывает на необходимость соблюдения требований Федерального закона от 21.07.1997 № 116-ФЗ «О промышленной безопасности опасных производственных объектов» (далее -Закон № 116-ФЗ).
В соответствии с письмом Ростехнадзора и статьей 2 к Закону № 116-ФЗ опасными производственными объектами являются предприятия или их цехи, участки площадки, а так же иные производственные объекты, указанные в приложении 1 к данному Федеральному закону.
Опасные производственные объекты подлежат регистрации в государственном реестре с присвоением им соответствующего класса опасности в соответствии с приложением 2 к Закону № 116-ФЗ, а так же согласно пункту 10 в случае, если для опасного производственного объекта по указанным в пунктах 1-7 настоящего приложения критериям могут быть установлены разные классы опасности, устанавливается наиболее высокий класс опасности.
При проведении идентификации опасных производственных объектов металлургической промышленности, в соответствии с порядком реализации идентификации, определённым Административным регламентом Федеральной службы по экологическому, технологическому и атомному надзору по исполнению государственной функции по регистрации опасных производственных объектов и ведению государственного реестра опасных производственных объектов, утвержденным приказом Ростехнадзора от 4 сентября 2007 года № 606 (далее — Административный регламент), в их составе должны быть определены все признаки опасности в соответствии с приложением 1 к Закону № 116-ФЗ.
Анализ основных ошибок, допускаемых территориальными органами при регистрации объектов, на которых используются расплавы черных и цветных металлов, приведен в Приложении 1.
Для соблюдения существующего порядка при идентификации для целей регистрации ОПО в государственном реестре опасных производственных объектов следует:
1. Регистрацию ОПО в границах объектов металлургической отрасли осуществлять по виду деятельности, связанному с технологическим процессом по получению, транспортированию, использованию расплава черных и цветных металлов, сплавов на основе этих расплавов.
2. При регистрации ОПО металлургической отрасли промышленности необходимо учитывать при внесении в состав ОПО все технические устройства (грузоподъемные механизмы, сосуды под давлением, объекты газового хозяйства и т.д.), участвующие в технологическом процессе по получению, транспортированию, использованию расплава черных и цветных металлов, сплавов на основе этих расплавов, не выделяя по отдельности технические устройства, агрегаты и другое оборудование.
Приложение: копия письма Ростехнадзора от 28.09.2015 № 00-01-33/565.
Б.А.Красных
Письмо Ростехнадзора от 28.09.2015 № 00-01-33/565 «О регистрации опасных производственных объектов»
Руководителям территориальных органов Ростехнадзора (по списку)
В соответствии со статьей 2 Федерального закона от 21 июля 1997 г. № 116-ФЗ «О промышленной безопасности опасных производственных объектов» (далее — Закон № 116-ФЗ) опасными производственными объектами являются предприятия или их цехи, участки, площадки, а также иные производственные объекты, указанные в приложении 1 к данному Федеральному закону.
Опасные производственные объекты подлежат регистрации в государственном реестре с присвоением им соответствующего класса опасности в соответствии с приложением 2 к Закону № 116-ФЗ.
В последнее время участились случаи искусственного разделения единых технологических комплексов на отдельные опасные производственные объекты в целях их регистрации в государственном реестре и присвоения им разных (более низких) классов опасности (вплоть до регистрации отдельных технических устройств).
Вместе с тем, согласно пункту 10 приложения 2 к Закону № 116-ФЗ в случае, если для опасного производственного объекта по указанным в пунктах 1 — 7 данного приложения критериям могут быть установлены разные классы опасности, устанавливается наиболее высокий класс опасности.
На основании вышеизложенного, обращаю ваше внимание, что при регистрации опасных производственных объектов необходимо не допускать необоснованного дробления опасного производственного объекта, а при присвоении класса опасности неукоснительно соблюдать требования, установленные пунктом 10 приложения 2 к Закону № 116-ФЗ.
А.В.Алешин
Приложение №1
Анализ основных ошибок допускаемых территориальными органами Ростехнадзора при регистрации объектов, на которых используются расплавы черных и цветных металлов
При проведении идентификации опасных производственных объектов (далее — ОПО) металлургической промышленности в их составе должны быть определены все признаки опасности в соответствии с Приложением 1 Федерального закона от 21.07.1997 № 116-ФЗ «О промышленной безопасности опасных производственных объектов». Порядок реализации идентификации определён Административным регламентом Федеральной службы по экологическому, технологическому и атомному надзору по исполнению государственной функции по регистрации опасных производственных объектов и ведению государственного реестра опасных производственных объектов, утвержденным приказом Ростехнадзора от 4 сентября 2007 года № 606 (далее -Административный регламент).
В соответствии с Административным регламентом идентификация ОПО металлургической промышленности должна осуществляться эксплуатирующей организацией по отраслевому признаку «вид деятельности», а в случае отсутствия отраслевого признака учитывать согласно п. 16 Административного регламента по признаку опасности, связанному с обращением опасного вещества. Термин «вид деятельности» связан с технологическим процессом по получению, транспортированию, использованию расплава черных и цветных металлов, сплавов на основе этих расплавов.
При идентификации необходимо учитывать, что ОПО не является отдельный механизм, оборудование (техническое устройство), емкость с опасным веществом, сосуд под избыточным давлением и т.д.
ОПО является предприятие, определенная площадка производства (цех, участок), на котором осуществляется технологический процесс по получению, транспортированию, использованию расплава черных и цветных металлов, сплавов на основе этих расплавов с применением оборудования, рассчитанного на максимальное количество расплава 500 килограммов и более.
Технологический процесс включает в себя: подготовку шихты, материалов и ковшевого хозяйства, подводку и потребление горючих газов, а так же их смесей, непосредственное получение расплава, транспортировку и обработку расплава и шлака, разливку металла, отвод и очищение технологических газов.
В территориальных органах существует практика, когда типовые ОПО металлургической промышленности регистрируются по классам опасности различно, как сам объект, так и объекты находящиеся на нем. Различие в классах опасности объектов в целом приводят к неоднозначным результатам контрольно-надзорной деятельности при проведении проверок, при страховании объектов, и контроле выполнения других общих требований промышленной безопасности.
Примеры.
1. На печи по производству металлического порошка, работающей на природном газе, в технологии установлены совместно два устройства, подающие топливо на горелочное устройство. Это трубопровод природного газа и бак с мазутопроводом. Мазут используется для «чернения» факела, при этом вся установка запроектирована комплектно согласно техническим требованиям для металлургических и коксохимических производств. Территориальные органы регистрируют эти ОПО, как отдельные опасные объекты.
В данном случае, бак с мазутом является элементом комплекса печи по производству металлического порошка, а не отдельный ОПО. Регистрировать его необходимо как опасный производственный объект металлургической промышленности и учитывать все оборудование (технические устройства), эксплуатация которых определяет признак опасности.
2. На металлургическом предприятии в электросталеплавильном цехе применяется электропечь объемом 160 ООО килограмм (II класс опасности), имеется газовое хозяйство межцеховое и внутрицеховое (III класс опасности) и грузоподъемные краны (IV класс опасности). Данный объект территориальные органы зарегистрируют как цех (участок) электросталеплавильный (п. 13.1.2 Приказа Ростехнадзора от 07.04.2011 № 168 «Об утверждении требований к ведению государственного реестра опасных производственных объектов в части присвоения наименований опасным производственным объектам для целей регистрации в государственном реестре опасных производственных объектов»), с включением в объект газового и кранового оборудования с установлением II класса опасности объекта и проведением плановой проверки данного объекта один раз в течение одного года, а могут зарегистрировать как три отдельных ОПО по разным признакам, без отраслевого приоритета. Первый ОПО — Электросталеплавильный цех проверяется как объект II класса без внутрицехового газового хозяйства и без кранов, второй ОПО «Сеть газопотребления» газовое хозяйство -Электросталеплавильного цеха проверяется как объект III класса опасности, при этом третий ОПО «Объекты, где используются подъемные сооружения» объединяет в себя все краны предприятия, и так как объект IV класса опасности плановые проверки в отношении данного объекта не проводятся. В результате металлургический надзор проверяет не ОПО, на котором осуществляется единый технологический процесс в целом, а лишь отдельно взятую печь.
Регистрировать данный объект необходимо как ОПО — цех электросталеплавильный, с включением в объект газового и кранового оборудования, с установлением II класса опасности объекта, в котором проведение плановых проверок ОПО включает в себя проверки всех технических устройств, входящий в технологический процесс.
3. Алюминиевому предприятию цветной металлургии территориальные органы предписывают зарегистрировать «Площадку по признаку опасности -2.5 (ведение горных работ, работ по обогащению полезных ископаемых, а также работ в подземных условиях), при том, что это комплексное предприятие по производству алюминия и глинозема спроектированное в соответствии с металлургическими правилами безопасности, и на нем не осуществляется деятельность по обогащению полезных ископаемых и получение, использование, переработка, образование, хранение, транспортирование, уничтожение опасных веществ, указанных в приложении 1 к Федеральному закону «О промышленной безопасности опасных производственных объектов» (химия).
Регистрировать «Площадку производства глинозема» алюминиевого предприятию цветной металлургии необходимо как ОПО металлургической промышленности, при этом следует учитывать все оборудование (технические устройства), эксплуатация которых определяет признак опасности.
4. При регистрации газового хозяйства предприятия территориальными органами используются три способа регистрации. При первом способе регистрируются полностью все газовое хозяйство предприятия межцеховое, цеховое и газовое оборудование. При втором способе регистрируется отдельно как ОПО межцеховое газовое хозяйство и цеховое газовое хозяйство, при этом один ОПО — межцеховое газовое хозяйство, и в зависимости от количества цехов на предприятии — другие внутрицеховые ОПО. Третий способ, когда регистрируют газовое хозяйство межцеховое и цеховое, от входной задвижки и до газовой горелки металлургического агрегата.
На предприятиях металлургической промышленности необходимо регистрировать все газовое хозяйство в целом (межцеховое, цеховое и газовое оборудование), а так же в сведениях характеризующих опасный производственный объект указывать все технические устройства.
Вопрос от 20.04.2017:
Согласно п. 7 Приложения 2 к 116-ФЗ, для опасных производственных объектов, указанных в пункте 4 приложения 1 к настоящему Федеральному закону, устанавливаются следующие классы опасности:
- II класс опасности — для опасных производственных объектов, на которых используется оборудование, рассчитанное на максимальное количество расплава 10000 килограммов и более;
- III класс опасности — для опасных производственных объектов, на которых используется оборудование, рассчитанное на максимальное количество расплава от 500 до 10000 килограммов.
Прошу разъяснить, необходимо ли при этом учитывать суммарную максимальную массу расплава на всём объекте (суммарно во всём оборудовании) или необходимо учитывать максимальное количество расплава на конкретном оборудовании, отдельно.
К примеру, на объекте находятся 3 миксера с максимальной массой расплава 5000 кг в каждом, класс опасности у ОПО будет II или III?
Ответ Ростехнадзора: Управление горного надзора рассмотрело Ваше обращение, и сообщает.
На основании п.4 Приложения 1 Федерального закона от 21.07.1997г. № 116-ФЗ «О промышленной безопасности опасных производственных объектов», к категории опасных производственных объектов относятся объекты, на которых получаются, транспортируются, используются расплавы черных и цветных металлов, сплавы на основе этих расплавов с применением оборудования, рассчитанного на максимальное количество расплава 500 килограммов и более.
Если на участке эксплуатируются технические устройства с количеством расплава от 500 до 10000 килограммов каждое, то данный объект будет относиться к опасным производственным объектам III класса опасности, при условии, если объект не идентифицируется по иным признакам опасности в соответствии с Приложением 1 ФЗ-116. Следует учесть возможное наличие иного оборудования с количеством расплава свыше 10000 кг, например, ковш, миксер и другое.
В целях обеспечения промышленной безопасности, предупреждения аварий, случаев производственного травматизма на объектах, где получаются, транспортируются, используются расплавы черных и цветных металлов и сплавы на основе этих расплавов следует руководствоваться «Правилами безопасности при получении, транспортировании, использовании расплавов черных и цветных металлов и сплавов на основе этих расплавов» утвержденных приказом Ростехнадзора от 30 декабря 2013 г. № 656, зарегистрированным Минюстом 15.05.2014 № 32271.
Вопрос от 12.07.2017:
Согласно п. 4 Приложения 1 к Федеральному закону от 21 июля 1997 г. N 116-ФЗ «О промышленной безопасности опасных производственных объектов», к опасным производственным объектам относятся объекты, на которых получаются, транспортируются, используются расплавы черных и цветных металлов, сплавы на основе этих расплавов с применением оборудования, рассчитанного на максимальное количество расплава 500 килограммов и более.
Кремний является неметаллом, в связи с чем прошу разъяснить, относятся ли объекты, на которых применяется оборудование, рассчитанное на максимальное количество расплава кремния 500 килограммов и более, к опасным производственным объектам (по признаку опасности, указанному выше).
Ответ: Управление горного надзора рассмотрело Ваше обращение и сообщает:
федеральные нормы и правила в области промышленной безопасности «Правила безопасности при получении, транспортировании, использовании расплавов черных и цветных металлов и сплавов на основе этих расплавов», утвержденные приказом Ростехнадзора от 30.12.2013 г. № 656, зарегистрированные в Министерстве Юстиции Российской Федерации № 32271 от 15.05.2014 г. регламентируют требования безопасности на объектах металлургической промышленности в том числе и к производству кремния.
При производстве кремния необходимо руководствоваться вышеуказанными ФНП раздел III «Производство кристаллического кремния и электротермического силумина», а также другими нормативными документами.
ПИСЬМО от 3 мая 2018 г. N 09-00-06/3951 ОБ ИДЕНТИФИКАЦИИ ОБЪЕКТА
Управление государственного строительного надзора Федеральной службы по экологическому, технологическому и атомному надзору рассмотрело обращение, поступившее по информационным системам общего пользования, о разъяснении порядка идентификации объекта, на котором обращается расплав кремния, и в рамках установленной компетенции сообщает следующее.
Критерии отнесения проектируемого объекта к особо опасным, технически сложным и уникальным объектам определены статьей 48.1 Градостроительного кодекса Российской Федерации, в том числе пунктом 11:
- опасные производственные объекты I и II классов опасности, на которых получаются, используются, перерабатываются, образуются, хранятся, транспортируются, уничтожаются опасные вещества;
- опасные производственные объекты, на которых получаются, транспортируются, используются расплавы черных и цветных металлов, сплавы на основе этих расплавов с применением оборудования, рассчитанного на максимальное количество расплава 500 килограммов и более.
Вместе с тем, если на отдельных производственных объектах получаются (производятся) сплавы (расплавы) отдельных черных и цветных металлов, к примеру, алюминия с кремнием, типа силуминов, алюмосиликатов, то в соответствии с требованиями подпункта 4 Приложения N 1 Федерального закона от 21.07.1997 N 116-ФЗ «О промышленной безопасности опасных производственных объектов» объекты, на которых применяются указанные сплавы и расплавы, могут быть отнесены к опасным производственным объектам, о чем должно быть указано в проектной документации объекта.
Врио начальника управления государственного строительного надзора В.В.ЧЕРНЫШЕВ
Объекты электросетевого хозяйства к опасным производственным объектам не относятся
Вывод:
Опасными производственными объектами являются предприятия или их цехи, участки, площадки, а также иные производственные объекты.
Объекты же электросетевого хозяйства к опасным производственным объектам не относятся.
Правовая позиция изложена в письме Ростехнадзора от 28.12.2016 г. № 10-00-09/3088 по вопросу разъяснения действующего законодательства в отношении объектов электросетевого хозяйства
ТЕХНОЛОГИЧЕСКОМУ И АТОМНОМУ НАДЗОРУ
(РОСТЕХНАДЗОР)
Письмо от 28.12.2016 № 10-00-09/3088
О рассмотрении обращения
Управление государственного энергетического надзора рассмотрело обращение Некоммерческого партнерства «Межрегионпроект» от 28.11.2016 № 03-02/1-25 направленное письмом Национального объединения изыскателей и проектировщиков от 05.12.2016 № 1-ОВГ/02-1203/16-0-0 и сообщает.
Опасными производственными объектами, в соответствии с пунктом 1 статьи 2 Федерального закона от 21.07.1997 116-ФЗ «О промышленной безопасности опасных производственных объектов» (далее — ФЗ № 116), являются предприятия или их цехи, участки, площадки, а также иные производственные объекты, указанные в приложении 1 ФЗ № 116.
В соответствии с приложением 1 ФЗ № 116 объекты электросетевого хозяйства к опасным производственным объектам не относятся.
ФЗ № 116 определяет правовые, экономические и социальные основы обеспечения безопасной эксплуатации опасных производственных объектов и направлен на предупреждение аварий на опасных производственных объектах и обеспечение готовности эксплуатирующих опасные производственные объекты юридических лиц и индивидуальных предпринимателей к локализации и ликвидации последствий указанных аварий.
В статье 48.1 Градостроительного кодекса Российской Федерации от 29.12.2004 № 190-ФЗ (далее — ГрК РФ) определен перечень особо опасных, технически сложных и уникальных объектов капитального строительства. Указанные в статье 48.1 ГрК РФ объекты капитального строительства могут являться производственными объектами.
На основании вышеизложенного, указанные нормативные правовые акты Российской Федерации не содержат коллизий.
И.о. заместителя начальника Управлениягосударственного энергетического надзора
Б.М. Степанов
Управление государственной экспертизы проектной документации
Вопросы-ответы
В новой редакции N 116-ФЗ «О промышленной безопасности опасных производственных объектов», действующей с 15 марта 2013 года, отсутствует понятие «особо опасный производственный объект», имеющее место в статье 48.1 Градостроительного кодекса РФ. Надо ли понимать, что объекты нефтедобычи Республики Татарстан, являющиеся по N 116-ФЗ опасными производственными объектами III класса опасности (средней опасности, содержание сероводорода в нефти от 1 до 6%) и IV класса опасности (низкой опасности, содержание сероводорода в нефти до 1%), автоматически становятся особо опасными производственными объектами, согласно ст.48.1 ГК, как объекты, на которых ведутся горные работы?
Ответ:
Если на указанных в вопросе объектах нефтедобычи ведутся горные работы (за исключением добычи общераспространенных полезных ископаемых и разработки россыпных месторождений полезных ископаемых, осуществляемых открытым способом без применения взрывных работ), работы по обогащению полезных ископаемых, то указанные объекты в соответствии с абз.11 п.1 ст.48_1 ГрК РФ относятся к особо опасным и технически сложным объектам.
Обоснование:
Понятие «опасный производственный объект» используется в области промышленной безопасности; понятие «особо опасный и технически сложный объект» используется в градостроительном законодательстве.
В соответствии со статьей 2 Федерального закона от 21 июля 1997 года N 116-ФЗ «О промышленной безопасности опасных производственных объектов» опасными производственными объектами являются предприятия или их цехи, участки, площадки, а также иные производственные объекты, указанные в приложении 1 к указанному Федеральному закону.
Перечень объектов, которые относятся к категории особо опасных и технически сложных, приведен в п.1 ст.48_1 ГрК РФ. В частности, в соответствии с абз.11 п.1 ст.48_1 ГрК РФ к особо опасным и технически сложным объектам относятся опасные производственные объекты, подлежащие регистрации в государственном реестре:
а) опасные производственные объекты I и II классов опасности, на которых получаются, используются, перерабатываются, образуются, хранятся, транспортируются, уничтожаются опасные вещества;
б) опасные производственные объекты, на которых получаются, транспортируются, используются расплавы черных и цветных металлов, сплавы на основе этих расплавов с применением оборудования, рассчитанного на максимальное количество расплава 500 килограммов и более;
в) опасные производственные объекты, на которых ведутся горные работы (за исключением добычи общераспространенных полезных ископаемых и разработки россыпных месторождений полезных ископаемых, осуществляемых открытым способом без применения взрывных работ), работы по обогащению полезных ископаемых.
Таким образом, если на указанных в вопросе объектах нефтедобычи ведутся горные работы (за исключением добычи общераспространенных полезных ископаемых и разработки россыпных месторождений полезных ископаемых, осуществляемых открытым способом без применения взрывных работ), работы по обогащению полезных ископаемых, то указанные объекты в соответствии с абз.11 п.1 ст.48_1 ГрК РФ относятся к особо опасным и технически сложным объектам.
Закон О промышленной безопасности опасных производственных объектов — Территориальное законодательство
РОССИЙСКАЯ ФЕДЕРАЦИЯ
ФЕДЕРАЛЬНЫЙ ЗАКОН
О ПРОМЫШЛЕННОЙ БЕЗОПАСНОСТИ ОПАСНЫХ
ПРОИЗВОДСТВЕННЫХ ОБЪЕКТОВ
Принят Государственной Думой
20 июня 1997 года
Настоящий Федеральный закон определяет правовые, экономические и социальные основы обеспечения безопасной эксплуатации опасных производственных объектов и направлен на предупреждение аварий на опасных производственных объектах и обеспечение готовности организаций, эксплуатирующих опасные производственные объекты, к локализации и ликвидации последствий указанных аварий.
Положения настоящего Федерального закона распространяются на все организации независимо от их организационно — правовых форм и форм собственности, осуществляющие деятельность в области промышленной безопасности опасных производственных объектов на территории Российской Федерации.
Глава I. ОБЩИЕ ПОЛОЖЕНИЯ
Статья 1. Основные понятия
В целях настоящего Федерального закона используются следующие понятия:
промышленная безопасность опасных производственных объектов (далее — промышленная безопасность) — состояние защищенности жизненно важных интересов личности и общества от аварий на опасных производственных объектах и последствий указанных аварий;
авария — разрушение сооружений и (или) технических устройств, применяемых на опасном производственном объекте, неконтролируемые взрыв и (или) выброс опасных веществ;
инцидент — отказ или повреждение технических устройств, применяемых на опасном производственном объекте, отклонение от режима технологического процесса, нарушение положений настоящего Федерального закона, других федеральных законов и иных нормативных правовых актов Российской Федерации, а также нормативных технических документов, устанавливающих правила ведения работ на опасном производственном объекте.
Статья 2. Опасные производственные объекты
1. Опасными производственными объектами в соответствии с настоящим Федеральным законом являются предприятия или их цехи, участки, площадки, а также иные производственные объекты, указанные в Приложении 1 к настоящему Федеральному закону.
2. Опасные производственные объекты подлежат регистрации в государственном реестре в порядке, устанавливаемом Правительством Российской Федерации.
Статья 3. Требования промышленной безопасности
1. Требования промышленной безопасности — условия, запреты, ограничения и другие обязательные требования, содержащиеся в настоящем Федеральном законе, других федеральных законах и иных нормативных правовых актах Российской Федерации, а также в нормативных технических документах, которые принимаются в установленном порядке и соблюдение которых обеспечивает промышленную безопасность.
2. Требования промышленной безопасности должны соответствовать нормам в области защиты населения и территорий от чрезвычайных ситуаций, санитарно — эпидемиологического благополучия населения, охраны окружающей природной среды, экологической безопасности, пожарной безопасности, охраны труда, строительства, а также требованиям государственных стандартов.
Статья 4. Правовое регулирование в области промышленной безопасности
1. Правовое регулирование в области промышленной безопасности осуществляется настоящим Федеральным законом, другими федеральными законами и иными нормативными правовыми актами Российской Федерации в области промышленной безопасности.
2. Если международным договором Российской Федерации установлены иные правила, чем предусмотренные настоящим Федеральным законом, то применяются правила международного договора.
Статья 5. Федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности
1. В целях осуществления государственной политики в области промышленной безопасности Президент Российской Федерации или по его поручению Правительство Российской Федерации определяет федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, и возлагает на него осуществление соответствующего нормативного регулирования, а также специальных разрешительных, контрольных и надзорных функций в области промышленной безопасности. Федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, имеет подведомственные ему территориальные органы, создаваемые в установленном порядке.
2. Федеральные органы исполнительной власти, которым в соответствии с федеральными законами или нормативными правовыми актами Президента Российской Федерации и Правительства Российской Федерации предоставлено право осуществлять отдельные функции нормативно — правового регулирования, специальные разрешительные, контрольные или надзорные функции в области промышленной безопасности, обязаны согласовывать принимаемые ими нормативные правовые акты и нормативные технические документы, а также координировать свою деятельность в области промышленной безопасности с федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности.
Глава II. ОСНОВЫ ПРОМЫШЛЕННОЙ БЕЗОПАСНОСТИ
Статья 6. Лицензирование видов деятельности в области промышленной безопасности
1. Деятельность по проектированию, строительству, эксплуатации, расширению, реконструкции, техническому перевооружению, консервации и ликвидации опасного производственного объекта; изготовлению, монтажу, наладке, обслуживанию и ремонту технических устройств, применяемых на опасном производственном объекте; проведению экспертизы промышленной безопасности; подготовке и переподготовке работников опасного производственного объекта в необразовательных учреждениях может осуществляться на основании соответствующей лицензии, выданной федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности, или его территориальным органом в соответствии с законодательством Российской Федерации.
2. При рассмотрении вопроса о выдаче лицензии на эксплуатацию опасного производственного объекта заявитель представляет в федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, или в его территориальные органы одновременно с документами, определяемыми законами и иными нормативными правовыми актами Российской Федерации, следующие документы:
акт приемки опасного производственного объекта в эксплуатацию или положительное заключение экспертизы промышленной безопасности;
декларацию промышленной безопасности опасного производственного объекта.
3. В лицензиях на эксплуатацию опасного производственного объекта делается запись об обязательном наличии у заявителя на момент начала эксплуатации и на протяжении всего периода эксплуатации опасного производственного объекта договора страхования риска ответственности за причинение вреда при эксплуатации опасного производственного объекта в соответствии со статьей 15 настоящего Федерального закона.
Статья 7. Технические устройства, применяемые на опасном производственном объекте
1. Технические устройства, в том числе иностранного производства, применяемые на опасном производственном объекте, подлежат сертификации на соответствие требованиям промышленной безопасности в установленном законодательством Российской Федерации порядке. Перечень технических устройств, применяемых на опасных производственных объектах и подлежащих сертификации, разрабатывается и утверждается в порядке, определяемом Правительством Российской Федерации.
2. Сертификацию технических устройств, применяемых на опасных производственных объектах, проводят организации, аккредитованные федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности.
3. Правила проведения сертификации устанавливаются федеральным органом исполнительной власти по стандартизации, метрологии и сертификации совместно с федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности.
4. Общий порядок и условия применения технических устройств на опасном производственном объекте устанавливаются Правительством Российской Федерации.
5. Технические устройства, применяемые на опасном производственном объекте, в процессе эксплуатации подлежат экспертизе промышленной безопасности в установленном порядке.
Статья 8. Требования промышленной безопасности к проектированию, строительству и приемке в эксплуатацию опасного производственного объекта
1. Одним из обязательных условий принятия решения о начале строительства, расширения, реконструкции, технического перевооружения, консервации и ликвидации опасного производственного объекта является наличие положительного заключения экспертизы промышленной безопасности проектной документации, утвержденного федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности, или его территориальным органом.
2. Отклонения от проектной документации в процессе строительства, расширения, реконструкции, технического перевооружения, консервации и ликвидации опасного производственного объекта не допускаются. Изменения, вносимые в проектную документацию на строительство, расширение, реконструкцию, техническое перевооружение, консервацию и ликвидацию опасного производственного объекта, подлежат экспертизе промышленной безопасности и согласовываются с федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности, или его территориальным органом.
3. В процессе строительства, расширения, реконструкции, технического перевооружения, консервации и ликвидации опасного производственного объекта организации, разработавшие проектную документацию, в установленном порядке осуществляют авторский надзор.
4. Приемка в эксплуатацию опасного производственного объекта проводится в установленном порядке.
В процессе приемки в эксплуатацию опасного производственного объекта проверяются соответствие опасного производственного объекта проектной документации, готовность организации к эксплуатации опасного производственного объекта и к действиям по локализации и ликвидации последствий аварии.
Статья 9. Требования промышленной безопасности к эксплуатации опасного производственного объекта
1. Организация, эксплуатирующая опасный производственный объект, обязана:
соблюдать положения настоящего Федерального закона, других федеральных законов и иных нормативных правовых актов Российской Федерации, а также нормативных технических документов в области промышленной безопасности;
иметь лицензию на эксплуатацию опасного производственного объекта;
обеспечивать укомплектованность штата работников опасного производственного объекта в соответствии с установленными требованиями;
допускать к работе на опасном производственном объекте лиц, удовлетворяющих соответствующим квалификационным требованиям и не имеющих медицинских противопоказаний к указанной работе;
обеспечивать проведение подготовки и аттестации работников в области промышленной безопасности;
иметь на опасном производственном объекте нормативные правовые акты и нормативные технические документы, устанавливающие правила ведения работ на опасном производственном объекте;
организовывать и осуществлять производственный контроль за соблюдением требований промышленной безопасности;
обеспечивать наличие и функционирование необходимых приборов и систем контроля за производственными процессами в соответствии с установленными требованиями;
обеспечивать проведение экспертизы промышленной безопасности зданий, а также проводить диагностику, испытания, освидетельствование сооружений и технических устройств, применяемых на опасном производственном объекте, в установленные сроки и по предъявляемому в установленном порядке предписанию федерального органа исполнительной власти, специально уполномоченного в области промышленной безопасности, или его территориального органа;
предотвращать проникновение на опасный производственный объект посторонних лиц;
обеспечивать выполнение требований промышленной безопасности к хранению опасных веществ;
разрабатывать декларацию промышленной безопасности;
заключать договор страхования риска ответственности за причинение вреда при эксплуатации опасного производственного объекта;
выполнять распоряжения и предписания федерального органа исполнительной власти, специально уполномоченного в области промышленной безопасности, его территориальных органов и должностных лиц, отдаваемые ими в соответствии с полномочиями;
приостанавливать эксплуатацию опасного производственного объекта самостоятельно или по предписанию федерального органа исполнительной власти, специально уполномоченного в области промышленной безопасности, его территориальных органов и должностных лиц в случае аварии или инцидента на опасном производственном объекте, а также в случае обнаружения вновь открывшихся обстоятельств, влияющих на промышленную безопасность;
осуществлять мероприятия по локализации и ликвидации последствий аварий на опасном производственном объекте, оказывать содействие государственным органам в расследовании причин аварии;
принимать участие в техническом расследовании причин аварии на опасном производственном объекте, принимать меры по устранению указанных причин и профилактике подобных аварий;
анализировать причины возникновения инцидента на опасном производственном объекте, принимать меры по устранению указанных причин и профилактике подобных инцидентов;
своевременно информировать в установленном порядке федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, его территориальные органы, а также иные органы государственной власти, органы местного самоуправления и население об аварии на опасном производственном объекте;
принимать меры по защите жизни и здоровья работников в случае аварии на опасном производственном объекте;
вести учет аварий и инцидентов на опасном производственном объекте;
представлять в федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, или в его территориальный орган информацию о количестве аварий и инцидентов, причинах их возникновения и принятых мерах.
2. Работники опасного производственного объекта обязаны:
соблюдать требования нормативных правовых актов и нормативных технических документов, устанавливающих правила ведения работ на опасном производственном объекте и порядок действий в случае аварии или инцидента на опасном производственном объекте;
проходить подготовку и аттестацию в области промышленной безопасности;
незамедлительно ставить в известность своего непосредственного руководителя или в установленном порядке других должностных лиц об аварии или инциденте на опасном производственном объекте;
в установленном порядке приостанавливать работу в случае аварии или инцидента на опасном производственном объекте;
в установленном порядке участвовать в проведении работ по локализации аварии на опасном производственном объекте.
Статья 10. Требования промышленной безопасности по готовности к действиям по локализации и ликвидации последствий аварии на опасном производственном объекте
В целях обеспечения готовности к действиям по локализации и ликвидации последствий аварии организация, эксплуатирующая опасный производственный объект, обязана:
планировать и осуществлять мероприятия по локализации и ликвидации последствий аварий на опасном производственном объекте;
заключать с профессиональными аварийно — спасательными службами или с профессиональными аварийно — спасательными формированиями договоры на обслуживание, а в случаях, предусмотренных законодательством Российской Федерации, создавать собственные профессиональные аварийно — спасательные службы или профессиональные аварийно — спасательные формирования, а также нештатные аварийно — спасательные формирования из числа работников;
иметь резервы финансовых средств и материальных ресурсов для локализации и ликвидации последствий аварий в соответствии с законодательством Российской Федерации;
обучать работников действиям в случае аварии или инцидента на опасном производственном объекте;
создавать системы наблюдения, оповещения, связи и поддержки действий в случае аварии и поддерживать указанные системы в пригодном к использованию состоянии.
Статья 11. Производственный контроль за соблюдением требований промышленной безопасности
1. Организация, эксплуатирующая опасный производственный объект, обязана организовывать и осуществлять производственный контроль за соблюдением требований промышленной безопасности в соответствии с требованиями, устанавливаемыми Правительством Российской Федерации.
2. Сведения об организации производственного контроля за соблюдением требований промышленной безопасности и о работниках, уполномоченных на его осуществление, представляются в федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, или в его территориальный орган.
Статья 12. Техническое расследование причин аварии
1. По каждому факту возникновения аварии на опасном производственном объекте проводится техническое расследование ее причин.
2. Техническое расследование причин аварии проводится специальной комиссией, возглавляемой представителем федерального органа исполнительной власти, специально уполномоченного в области промышленной безопасности, или его территориального органа.
В состав указанной комиссии также включаются:
представители субъекта Российской Федерации и (или) органа местного самоуправления, на территории которых располагается опасный производственный объект;
представители организации, эксплуатирующей опасный производственный объект;
другие представители в соответствии с законодательством Российской Федерации.
3. Президент Российской Федерации или Правительство Российской Федерации могут принимать решение о создании государственной комиссии по техническому расследованию причин аварии и назначать председателя указанной комиссии.
4. Комиссия по техническому расследованию причин аварии может привлекать к расследованию экспертные организации и специалистов в области промышленной безопасности, изысканий, проектирования, научно — исследовательских и опытно — конструкторских работ, страхования, изготовления оборудования и в других областях.
5. Организация, эксплуатирующая опасный производственный объект, и ее работники обязаны представлять комиссии по техническому расследованию причин аварии всю информацию, необходимую указанной комиссии для осуществления своих полномочий.
6. Результаты проведения технического расследования причин аварии заносятся в акт, в котором указываются причины и обстоятельства аварии, размер причиненного вреда, допущенные нарушения требований промышленной безопасности, работники, допустившие эти нарушения, а также меры, которые приняты для локализации и ликвидации последствий аварии, и содержатся предложения по предупреждению подобных аварий.
7. Материалы технического расследования причин аварии направляются в федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, или в его территориальный орган, а также в иные заинтересованные государственные органы.
8. Порядок проведения технического расследования причин аварии и оформления акта технического расследования причин аварии устанавливается федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности.
9. Финансирование расходов на техническое расследование причин аварии осуществляется организацией, эксплуатирующей опасный производственный объект, на котором произошла авария.
Статья 13. Экспертиза промышленной безопасности
1. Экспертизе промышленной безопасности подлежат:
проектная документация на строительство, расширение, реконструкцию, техническое перевооружение, консервацию и ликвидацию опасного производственного объекта;
технические устройства, применяемые на опасном производственном объекте;
здания и сооружения на опасном производственном объекте;
декларация промышленной безопасности и иные документы, связанные с эксплуатацией опасного производственного объекта.
2. Экспертизу промышленной безопасности проводят организации, имеющие лицензию на проведение указанной экспертизы, за счет средств организации, предполагающей эксплуатацию опасного производственного объекта или эксплуатирующей его.
3. Результатом осуществления экспертизы промышленной безопасности является заключение.
4. Заключение экспертизы промышленной безопасности, представленное в федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, или в его территориальный орган, рассматривается и утверждается ими в установленном порядке.
5. Порядок осуществления экспертизы промышленной безопасности и требования к оформлению заключения экспертизы промышленной безопасности устанавливаются федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности.
6. Экспертиза промышленной безопасности может осуществляться одновременно с осуществлением других экспертиз в установленном порядке.
Статья 14. Разработка декларации промышленной безопасности
1. Разработка декларации промышленной безопасности предполагает всестороннюю оценку риска аварии и связанной с нею угрозы; анализ достаточности принятых мер по предупреждению аварий, по обеспечению готовности организации к эксплуатации опасного производственного объекта в соответствии с требованиями промышленной безопасности, а также к локализации и ликвидации последствий аварии на опасном производственном объекте; разработку мероприятий, направленных на снижение масштаба последствий аварии и размера ущерба, нанесенного в случае аварии на опасном производственном объекте.
Перечень сведений, содержащихся в декларации промышленной безопасности, и порядок ее оформления определяются федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности.
2. Настоящим Федеральным законом устанавливается обязательность разработки деклараций промышленной безопасности опасных производственных объектов, на которых получаются, используются, перерабатываются, образуются, хранятся, транспортируются, уничтожаются вещества в количествах, указанных в Приложении 2 к настоящему Федеральному закону.
Обязательность разработки деклараций промышленной безопасности опасных производственных объектов, не указанных в абзаце первом настоящего пункта, может быть установлена Правительством Российской Федерации, а также в соответствии со своими полномочиями федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности.
3. Декларация промышленной безопасности разрабатывается в составе проектной документации на строительство, расширение, реконструкцию, техническое перевооружение, консервацию и ликвидацию опасного производственного объекта.
Декларация промышленной безопасности уточняется или разрабатывается вновь в случае обращения за лицензией на эксплуатацию опасного производственного объекта, изменения сведений, содержащихся в декларации промышленной безопасности, или в случае изменения требований промышленной безопасности.
Для опасных производственных объектов, действующих на день вступления настоящего Федерального закона в силу, декларации промышленной безопасности разрабатываются в сроки, устанавливаемые Правительством Российской Федерации.
4. Декларация промышленной безопасности утверждается руководителем организации, эксплуатирующей опасный производственный объект.
Руководитель организации, эксплуатирующей опасный производственный объект, несет ответственность за полноту и достоверность сведений, содержащихся в декларации промышленной безопасности, в соответствии с законодательством Российской Федерации.
5. Декларация промышленной безопасности проходит экспертизу промышленной безопасности в установленном порядке.
6. Декларацию промышленной безопасности представляют органам государственной власти, органам местного самоуправления, общественным объединениям и гражданам в порядке, который установлен Правительством Российской Федерации.
Статья 15. Обязательное страхование ответственности за причинение вреда при эксплуатации опасного производственного объекта
1. Организация, эксплуатирующая опасный производственный объект, обязана страховать ответственность за причинение вреда жизни, здоровью или имуществу других лиц и окружающей природной среде в случае аварии на опасном производственном объекте.
2. Минимальный размер страховой суммы страхования ответственности за причинение вреда жизни, здоровью или имуществу других лиц и окружающей природной среде в случае аварии на опасном производственном объекте составляет для:
а) опасного производственного объекта, указанного в пункте 1 Приложения 1 к настоящему Федеральному закону, в случае, если на нем:
получаются, используются, перерабатываются, образовываются, хранятся, транспортируются, уничтожаются опасные вещества в количествах, равных количествам, указанным в Приложении 2 к настоящему Федеральному закону, или превышающих их, — семьдесят тысяч минимальных размеров оплаты труда, установленных законодательством Российской Федерации на день заключения договора страхования риска ответственности;
получаются, используются, перерабатываются, образовываются, хранятся, транспортируются, уничтожаются опасные вещества в количествах, меньших, чем количества, указанные в Приложении 2 к настоящему Федеральному закону, — десять тысяч минимальных размеров оплаты труда, установленных законодательством Российской Федерации на день заключения договора страхования риска ответственности;
б) иного опасного производственного объекта — одну тысячу минимальных размеров оплаты труда, установленных законодательством Российской Федерации на день заключения договора страхования риска ответственности.
Статья 16. Федеральный надзор в области промышленной безопасности
1. Федеральный надзор в области промышленной безопасности организуется и осуществляется в соответствии с законодательством Российской Федерации в целях проверки выполнения организациями, эксплуатирующими опасные производственные объекты, требований промышленной безопасности.
2. Федеральный надзор в области промышленной безопасности осуществляется на принципах самостоятельности и независимости от поднадзорных организаций.
3. Федеральный надзор в области промышленной безопасности осуществляют федеральный орган исполнительной власти, специально уполномоченный в области промышленной безопасности, его территориальные органы и другие федеральные органы исполнительной власти в соответствии с законодательством Российской Федерации.
4. Должностные лица федерального органа исполнительной власти, специально уполномоченного в области промышленной безопасности, при исполнении своих должностных обязанностей имеют право:
посещать организации, эксплуатирующие опасные производственные объекты;
знакомиться с документами, необходимыми для проверки выполнения организациями, эксплуатирующими опасные производственные объекты, требований промышленной безопасности;
осуществлять проверку выполнения организациями, эксплуатирующими опасные производственные объекты, условий лицензий на эксплуатацию;
осуществлять проверку правильности проведения технических расследований инцидентов на опасных производственных объектах, а также проверку достаточности мер, принимаемых по результатам таких расследований;
выдавать организациям, эксплуатирующим опасные производственные объекты, предписания об устранении выявленных нарушений требований промышленной безопасности;
давать в пределах своих полномочий указания в области промышленной безопасности, в том числе о необходимости осуществления экспертизы промышленной безопасности зданий и сооружений на опасном производственном объекте и технических устройств, применяемых на опасном производственном объекте;
выдавать организациям, эксплуатирующим опасные производственные объекты, предписания о приостановке работ, ведущихся с нарушением требований промышленной безопасности, при необходимости опечатывать опасные производственные объекты, помещения на указанных объектах или технические устройства, применяемые на опасных производственных объектах, а в случае угрозы жизни и здоровью работников давать указания о выводе людей с рабочих мест;
ставить перед федеральным органом исполнительной власти, специально уполномоченным в области промышленной безопасности, или его территориальным органом вопрос об ограничении или о приостановлении действия лицензии на осуществление определенного вида деятельности в области промышленной безопасности, а также о досрочном отзыве указанных лицензий в случае нарушений требований промышленной безопасности и в других предусмотренных законодательством Российской Федерации случаях;
привлекать к административной ответственности в порядке, установленном законодательством Российской Федерации, лиц, виновных в нарушениях требований промышленной безопасности, а также направлять в правоохранительные органы материалы о привлечении указанных лиц к уголовной ответственности;
выступать в установленном порядке в суде или в арбитражном суде представителем федерального органа исполнительной власти, специально уполномоченного в области промышленной безопасности, или его территориального органа по искам о возмещении вреда, причиненного жизни, здоровью и имуществу других лиц вследствие нарушений требований промышленной безопасности;
осуществлять иные предусмотренные законодательством Российской Федерации действия, направленные на обеспечение промышленной безопасности.
Статья 17. Ответственность за нарушение законодательства в области промышленной безопасности
Лица, виновные в нарушении настоящего Федерального закона, несут ответственность в соответствии с законодательством Российской Федерации.
Глава III. ЗАКЛЮЧИТЕЛЬНЫЕ ПОЛОЖЕНИЯ
Статья 18. Вступление в силу настоящего Федерального закона
1. Настоящий Федеральный закон вступает в силу со дня его официального опубликования.
2. Предложить Президенту Российской Федерации и поручить Правительству Российской Федерации привести свои нормативные правовые акты в соответствие с настоящим Федеральным законом.
Президент
Российской Федерации
Б.ЕЛЬЦИН
Москва, Кремль.
21 июля 1997 года.
N 116-ФЗ
Приложение 1
ОПАСНЫЕ ПРОИЗВОДСТВЕННЫЕ ОБЪЕКТЫ
К категории опасных производственных объектов относятся объекты, на которых:
1) получаются, используются, перерабатываются, образуются, хранятся, транспортируются, уничтожаются следующие опасные вещества:
а) воспламеняющиеся вещества — газы, которые при нормальном давлении и в смеси с воздухом становятся воспламеняющимися и температура кипения которых при нормальном давлении составляет 20 градусов Цельсия или ниже;
б) окисляющие вещества — вещества, поддерживающие горение, вызывающие воспламенение и (или) способствующие воспламенению других веществ в результате окислительно — восстановительной экзотермической реакции;
в) горючие вещества — жидкости, газы, пыли, способные самовозгораться, а также возгораться от источника зажигания и самостоятельно гореть после его удаления;
г) взрывчатые вещества — вещества, которые при определенных видах внешнего воздействия способны на очень быстрое самораспространяющееся химическое превращение с выделением тепла и образованием газов;
д) токсичные вещества — вещества, способные при воздействии на живые организмы приводить к их гибели и имеющие следующие характеристики:
средняя смертельная доза при введении в желудок от 15 миллиграммов на килограмм до 200 миллиграммов на килограмм включительно;
средняя смертельная доза при нанесении на кожу от 50 миллиграммов на килограмм до 400 миллиграммов на килограмм включительно;
средняя смертельная концентрация в воздухе от 0,5 миллиграмма на литр до 2 миллиграммов на литр включительно;
е) высокотоксичные вещества — вещества, способные при воздействии на живые организмы приводить к их гибели и имеющие следующие характеристики:
средняя смертельная доза при введении в желудок не более 15 миллиграммов на килограмм;
средняя смертельная доза при нанесении на кожу не более 50 миллиграммов на килограмм;
средняя смертельная концентрация в воздухе не более 0,5 миллиграмма на литр;
ж) вещества, представляющие опасность для окружающей природной среды, — вещества, характеризующиеся в водной среде следующими показателями острой токсичности:
средняя смертельная доза при ингаляционном воздействии на рыбу в течение 96 часов не более 10 миллиграммов на литр;
средняя концентрация яда, вызывающая определенный эффект при воздействии на дафнии в течение 48 часов, не более 10 миллиграммов на литр;
средняя ингибирующая концентрация при воздействии на водоросли в течение 72 часов не более 10 миллиграммов на литр;
2) используется оборудование, работающее под давлением более 0,07 мегапаскаля или при температуре нагрева воды более 115 градусов Цельсия;
3) используются стационарно установленные грузоподъемные механизмы, эскалаторы, канатные дороги, фуникулеры;
4) получаются расплавы черных и цветных металлов и сплавы на основе этих расплавов;
5) ведутся горные работы, работы по обогащению полезных ископаемых, а также работы в подземных условиях.
Новости — Цитаты — RISKNEWS
Вопрос от 28.05.2017: Приложением 1 к Требованиям к регистрации объектов в государственном реестре опасных производственных объектов и ведению государственного реестра опасных производственных объектов (утв. Приказом Ростехнадзора от 25 ноября 2016 года N 495) не предусмотрена идентификация опасных производственных объектов спецхимии. Прошу разъяснить, какие объекты следует относить к объектам спецхимии (после прекращения действия приказа Ростехнадзора от 7 апреля 2011 г. N 168).
Ответ Ростехнадзора:
Управление общепромышленного надзора в связи с обращением от 28.05.2017 (Вх. № 0-10039 от 29.05.2017) информирует о следующем.
В соответствии с приложением 1 к Федеральному закону от 21.07.1997 № 116-ФЗ «О промышленной безопасности опасных производственных объектов», к категории опасных производственных объектов относятся, в том числе, объекты, на которых получаются, используются, перерабатываются, образуются, хранятся, транспортируются, уничтожаются в указанных в приложении 2 к данному Федеральному закону количествах взрывчатые вещества — вещества, которые при определенных видах внешнего воздействия способны на очень быстрое самораспространяющееся химическое превращение с выделением тепла и образованием газов.
Вместе с тем, указом Президента Российской Федерации от 17.12.2011 № 1661 «Об утверждении Список товаров и технологий двойного назначения, которые могут быть использованы при создании вооружении и военной техники и в отношении которых осуществляется экспортный контроль» определено, что к взрывчатым веществам относятся химические вещества или смеси таких веществ, способных при определенных условиях под влиянием внешних воздействий к быстрому самораспространяющемуся химическому превращению (взрыву) с выделением большого количества тепла и газообразных продуктов, в том числе, к примеру, инициирующие и бризантные взрывчатые вещества, пороха, ракетные топлива, а также взрывчатые и пиротехнические составы.
Объекты, на которых обращаются указанные вещества или смеси таких веществ, характеризуются признаками взрывопожароопасности или химической опасности, или сочетанием таких признаков.
Соответственно, к опасным производственным объектам спецхимии могут быть отнесены предприятия, цеха, участки, площадки (полигоны), категорируемые как опасные производственные объекты, эксплуатируемые для специальных задач и целей, на которых осуществляются технологические процессы, связанные с получением, переработкой и уничтожением (утилизацией) взрывчатых веществ, исключая объекты, на которых производятся промышленные взрывчатые вещества, в том числе создаваемые из невзрывчатых материалов и компонентов, ведутся взрывные работы в мирных целях в различных сферах деятельности, эксплуатируемые организациями, имеющими лицензии на осуществление деятельности, связанной с обращением взрывчатых материалов промышленного назначения.
При этом принимается во внимание, что составление и ведение перечня предприятий (организаций) спецхимии осуществляется Минпромторгом России, которое в установленном порядке, по отдельным запросам, может при надлежащих обоснованиях информировать в части, касающейся объектов конкретных предприятий (по сфере ведения и в рамках возможных ограничений).
Соответствующим же образом получается информация, используемая в служебных целях и органами Ростехнадзора, равно как и иными заинтересованными (и уполномоченными) юридическими и физическими лицами.
На основе указанной информации формируются подходы и определяются решения, обеспечивающие условия промышленной безопасности объектов и контроль их соответствия законодательным и нормативным актам, в части касающейся.
Классификация опасных производственных объектов. 4 класса опасности ОПО.
В соответствии с Федеральным законом «О промышленной безопасности опасных производственных объектов» все опасные производственные объекты, в зависимости от степени опасности для жизни и здоровья людей и окружающей среды, делятся на 4 класса опасности ОПО:
I класс опасности — объекты чрезвычайно высокой опасности;
II класс опасности — объекты высокой опасности;
III класс опасности — объекты средней опасности;
IV класс опасности — объекты низкой опасности.Все ОПО (вне зависимости от класса опасности) подлежат обязательной регистрации в Государственном реестре опасных производственных объектов. При эксплуатации ОПО I, II, III классов опасности необходимо получать лицензию на эксплуатацию взрывопожароопасных и химически опасных производственных объектов I, II, III классов опасности.
Классификация опасных производственных объектов
Параметры классификации ОПО приведены в 116-ФЗ (таблицы №1 и №2 Приложения №2).
Для объектов, на которых получаются, используются, перерабатываются, хранятся, транспортируются, уничтожаются воспламеняющиеся, горючие, взрывчатые, токсичные и высокотоксичные вещества, класс опасности определяется исходя из количества таких опасных веществ, которые единовременно находятся или могут находиться на опасном производственном объекте (таблицы №1 и №2 Приложения №2 №116-ФЗ от 21.07.1997 г.). Количество вещества, обращаемого на ОПО, берется из проектной документации, раздела «Технологические решения». Этот раздел проекта эксплуатирующая организация также обязана предоставить при регистрации ОПО в реестре опасных производственных объектов.
В случае, если ОПО находятся на расстоянии менее 500 метров друг от друга (даже если у них разные эксплуатирующие организации), количество веществ одного вида (типа) суммируется.
Для иных объектов класс опасности устанавливается в соответствии с признаками, указанными ниже:
Вид ОПО | Класс опасности | Признаки опасности ОПО |
Химически опасные объекты | I | — объекты хранения и уничтожения химического оружия, объекты спецхимии |
Объекты добычи нефти и газа, включая бурение | II | — выброс продукции с содержанием сернистого водорода свыше 6% объема такой продукции |
III | — выброс продукции с содержанием сернистого водорода 1-6% объема такой продукции | |
IV | — выброс продукции с содержанием сернистого водорода менее 1% | |
Газораспределительные сети и сети газопотребления | II |
— транспортировка природного газа под давлением свыше 1,2 МПа или сжиженного углеводородного газа под давлением свыше 1,6 МПа; |
III | — для опасных производственных объектов, предназначенных для транспортировки природного газа под давлением свыше 0,005 мегапаскаля до 1,2 мегапаскаля включительно или сжиженного углеводородного газа под давлением свыше 0,005 мегапаскаля до 1,6 мегапаскаля включительно (с 1 сентября 2016 года) | |
Объекты котлонадзора
ВАЖНО! В качестве ОПО регистрируются только те объекты, на которых применяется оборудование, подлежащее учету в Ростехнадзоре. |
III |
— для объектов, осуществляющих теплоснабжение населения и социально значимых категорий потребителей, определяемых в соответствии с законодательством Российской Федерации в сфере теплоснабжения, а также иных опасных производственных объектов, на которых применяется оборудование, работающее под избыточным давлением 1,6 МПа и более или при температуре рабочей среды 250 градусов Цельсия и более;
|
IV | -применение оборудования, работающего под давлением от 0,07 до 1,6 Мпа и температуре рабочей среды от 115 до 250 гр.С | |
Подъемные сооружения и механизмы | III |
для подвесных канатных дорог |
IV | иные стационарные подъемные сооружения | |
Металлургия | II |
используется оборудование, рассчитанное на максимальное количество расплава 10 тонн (10 000 кг) и более |
III | используется оборудование, рассчитанное на максимальное количество расплава от 0,5 тонн (500 кг) до 10 тонн (10 000 кг) | |
Объекты угольной и горнорудном промышленности | I |
для шахт угольной промышленности, а также иных объектов ведения подземных горных работ на участках недр, где могут произойти: |
II |
— для объектов ведения подземных горных работ,не указанных в подпункте 1 настоящего пункта; |
|
III |
— для объектов, на которых ведутся открытые горные работы, объем разработки горной массы которых составляет от 100 тыс. до 1 млн. ку.м в год; |
|
IV |
— для объектов, на которых ведутся открытые горные работы, объем разработки горной массы которых составляет менее чем 100 тыс. куб.м в год |
|
Объекты хранения и переработки растительного сырья | III |
— для элеваторов, |
IV | — иные объекты |
Примечания:
2) – если для объекта применимы несколько классов опасности, то такому объекту присваивается наивысший из возможных классов опасности.
ОПО I-IV классов опасности регистрируются в Едином реестре опасных производственных объектов. На эксплуатацию опасных производственных объектов 1, 2, 3 классов опасности необходимо получать лицензию.
Для ОПО I и II классов опасности в обязательном порядке разрабатывается декларация промышленной безопасности и система управления промышленной безопасностью.
Чтобы узнать стоимость и сроки оказания услуг по регистрации ОПО и лицензированию деятельности по их эксплуатации обратитесь к менеджерам «ТЕХНОКОНС» по телефону: +7 812 414-97-18 или 8 800 301-01-17.
JSON: API — последняя спецификация (v1.0)
Статус
На этой странице представлена последняя опубликованная версия JSON: API, которая на данный момент версия 1.0. Новые версии JSON: API будет всегда иметь обратную совместимость с использованием стратегии никогда не удалять, только добавлять . Дополнения могут быть предложены на нашем дискуссионном форуме.
Если вы заметили ошибку в тексте спецификации или написали реализации, сообщите нам об этом, открыв вопрос или запрос на перенос на нашем Репозиторий GitHub.
Введение
JSON: API — это спецификация того, как клиент должен запрашивать эти ресурсы. извлечены или изменены, и как сервер должен отвечать на эти запросы.
JSON: API разработан таким образом, чтобы минимизировать как количество запросов, так и количество данные, передаваемые между клиентами и серверами. Такая эффективность достигается без ущерба для удобочитаемости, гибкости или легкости обнаружения.
JSON: API требует использования типа носителя JSON: API
( заявка / vnd.api + json
)
для обмена данными.
Условные обозначения
Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ОБЯЗАТЕЛЬНО», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и «ДОПОЛНИТЕЛЬНО» в этом документе должны быть интерпретируется, как описано в RFC 2119 [RFC2119].
Согласование содержимого
Обязанности клиента
Клиенты ДОЛЖНЫ отправлять все данные JSON: API в документах запроса с заголовком. Content-Type: application / vnd.api + json
без каких-либо параметров типа носителя.
Клиенты, которые включают тип носителя JSON: API в свой заголовок Accept
ДОЛЖНЫ укажите там тип носителя хотя бы один раз без каких-либо параметров типа носителя.
Клиенты ДОЛЖНЫ игнорировать любые параметры для приложения / vnd.api + json
Тип носителя, полученный в заголовке Content-Type
ответных документов.
Обязанности сервера
Серверы ДОЛЖНЫ отправлять все данные JSON: API в ответных документах с заголовком. Content-Type: application / vnd.api + json
без параметров типа носителя.
Серверы ДОЛЖНЫ ответить кодом состояния 415 Unsupported Media Type
, если
в запросе указывается заголовок Content-Type: application / vnd.api + json
с любыми параметрами медиа-типа.
Серверы ДОЛЖНЫ ответить кодом состояния 406 Неприемлемый
, если
заголовок запроса Accept
содержит тип носителя JSON: API и все экземпляры
этого типа носителя изменяются с параметрами типа носителя.
Примечание. Существуют требования к согласованию содержимого, позволяющие использовать будущие версии. данной спецификации, чтобы использовать параметры типа носителя для согласования расширения и управление версиями.
Структура документа
В этом разделе описывается структура документа JSON: API, который идентифицируется
по типу носителя application / vnd.api + json
.
JSON: документы API определены в нотации объектов JavaScript (JSON).
[RFC7159].
Хотя для документов запроса и ответа используется один и тот же тип носителя, определенные аспекты применимы только к одному или другому.Эти различия крикнул ниже.
Если не указано иное, объекты, определенные в этой спецификации НЕ ДОЛЖНЫ содержать каких-либо дополнительных членов. Реализации клиента и сервера ДОЛЖЕН игнорировать элементы, не признанные этой спецификацией.
Примечание. Эти условия позволяют развивать данную спецификацию за счет присадок. изменения.
Верхний уровень
Объект JSON ДОЛЖЕН находиться в корне каждого запроса и ответа JSON: API. содержащие данные.Этот объект определяет «верхний уровень» документа.
Документ ДОЛЖЕН содержать по крайней мере один из следующих членов верхнего уровня:
-
данные
: «первичные данные» документа -
ошибок
: массив объектов ошибок -
meta
: мета-объект, содержащий нестандартные метаинформация.
Элементы данные
и ошибки
НЕ ДОЛЖНЫ сосуществовать в одном документе.
Документ МОЖЕТ содержать любой из этих членов верхнего уровня:
-
jsonapi
: объект, описывающий реализацию сервера -
ссылки
: объект ссылок, связанный с первичными данными. -
включает
: массив объектов ресурсов, связанных с первичным данные и / или друг друга («включенные ресурсы»).
Если документ не содержит ключ данных верхнего уровня
, включает элемент
НЕ ДОЛЖЕН присутствовать .
Объект ссылок верхнего уровня МОЖЕТ содержать следующие элементы:
-
self
: ссылка, по которой был создан текущий ответный документ. -
related
: ссылка на связанный ресурс, когда первичные данные представляют ресурсные отношения. - ссылок на страницы для первичных данных.
«Первичные данные» документа — это представление ресурса или коллекции. ресурсов, на которые направлен запрос.
Первичные данные ДОЛЖНЫ быть либо:
Например, следующие первичные данные являются одним объектом ресурса:
{
"данные": {
"тип": "статьи",
"id": "1",
"attributes": {
// ... атрибуты этой статьи
},
"отношения": {
// ... отношения в этой статье
}
}
}
Следующие первичные данные представляют собой единый объект идентификатора ресурса, который ссылается на тот же ресурс:
{
"данные": {
"тип": "статьи",
"id": "1"
}
}
Логический набор ресурсов ДОЛЖЕН быть представлен в виде массива, даже если он содержит только один элемент или пуст.
Объекты ресурсов
«Объекты ресурсов» появляются в документе JSON: API для представления ресурсов.
Объект ресурса ДОЛЖЕН содержать как минимум следующие элементы верхнего уровня:
Исключение: id
член не требуется, если объект ресурса исходит из
клиент и представляет новый ресурс, который будет создан на сервере.
Кроме того, объект ресурса МОЖЕТ содержать любой из этих элементов верхнего уровня:
-
атрибуты
: объект атрибутов, представляющий некоторые данные ресурса. -
отношения
: объект отношений, описывающий отношения между ресурс и другие ресурсы JSON: API. -
ссылки
: объект ссылок, содержащий ссылки, относящиеся к ресурсу. -
мета
: мета-объект, содержащий нестандартную метаинформацию о ресурс, который не может быть представлен как атрибут или отношение.
Вот как статья (т. Е. Ресурс типа «статьи») может отображаться в документе:
//...
{
"тип": "статьи",
"id": "1",
"attributes": {
"title": "Рельсы - это Омакасе"
},
"отношения": {
"author": {
"links": {
"я": "/ статьи / 1 / отношения / автор",
"связанные": "/ статьи / 1 / автор"
},
"data": {"type": "people", "id": "9"}
}
}
}
// ...
Идентификация
Каждый объект ресурса ДОЛЖЕН содержать элемент id
и элемент типа
.
Значения id
и типа
элементов ДОЛЖНЫ быть строками.
В рамках данного API каждая пара типа
и id
объекта ресурса ДОЛЖНА определить единый уникальный ресурс. (Набор URI, контролируемых сервером,
или несколько серверов, действующих как один, составляют API.)
Элемент типа
используется для описания объектов ресурсов, которые имеют общие
атрибуты и отношения.
Значения типа
элементов ДОЛЖНЫ соответствовать тем же ограничениям, что и
имена участников.
Примечание: эта спецификация не зависит от правил перегиба, поэтому значение
тип
может быть как во множественном, так и в единственном числе. Однако следует использовать то же значение. последовательно на протяжении всей реализации.
Поля
Атрибуты объекта ресурса и его отношения называются вместе его «поля».
Поля для объекта ресурса ДОЛЖНЫ совместно использовать общее пространство имен с каждым
другие и с тип
и id
.Другими словами, у ресурса не может быть
атрибут и связь с тем же именем, и не может иметь атрибут
или отношение с именем тип
или id
.
Атрибуты
Значение атрибутов
ключ ДОЛЖНО быть объектом («атрибуты
объект»). Члены объекта атрибутов («атрибуты») представляют информацию.
об объекте ресурса, в котором он определен.
Атрибуты могут содержать любое допустимое значение JSON.
Сложные структуры данных, включающие объекты и массивы JSON, разрешены как
значения атрибутов. Однако любой объект, который составляет или содержится в
атрибут НЕ ДОЛЖЕН содержать отношения
или ссылки
член, поскольку те
члены зарезервированы этой спецификацией для использования в будущем.
Хотя имеет один внешний ключ (например, author_id
), часто хранятся внутри
наряду с другой информацией, которая должна быть представлена в объекте ресурса, эти ключи НЕ ДОЛЖЕН отображаться как атрибуты .
Примечание. Дополнительные ограничения для этого контейнера см. В именах полей и элементов.
Отношения
Значение отношений
ключ ДОЛЖНО быть объектом («отношения
объект»). Члены объекта отношений («отношения») представляют
ссылки из объекта ресурса, в котором он определен, на другой ресурс
объекты.
Отношения могут быть «к одному» или «ко многим».
«Объект отношения» ДОЛЖЕН содержать по крайней мере одно из следующего:
-
ссылки
: объект ссылок, содержащий как минимум одно из следующего:-
self
: ссылка на саму связь («связь отношения»).Этот ссылка позволяет клиенту напрямую управлять отношениями. Например, удалениеавтора
через ссылкустатьи
приведет к отключению человек изстатьи
без удаления самого ресурсачеловек
. При успешном извлечении эта ссылка возвращает ссылку для связанных ресурсов в качестве его первичных данных. (См. Получение отношений.) -
related
: ссылка на связанный ресурс
-
-
данные
: ссылка на ресурсы -
мета
: мета-объект, содержащий нестандартную метаинформацию о отношение.
Объект отношения, представляющий отношение ко многим , МОЖЕТ также содержать
пагинация ссылок под элементом links
member, как описано ниже. Любой
ссылки на страницы в объекте отношения ДОЛЖНЫ разбивать на страницы отношения
данные, а не связанные ресурсы.
Примечание. Дополнительные ограничения для этого контейнера см. В именах полей и элементов.
Ссылки на связанные ресурсы
«Ссылка на связанный ресурс» обеспечивает доступ к связанным объектам ресурсов. в отношениях.При извлечении связанный объект (ы) ресурса возвращаются как первичные данные ответа.
Например, связь , статья
, комментарии ,
может
укажите ссылку, которая возвращает коллекцию объектов ресурсов комментариев
при получении через запрос GET
.
Если присутствует, ссылка на связанный ресурс ДОЛЖНА ссылаться на действительный URL, даже если В настоящее время отношения не связаны ни с какими целевыми ресурсами. Кроме того, ссылка на связанный ресурс НЕ ДОЛЖНА изменяться , потому что ее содержание изменения.
Связь с ресурсами
Связывание ресурсов в составном документе позволяет клиенту связать вместе все
включенных объектов ресурсов без необходимости получать GET
каких-либо URL-адресов через ссылки.
Связь с ресурсами ДОЛЖНА быть представлена как одно из следующих:
Примечание: спецификация не придает значения порядку идентификаторов ресурсов. объекты в массивах связей отношений ко многим, хотя реализации может это сделать. Массивы объектов идентификаторов ресурсов могут представлять упорядоченные или неупорядоченные отношения, и оба типа могут быть смешаны в одном ответе объект.
Например, следующая статья связана с автором
:
// ...
{
"тип": "статьи",
"id": "1",
"attributes": {
"title": "Рельсы - это Омакасе"
},
"отношения": {
"author": {
"links": {
"self": "http://example.com/articles/1/relationships/author",
"related": "http://example.com/articles/1/author"
},
"data": {"type": "people", "id": "9"}
}
},
"links": {
"self": "http: // example.ru / article / 1 "
}
}
// ...
Отношение автор
включает ссылку на само отношение (которое
позволяет клиенту напрямую изменить связанного автора), связанный ресурс
ссылка для получения объектов ресурсов и информации о связи.
Ссылки на ресурсы
Необязательные ссылки Член
в каждом объекте ресурса содержит ссылки
связанные с ресурсом.
Если присутствует, этот объект ссылок МОЖЕТ содержать ссылку на себя
, которая
определяет ресурс, представленный объектом ресурса.
// ...
{
"тип": "статьи",
"id": "1",
"attributes": {
"title": "Рельсы - это Омакасе"
},
"links": {
"себя": "http://example.com/articles/1"
}
}
// ...
Сервер ДОЛЖЕН ответить на запрос GET
на указанный URL с помощью
ответ, который включает ресурс в качестве первичных данных.
Объекты идентификатора ресурса
«Объект идентификатора ресурса» — это объект, который идентифицирует человека. ресурс.
«Объект идентификатора ресурса» ДОЛЖЕН содержать элементы типа
и id
.
«Объект идентификатора ресурса» МОЖЕТ также включать мета-член
, значение которого является метаобъектом, который
содержит нестандартную метаинформацию.
Сводные документы
Чтобы уменьшить количество HTTP-запросов, серверы МОГУТ разрешать ответы, которые Включите связанные ресурсы вместе с запрошенными первичными ресурсами.Такой ответы называются «составными документами».
В составном документе все включенные ресурсы ДОЛЖНЫ быть представлены как
Массив объектов ресурсов на верхнем уровне включал член
.
Составные документы требуют «полной связи», что означает, что каждый включенный ресурс ДОЛЖЕН быть идентифицирован по крайней мере одним объектом идентификатора ресурса в том же документе. Эти объекты идентификатора ресурса могут быть первичные данные или представляют связь ресурсов, содержащихся в первичных или включены ресурсы.
Единственное исключение из требования полной привязки — это когда поля отношений которые в противном случае содержали бы данные о связях, исключаются через разреженные наборы полей.
Примечание. Полная привязка гарантирует, что включенные ресурсы связаны с первичные данные (которые могут быть объектами ресурса или идентификатором ресурса объекты) или друг к другу.
Полный пример документа с несколькими включенными отношениями:
{
"данные": [{
"тип": "статьи",
"id": "1",
"attributes": {
"title": "JSON: API раскрашивает мой велосипедный навес!"
},
"links": {
"self": "http: // example.ru / article / 1 "
},
"отношения": {
"author": {
"links": {
"self": "http://example.com/articles/1/relationships/author",
"related": "http://example.com/articles/1/author"
},
"data": {"type": "people", "id": "9"}
},
"Комментарии": {
"links": {
"self": "http://example.com/articles/1/relationships/comments",
"related": "http://example.com/articles/1/comments"
},
"данные": [
{"тип": "комментарии", "идентификатор": "5"},
{"тип": "комментарии", "идентификатор": "12"}
]
}
}
}],
"включены": [{
"тип": "люди",
«id»: «9»,
"attributes": {
"имя": "Дан",
"фамилия": "Гебхардт",
"twitter": "dgeb"
},
"links": {
"self": "http: // example.com / people / 9 "
}
}, {
"тип": "комментарии",
«id»: «5»,
"attributes": {
"body": "Первый!"
},
"отношения": {
"author": {
"data": {"type": "people", "id": "2"}
}
},
"links": {
"себя": "http://example.com/comments/5"
}
}, {
"тип": "комментарии",
"id": "12",
"attributes": {
"body": "Мне больше нравится XML"
},
"отношения": {
"author": {
"data": {"type": "people", "id": "9"}
}
},
"links": {
"self": "http: // example.com / comments / 12 "
}
}]
}
Составной документ НЕ ДОЛЖЕН включать более одного объекта ресурса для
каждая типа
и id
пара.
Примечание. В одном документе можно рассматривать
типа
иid
как составной ключ, который однозначно ссылается на объекты ресурсов в другой части документ.
Примечание. Этот подход гарантирует, что единственный канонический объект ресурса возвращается с каждым ответом, даже если есть ссылка на тот же ресурс много раз.
Метаинформация
Если указано, мета-член
может использоваться для включения нестандартных
метаинформация. Значение каждого мета
члена ДОЛЖНО быть объектом (a
«Мета-объект»).
Любые элементы МОГУТ быть указаны в пределах мета
объектов.
Например:
{
"meta": {
«copyright»: «Copyright 2015 Example Corp.»,
"авторы": [
"Иегуда Кац",
"Стив Клабник",
"Дэн Гебхардт",
"Тайлер Келлен"
]
},
"данные": {
//...
}
}
Ссылки
Если указано, элемент ссылок
может использоваться для представления ссылок. Значение
из каждых ссылок
член ДОЛЖЕН быть объектом («объектом ссылок»).
Каждый член объекта ссылок является «ссылкой». Ссылка ДОЛЖНА быть представлена как либо:
- строка, содержащая URL ссылки.
- объект («объект ссылки»), который может
содержат следующие члены:
-
href
: строка, содержащая URL ссылки. -
мета
: мета-объект, содержащий нестандартную метаинформацию о ссылка на сайт.
-
Следующая ссылка self
представляет собой просто URL:
"ссылки": {
"себя": "http://example.com/posts"
}
Следующая ссылка , относящаяся к , включает URL-адрес, а также метаинформацию о коллекции связанных ресурсов:
"ссылки": {
"связанные с": {
"href": "http://example.com/articles/1/comments",
"meta": {
«count»: 10
}
}
}
Примечание. Для объектов ссылок и ссылок могут быть указаны дополнительные элементы. объекты в будущем.Также возможно, что допустимые значения дополнительные члены будут расширены (например, коллекция
ссылка
может поддерживать массив значений, тогда как ссылкаself
— нет).
JSON: объект API
A JSON: документ API МОЖЕТ включать информацию о его реализации.
под членом верхнего уровня jsonapi
. Если присутствует, значение jsonapi
член ДОЛЖЕН быть объектом («объект jsonapi»). Объект jsonapi МАЙ содержать член версии
, значение которого является строкой, указывающей наивысший JSON
Поддерживаемая версия API.Этот объект МОЖЕТ также содержать мета-член
, чей
value — это мета-объект, содержащий нестандартную метаинформацию.
{
"jsonapi": {
"версия": "1.0"
}
}
Если член версии
отсутствует, клиенты должны предполагать, что сервер
реализует как минимум версию 1.0 спецификации.
Примечание. Поскольку JSON: API стремится вносить только аддитивные изменения, Строка версии в первую очередь указывает, какие новые функции может поддерживать сервер.
Имена участников
Все имена элементов, используемые в документе JSON: API , ДОЛЖНЫ обрабатываться как чувствительные к регистру. клиентами и серверами, и они ДОЛЖНЫ соответствовать всем следующим условиям:
- Имена элементов ДОЛЖНЫ содержать хотя бы один символ.
- Имена участников ДОЛЖНЫ содержать только разрешенные символы, перечисленные ниже.
- Имена участников ДОЛЖНЫ начинаться и заканчиваться «глобально допустимым символом», как определено ниже.
Чтобы обеспечить простое сопоставление имен участников с URL-адресами, РЕКОМЕНДУЕТСЯ , чтобы в именах участников используются только незарезервированные, безопасные для URL-адресов символы, указанные в RFC 3986.
Допустимые символы
Следующие «глобально разрешенные символы» МОГУТ использоваться в любом месте имени члена:
- U + 0061 до U + 007A, «а-я»
- U + 0041 до U + 005A, «A-Z»
- U + 0030 до U + 0039, «0-9»
- U + 0080 и выше (символы Unicode, отличные от ASCII; не рекомендуется, не безопасно для URL-адресов )
Кроме того, в именах элементов разрешены следующие символы, за исключением первый или последний символ:
- U + 002D ДЕФИС-МИНУС, «-»
- U + 005F НИЗКАЯ ЛИНИЯ, «_»
- U + 0020 SPACE, ““ (не рекомендуется, небезопасно для URL)
Зарезервированные символы
Следующие символы НЕ ДОЛЖНЫ использоваться в именах участников:
- U + 002B ЗНАК ПЛЮС, «+» (используется для заказа)
- U + 002C ЗАПЯТА, «,» (используется как разделитель между путями отношений)
- U + 002E ПЕРИОД, “.” (используется как разделитель в путях отношений)
- U + 005B ЛЕВЫЙ КВАДРАТНЫЙ КРОНШТЕЙН, «[» (используется в редких наборах полей)
- U + 005D ПРАВЫЙ КВАДРАТНЫЙ КРОНШТЕЙН, “]” (используется в редких наборах полей)
- U + 0021 Восклицательный знак, «!»
- U + 0022 ЦИТАТНЫЙ ЗНАК, «» ’
- U + 0023 НОМЕРНЫЙ ЗНАК, «#»
- U + 0024 ЗНАК ДОЛЛАРА, «$»
- U + 0025 ЗНАК ПРОЦЕНТА, «%»
- U + 0026 AMPERSAND, «&»
- U + 0027 АПОСТРОФ, «’ »
- U + 0028 ЛЕВЫЙ ПАРЕНТЕЗ, “(“
- U + 0029 ПРАВЫЙ ПАРЕНТЕЗ, “)”
- U + 002A ASTERISK, «*»
- U + 002F SOLIDUS, «/»
- U + 003A ТОЛСТОВКА, «:»
- U + 003B SEMICOLON, «;»
- U + 003C МЕНЬШЕ ЗНАКА, «<»
- U + 003D ЗНАК РАВНО, «=»
- U + 003E ЗНАК БОЛЬШЕ, ЧЕМ, «>»
- U + 003F ВОПРОСНЫЙ ЗНАК, «?»
- U + 0040 КОММЕРЧЕСКИЙ АТЕЛЬ, «@»
- U + 005C REVERSE SOLIDUS, «\»
- U + 005E CIRCUMFLEX ACCENT, «^»
- U + 0060 GRAVE ACCENT, «» «
- U + 007B КРОНШТЕЙН ЛЕВЫЙ ИЗОЛИРУЮЩИЙ, “{“
- U + 007C ВЕРТИКАЛЬНАЯ ЛИНИЯ, “|”
- U + 007D КРОНШТЕЙН ПРАВЫЙ, “}”
- U + 007E ТИЛЬДА, «~»
- U + 007F УДАЛИТЬ
- от U + 0000 до U + 001F (C0 Controls)
Получение данных
Данные, включая ресурсы и отношения, можно получить, отправив GET
запрос к конечной точке.
Ответы можно дополнительно уточнить с помощью дополнительных функций, описанных ниже.
Получение ресурсов
Сервер ДОЛЖЕН поддерживать выборку данных ресурсов для каждого URL-адреса, указанного как:
- ссылка
self
как часть объекта ссылок верхнего уровня - ссылка
на себя
как часть объекта ссылок на уровне ресурса - — ссылка
, связанная с
как часть объекта связей уровня отношений.
Например, следующий запрос извлекает коллекцию статей:
GET / статьи HTTP / 1.1
Принять: application / vnd.api + json
Следующий запрос возвращает статью:
GET / статьи / 1 HTTP / 1.1
Принять: application / vnd.api + json
И следующий запрос возвращает автора статьи:
GET / статьи / 1 / автор HTTP / 1.1
Принять: application / vnd.api + json
Ответы
200 ОК
Сервер ДОЛЖЕН ответить на успешный запрос на выборку
ресурс или коллекция ресурсов с ответом 200 OK
.
Сервер ДОЛЖЕН ответить на успешный запрос на выборку ресурса.
коллекция с массивом объектов ресурсов или пустым массивом ( []
) как
исходные данные ответного документа.
Например, запрос GET
к коллекции статей может вернуть:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
"себя": "http://example.com/articles"
},
"данные": [{
"тип": "статьи",
"id": "1",
"attributes": {
"title": "JSON: API раскрашивает мой велосипедный навес!"
}
}, {
"тип": "статьи",
"id": "2",
"attributes": {
"title": "Рельсы - это Омакасе"
}
}]
}
Аналогичный ответ, представляющий пустую коллекцию, будет:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
"себя": "http://example.com/articles"
},
"данные": []
}
Сервер ДОЛЖЕН ответить на успешный запрос на выборку
ресурс с объектом ресурса или null
, предоставленный как
исходные данные ответного документа.
null
является подходящим ответом, только если запрошенный URL-адрес
может соответствовать одному ресурсу, но в настоящее время не соответствует.
Примечание. Рассмотрим, например, запрос на получение однозначной ссылки на ресурс.На этот запрос ответит
null
, когда связь пуста (например, ссылка не соответствует ни одному ресурсу), но с единственным связанным ресурсом в противном случае объект ресурса.
Например, запрос GET
к отдельной статье может вернуть:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
"себя": "http://example.com/articles/1"
},
"данные": {
"тип": "статьи",
"id": "1",
"attributes": {
"title": "JSON: API раскрашивает мой велосипедный навес!"
},
"отношения": {
"author": {
"links": {
"related": "http: // example.ru / article / 1 / author "
}
}
}
}
}
Если автор указанной выше статьи отсутствует, то запрос GET
к соответствующему
ресурс вернет:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
"я": "http://example.com/articles/1/author"
},
"данные": ноль
}
404 Не найдено
Сервер ДОЛЖЕН ответить сообщением 404 Not Found
при обработке запроса к
получить один ресурс, который не существует, за исключением случаев, когда запрос требует 200 OK
ответ с null
в качестве первичных данных (как описано выше).
Другие ответы
Сервер МОЖЕТ отвечать другими кодами состояния HTTP.
Сервер МОЖЕТ включать сведения об ошибках с ответами об ошибках.
Сервер ДОЛЖЕН подготовить ответы, а клиент ДОЛЖЕН интерпретировать
ответы, в соответствии с Семантика HTTP
.
Получение отношений
Сервер ДОЛЖЕН поддерживать выборку данных о взаимосвязях для каждого URL-адреса взаимосвязи.
предоставляется как ссылка на себя
как часть объекта ссылок
отношения.
Например, следующий запрос извлекает данные о комментариях к статье:
GET / статьи / 1 / отношения / комментарии HTTP / 1.1
Принять: application / vnd.api + json
И следующий запрос извлекает данные об авторе статьи:
GET / статьи / 1 / отношения / автор HTTP / 1.1
Принять: application / vnd.api + json
Ответы
200 ОК
Сервер ДОЛЖЕН ответить на успешный запрос для получения отношения
с ответом 200 OK
.
Первичные данные в ответном документе ДОЛЖНЫ соответствовать соответствующему значение для связи ресурсов, как описано выше для объекты отношений.
Объект ссылок верхнего уровня МОЖЕТ содержать собственных
и связанных
ссылок,
как описано выше для объектов отношений.
Например, запрос GET
к URL-адресу из ссылки отношения к одному может
возврат:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
"я": "/ статьи / 1 / отношения / автор",
"связанные": "/ статьи / 1 / автор"
},
"данные": {
"тип": "люди",
"id": "12"
}
}
Если указанная выше связь пуста, то запрос GET
к тому же URL-адресу будет
возврат:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
"я": "/ статьи / 1 / отношения / автор",
"связанные": "/ статьи / 1 / автор"
},
"данные": ноль
}
Запрос GET
к URL-адресу из ссылки отношения ко многим может вернуть:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
"я": "/ статьи / 1 / отношения / теги",
"связанные": "/ статьи / 1 / теги"
},
"данные": [
{"type": "tags", "id": "2"},
{"тип": "теги", "идентификатор": "3"}
]
}
Если указанная выше связь пуста, то запрос GET
к тому же URL-адресу будет
возврат:
HTTP / 1.1 200 ОК
Тип содержимого: application / vnd.api + json
{
"links": {
«я»: «/ статьи / 1 / отношения / теги»,
"связанные": "/ статьи / 1 / теги"
},
"данные": []
}
404 Не найдено
Сервер ДОЛЖЕН возвращать 404 Not Found
при обработке запроса на выборку
URL ссылки отношения, который не существует.
Примечание. Это может произойти, когда родительский ресурс отношения не существует. Например, если
/ article / 1
не существует, запросите/ article / 1 / Relations / tags
возвращает404 Not Found
.
Если URL ссылки отношения существует, но отношение пусто, то 200 OK
ДОЛЖЕН быть возвращен , как описано выше.
Другие ответы
Сервер МОЖЕТ отвечать другими кодами состояния HTTP.
Сервер МОЖЕТ включать сведения об ошибках с ответами об ошибках.
Сервер ДОЛЖЕН подготовить ответы, а клиент ДОЛЖЕН интерпретировать
ответы, в соответствии с Семантика HTTP
.
Включение связанных ресурсов
Конечная точка МОЖЕТ возвращать ресурсы, связанные с первичными данными по умолчанию.
Конечная точка МОЖЕТ также поддерживать параметр запроса include
, чтобы разрешить
клиент, чтобы настроить, какие связанные ресурсы должны быть возвращены.
Если конечная точка не поддерживает параметр include
, она ДОЛЖНА ответить
с 400 Bad Request
на любые запросы, которые его включают.
Если конечная точка поддерживает параметр include
, и клиент предоставляет его,
сервер НЕ ДОЛЖЕН включать незапрошенные объекты ресурсов в включенных
раздел составного документа.
Значение включает параметр
ДОЛЖНО быть разделенными запятыми (U + 002C
ЗАПЯТА, «,») список путей отношений.Путь отношений разделен точками
(U + 002E FULL-STOP, «.») Список имен отношений.
Если сервер не может определить путь отношения или не поддерживает включение ресурсов из пути, ДОЛЖЕН ответить 400 Bad Request.
Примечание. Например, путь отношения может быть
комментариев. Автор
, гдекомментариев
— это отношение, указанное в объекте ресурсастатей
, иавтор
— это отношение, указанное в объекте ресурсаcomments
.
Например, комментарии могут быть запрошены со статьей:
GET / article / 1? Include = comments HTTP / 1.1
Принять: application / vnd.api + json
Для запроса ресурсов, относящихся к другим ресурсам, путь, разделенный точками для каждого отношения можно указать имя:
GET /articles/1?include=comments.author HTTP / 1.1
Принять: application / vnd.api + json
Примечание. Поскольку составные документы требуют полной привязки (кроме случаев, когда связь отношения исключена из-за разреженных наборов полей), промежуточные ресурсы в пути, состоящем из нескольких частей, должны возвращаться вместе с конечными узлами.Для Например, ответ на запрос
комментариев. автор
должен включатькомментариев
а такжеавтор
каждого из этихкомментариев
.
Примечание. Сервер может раскрыть глубоко вложенные отношения, такие как
комментарии. Автор
как прямая связь с псевдонимом, напримеравторов комментариев
. Это позволит клиенту запросить/ article / 1? Include = comment-авторы
вместо/ статьи / 1? Include = комментарии.автор
. Абстрагируя вложенные связь с псевдонимом, сервер по-прежнему может обеспечить полную связь в составные документы без включения потенциально нежелательных промежуточных Ресурсы.
Можно запросить несколько связанных ресурсов в списке, разделенном запятыми:
GET /articles/1?include=author,comments.author HTTP / 1.1
Принять: application / vnd.api + json
Кроме того, связанные ресурсы могут быть запрошены из конечной точки отношения:
GET / article / 1 / Relations / comments? Include = comments.автор HTTP / 1.1
Принять: application / vnd.api + json
В этом случае первичными данными будет набор объекты идентификатора ресурса, представляющие ссылку на комментарии к статье, в то время как полные комментарии и авторы комментариев будут возвращены как включенные данные.
Примечание. Этот раздел относится к любой конечной точке, которая отвечает первичным данные, независимо от типа запроса. Например, сервер может поддерживать включение связанных ресурсов вместе с запросом
POST
для создания ресурс или отношения.
Редкие полевые наборы
Клиент МОЖЕТ запросить, чтобы конечная точка возвращала только определенные поля в
ответ для каждого типа путем включения параметра fields [TYPE]
.
Значение поля
параметр ДОЛЖНО быть разделенным запятыми (U + 002C
ЗАПЯТАЯ, «,») список, который относится к именам возвращаемых полей.
Пустое значение указывает, что поля не должны возвращаться.
Если клиент запрашивает ограниченный набор полей для данного типа ресурса, конечная точка НЕ ДОЛЖНА включать дополнительные поля в объекты ресурсов этот тип в своем ответе.
Если клиент не указывает набор полей для данного типа ресурса, сервер МОЖЕТ отправить все поля, подмножество полей или ни одного поля для этого тип ресурса.
GET / articles? Include = автор и поля [статьи] = заголовок, текст и поля [люди] = имя HTTP / 1.1
Принять: application / vnd.api + json
Примечание. В приведенном выше примере URI показаны незакодированные символы
[
и]
просто для читаемость. На практике эти символы должны быть закодированы в процентах в соответствии с требования в RFC 3986.
Примечание. Этот раздел применяется к любой конечной точке, которая отвечает ресурсами как первичные или включенные данные, независимо от типа запроса. Например, сервер может поддерживать разреженные наборы полей вместе с запросом
POST
для создания ресурс.
Сортировка
Сервер МОЖЕТ поддерживать запросы на сортировку коллекций ресурсов по одному или нескольким критериям («поля сортировки»).
Примечание. Хотя это рекомендуется, поля сортировки не обязательно соответствуют именам атрибутов ресурса и ассоциации.
Примечание. Рекомендуется выполнять сортировку с разделением точками (U + 002E FULL-STOP, «.»). поля могут использоваться для запроса сортировки на основе атрибутов отношений. Для Например, поле сортировки
author.name
может использоваться для запроса, чтобы первичные данные должны быть отсортированы на основе атрибутаname
автораотношение.
Конечная точка МОЖЕТ поддерживать запросы на сортировку первичных данных с помощью сортировки
параметр запроса.Значение для sort
ДОЛЖНО представлять поля сортировки.
GET / people? Sort = age HTTP / 1.1
Принять: application / vnd.api + json
Конечная точка МОЖЕТ поддерживать несколько полей сортировки, разрешая разделение запятыми. (U + 002C ЗАПЯТА, «,») сортировать поля. Поля сортировки ДОЛЖНЫ применяться в заказ указан.
GET / people? Sort = возраст, имя HTTP / 1.1
Принять: application / vnd.api + json
Порядок сортировки для каждого поля сортировки ДОЛЖЕН быть по возрастанию, если он не имеет префикса. с минусом (U + 002D ДЕФИС-МИНУС, «-»), и в этом случае ДОЛЖЕН быть убывающим.
GET / article? Sort = -created, заголовок HTTP / 1.1
Принять: application / vnd.api + json
В приведенном выше примере сначала должны быть возвращены самые новые статьи. Любые статьи созданные в тот же день, будут отсортированы по названию в порядке возрастания Алфавитный порядок.
Если сервер не поддерживает сортировку, указанную в параметре запроса сортировать
, он ДОЛЖЕН вернуть 400 Плохой запрос
.
Если сортировка поддерживается сервером и запрашивается клиентом через запрос
параметр sort
, сервер ДОЛЖЕН возвращать элементы верхнего уровня data
массив ответа, упорядоченный в соответствии с указанными критериями.Сервер МОЖЕТ применять правила сортировки по умолчанию к данным верхнего уровня
, если
параметр запроса sort
не указан.
Примечание. Этот раздел относится к любой конечной точке, которая отвечает ресурсом. сбор в качестве первичных данных, независимо от типа запроса.
Сервер МОЖЕТ ограничить количество ресурсов, возвращаемых в ответе к подмножеству («странице») всего доступного набора.
Сервер МОЖЕТ предоставлять ссылки для просмотра разбитого на страницы набора данных («разбиение на страницы ссылки »).
Ссылки на страницы ДОЛЖНЫ появляться в объекте ссылок, который соответствует
коллекция. Чтобы разбить первичные данные на страницы, укажите ссылки для разбивки на страницы в ссылки верхнего уровня на объект
. Чтобы разбить включенную коллекцию, возвращенную в
составной документ, укажите ссылки для пагинации в соответствующих ссылках
объект.
Следующие ключи ДОЛЖНЫ использоваться для ссылок на страницы :
-
первая
: первая страница данных -
последняя
: последняя страница данных -
предыдущая
: предыдущая страница данных -
следующая
: следующая страница данных
Ключи ДОЛЖНЫ быть либо опущены, либо иметь нулевое значение
, чтобы указать, что
конкретная ссылка недоступна.
Понятия порядка, выраженные в именовании ссылок пагинации, ДОЛЖЕН оставаться в соответствии с правилами сортировки JSON: API.
Параметр запроса страница
зарезервирован для разбивки на страницы. Серверы и клиенты СЛЕДУЕТ использовать этот ключ для операций нумерации страниц.
Примечание. JSON: API не зависит от стратегии разбивки на страницы, используемой сервером. Эффективные стратегии разбивки на страницы включают (но не ограничиваются ими): на основе страницы, на основе смещения и на основе курсора.Параметр запроса
страница
может использоваться в качестве основы для любой из этих стратегий. Например, постраничный стратегия может использовать такие параметры запроса, какстраница [номер]
истраница [размер]
, стратегия на основе смещения может использоватьстраниц [смещение]
истраниц [предел]
, в то время как Стратегия на основе курсора может использоватьстраниц [курсор]
.
Примечание. В приведенном выше примере параметров запроса используются незакодированные символы
[
и]
. просто для удобства чтения.На практике эти символы должны быть закодированы в процентах, согласно требованиям RFC 3986.
Примечание. Этот раздел относится к любой конечной точке, которая отвечает ресурсом. сбор в качестве первичных данных, независимо от типа запроса.
Фильтрация
Параметр запроса filter
зарезервирован для фильтрации данных. Серверы и клиенты СЛЕДУЕТ использовать этот ключ для операций фильтрации.
Примечание. JSON: API не зависит от стратегий, поддерживаемых сервером.В Фильтр
Параметр запроса
может использоваться как основа для любого количества фильтров стратегии.
Создание, обновление и удаление ресурсов
Сервер МОЖЕТ разрешить создание ресурсов заданного типа. Это МАЯ также позволяют изменять или удалять существующие ресурсы.
Запрос ДОЛЖЕН быть полностью успешным или неудачным (в одной «транзакции»). Нет разрешены частичные обновления.
Примечание. Член
типа
требуется в каждом объекте ресурса во всех запросах и ответы в формате JSON: API.В некоторых случаях, например, когдаPOST
поступает на конечная точка, представляющая разнородные данные, когдатип
не может быть выведен с конечной точки. Однако сбор и выбор, когда это требуется, были бы сбивает с толку; было бы трудно вспомнить, когда это было необходимо, а когда — нет. Следовательно, для улучшения согласованности и минимизации путаницы типявляется всегда требуется.
Создание ресурсов
Ресурс может быть создан путем отправки запроса POST
на URL-адрес, представляющий
сборник ресурсов.Запрос ДОЛЖЕН включать единственный объект ресурса.
в качестве первичных данных. Объект ресурса ДОЛЖЕН содержать как минимум элемент типа
.
Например, новая фотография может быть создана с помощью следующего запроса:
POST / фото HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": {
"тип": "фото",
"attributes": {
"title": "Угольный хомяк",
"src": "http://example.com/images/productivity.png "
},
"отношения": {
"фотограф": {
"data": {"type": "people", "id": "9"}
}
}
}
}
Если связь предусмотрена в отношениях
член
объект ресурса, его значение ДОЛЖНО быть объектом отношения с данными
член. Значение этого ключа представляет связь, с которой новый ресурс должен
имеют.
Идентификаторы, созданные клиентом
Сервер МОЖЕТ принять сгенерированный клиентом идентификатор вместе с запросом на создание
ресурс.ID ДОЛЖЕН быть указан с ключом id
, значением
где ДОЛЖЕН быть универсальным уникальным идентификатором. Клиент ДОЛЖЕН использовать
правильно сгенерированный и отформатированный UUID , как описано в RFC 4122
[RFC4122].
ПРИМЕЧАНИЕ. В некоторых случаях, например при импорте данных из другого источника, может быть возможно использовать что-то другое, кроме UUID, который все еще гарантирован быть уникальным в мировом масштабе. Не используйте ничего, кроме UUID, если вы не 100% уверенность в том, что используемая вами стратегия действительно генерирует глобально уникальные идентификаторы.
Например:
POST / фото HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": {
"тип": "фото",
"id": "550e8400-e29b-41d4-a716-446655440000",
"attributes": {
"title": "Угольный хомяк",
"src": "http://example.com/images/productivity.png"
}
}
}
Сервер ДОЛЖЕН возвращать 403 Запрещено
в ответ на неподдерживаемый запрос
для создания ресурса с идентификатором, созданным клиентом.
Ответы
201 Создано
Если запрос POST
не включал созданный клиентом
ID и запрошенный ресурс были созданы
успешно, сервер ДОЛЖЕН вернуть код состояния 201 Created
.
Ответ ДОЛЖЕН включать заголовок Location
, идентифицирующий местоположение
вновь созданного ресурса.
Ответ ДОЛЖЕН также включать документ, содержащий первичный ресурс создан.
Если объект ресурса, возвращенный ответом, содержит собственный ключ
в своем связывает элемент
и заголовок Location
, значение self
элемент ДОЛЖЕН соответствовать значению заголовка Location
.
HTTP / 1.1 201 Создано
Расположение: http://example.com/photos/550e8400-e29b-41d4-a716-446655440000
Тип содержимого: application / vnd.api + json
{
"данные": {
"тип": "фото",
"id": "550e8400-e29b-41d4-a716-446655440000",
"attributes": {
"title": "Угольный хомяк",
"src": "http: // example.com / images / performance.png "
},
"links": {
"self": "http://example.com/photos/550e8400-e29b-41d4-a716-446655440000"
}
}
}
202 Принято
Если запрос на создание ресурса принят в обработку, но
обработка не была завершена к моменту ответа сервера,
сервер ДОЛЖЕН возвращать код состояния 202 Accepted
.
204 Нет содержимого
Если запрос POST
включал сгенерированный клиентом
ID и запрошенный ресурс были созданы
успешно, сервер ДОЛЖЕН возвращать либо код состояния 201 Created
и ответный документ (как описано выше) или код статуса 204 No Content
без ответного документа.
Примечание. Если получен ответ
204
, клиент должен рассмотреть ресурс объект, отправленный в запросе для принятия сервером, как если бы сервер вернул его обратно в ответе201
.
403 Запрещено
Сервер МОЖЕТ вернуть 403 Запрещено
в ответ на неподдерживаемый запрос
для создания ресурса.
404 Не найдено
Сервер ДОЛЖЕН возвращать 404 Not Found
при обработке запроса, который
ссылается на несуществующий связанный ресурс.
409 Конфликт
Сервер ДОЛЖЕН возвращать 409 Конфликт
при обработке запроса POST
к
создать ресурс с уже существующим идентификатором, сгенерированным клиентом.
Сервер ДОЛЖЕН возвращать 409 Конфликт
при обработке запроса POST
в
который тип объекта ресурса не входит в число типов, составляющих
коллекция, представленная конечной точкой.
Серверу СЛЕДУЕТ включать сведения об ошибках и предоставлять достаточно информации для признать источник конфликта.
Другие ответы
Сервер МОЖЕТ отвечать другими кодами состояния HTTP.
Сервер МОЖЕТ включать сведения об ошибках с ответами об ошибках.
Сервер ДОЛЖЕН подготовить ответы, а клиент ДОЛЖЕН интерпретировать
ответы, в соответствии с Семантика HTTP
.
Обновление ресурсов
Ресурс можно обновить, отправив запрос PATCH
на URL-адрес, который
представляет ресурс.
URL-адрес ресурса можно получить по ссылке self
ресурса
объект. В качестве альтернативы, когда запрос GET
возвращает один объект ресурса как
первичные данные, тот же URL-адрес запроса может использоваться для обновлений.
PATCH
запрос ДОЛЖЕН включать один объект ресурса в качестве первичных данных.
Объект ресурса ДОЛЖЕН содержать элементы типа
и id
.
Например:
ПАТЧ / статьи / 1 HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": {
"тип": "статьи",
"id": "1",
"attributes": {
"title": "В TDD или нет"
}
}
}
Обновление атрибутов ресурса
Любые или все атрибуты ресурса МОГУТ быть включены в ресурс
объект включен в запрос PATCH
.
Если запрос не включает все атрибуты ресурса, сервер ДОЛЖЕН интерпретировать отсутствующие атрибуты, как если бы они были включены в их
текущие значения.Сервер НЕ ДОЛЖЕН интерпретировать отсутствующие атрибуты как null
значения.
Например, следующий запрос PATCH
интерпретируется как запрос к
обновить только заголовок
и текст
атрибуты статьи:
ПАТЧ / статьи / 1 HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": {
"тип": "статьи",
"id": "1",
"attributes": {
"title": "В TDD или нет",
"текст": "TL; DR; Это сложно... но все равно проверяйте охват тестом. "
}
}
}
Обновление взаимосвязей ресурса
Любые или все отношения ресурса МОГУТ быть включены в ресурс
объект включен в запрос PATCH
.
Если запрос не включает все отношения для ресурса, сервер ДОЛЖЕН интерпретировать отсутствующие отношения, как если бы они были включены в их
текущие значения. Это НЕ ДОЛЖНО интерпретировать их как null
или пустые значения.
Если связь предусмотрена в отношениях
член ресурса
объект в запросе PATCH
, его значение ДОЛЖНО быть объектом отношения
с элементом data
. Значение отношения будет заменено на
значение, указанное в этом члене.
Например, следующий запрос PATCH
обновит связь автор
статьи:
ПАТЧ / статьи / 1 HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": {
"тип": "статьи",
"id": "1",
"отношения": {
"author": {
"data": {"type": "people", "id": "1"}
}
}
}
}
Аналогичным образом следующий запрос PATCH
выполняет полную замену
теги
для статьи:
ПАТЧ / статьи / 1 HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": {
"тип": "статьи",
"id": "1",
"отношения": {
"теги": {
"данные": [
{"type": "tags", "id": "2"},
{"тип": "теги", "идентификатор": "3"}
]
}
}
}
}
Сервер МОЖЕТ отклонить попытку выполнить полную замену ко-многим
отношение.В таком случае сервер ДОЛЖЕН отклонить все обновление,
и вернуть ответ 403 Forbidden
.
Примечание. Поскольку полная замена может быть очень опасной операцией, сервер может запретить это. Например, сервер может отклонить полную замену, если он не предоставил клиенту полный список связанных объектов, и не хочет разрешать удаление записей, которые клиент не видел.
Ответы
202 Принято
Если запрос на обновление принят в обработку, но обработка
не было завершено к моменту ответа сервера, сервер ДОЛЖЕН вернуть код статуса 202 Accepted
.
200 ОК
Если сервер принимает обновление, но также изменяет ресурсы другими способами
чем те, которые указаны в запросе (например, обновление обновлено по адресу
атрибут или вычисленный sha
), он ДОЛЖЕН возвращать ответ 200 OK
. В
ответный документ ДОЛЖЕН включать представление обновленного
ресурс (ы), как если бы запрос GET
был направлен на URL запроса.
Сервер ДОЛЖЕН возвращать код состояния 200 OK
, если обновление прошло успешно,
текущие поля клиента остаются актуальными, и сервер отвечает только
с метаданными верхнего уровня.В этом случае сервер НЕ ДОЛЖЕН включать представление обновленного ресурса (ов).
204 Нет содержимого
Если обновление прошло успешно и сервер не обновляет никакие поля, кроме
предоставленные, сервер ДОЛЖЕН возвращать либо код состояния 200 OK
, либо
ответный документ (как описано выше) или код состояния 204 без содержания
без
ответный документ.
403 Запрещено
Сервер ДОЛЖЕН возвращать 403 Запрещено
в ответ на неподдерживаемый запрос
для обновления ресурса или отношения.
404 Не найдено
Сервер ДОЛЖЕН возвращать 404 Not Found
при обработке запроса на изменение
ресурс, которого не существует.
Сервер ДОЛЖЕН возвращать 404 Not Found
при обработке запроса, который
ссылается на несуществующий связанный ресурс.
409 Конфликт
Сервер МОЖЕТ вернуть 409 Конфликт
при обработке запроса PATCH
к
обновить ресурс, если это обновление нарушит другие принудительно установленные сервером
ограничения (например, ограничение уникальности для свойства, отличного от id
).
Сервер ДОЛЖЕН возвращать 409 Конфликт
при обработке запроса PATCH
в
какие объекты ресурса типа
и id
не соответствуют конечной точке сервера.
Серверу СЛЕДУЕТ включать сведения об ошибках и предоставлять достаточно информации для признать источник конфликта.
Другие ответы
Сервер МОЖЕТ отвечать другими кодами состояния HTTP.
Сервер МОЖЕТ включать сведения об ошибках с ответами об ошибках.
Сервер ДОЛЖЕН подготовить ответы, а клиент ДОЛЖЕН интерпретировать
ответы, в соответствии с Семантика HTTP
.
Обновление отношений
Хотя отношения могут быть изменены вместе с ресурсами (как описано выше), JSON: API также поддерживает независимое обновление отношений на URL-адреса из родственных ссылок.
Примечание: отношения обновляются без раскрытия базового сервера семантика, например внешние ключи.Кроме того, отношения могут быть обновлены не обязательно затрагивая связанные ресурсы. Например, если статья имеет много авторов, возможно удаление одного из авторов из статьи без удаления самого человека. Точно так же, если в статье много тегов, она можно добавлять или удалять теги. Под капотом на сервере первая из этих примеров могут быть реализованы с внешним ключом, а второй может быть реализован с помощью таблицы соединений, но протокол JSON: API будет то же самое в обоих случаях.
Примечание. Сервер может удалить базовый ресурс, если связь удаляется (в качестве меры по сбору мусора).
Обновление однозначных отношений
Сервер ДОЛЖЕН отвечать на запросы PATCH
на URL-адрес от одного к другому.
ссылка на отношения, как описано ниже.
Запрос PATCH
ДОЛЖЕН включать элемент верхнего уровня с именем data
, содержащий
один из:
Например, следующий запрос обновляет автора статьи:
ПАТЧ / статьи / 1 / отношения / автор HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"data": {"type": "people", "id": "12"}
}
И следующий запрос очищает автора той же статьи:
PATCH / статьи / 1 / отношения / автор HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": ноль
}
Если связь обновлена успешно, то сервер ДОЛЖЕН вернуть . успешный ответ.
Обновление отношений ко многим
Сервер ДОЛЖЕН отвечать на запросы PATCH
, POST
и DELETE
к
URL-адрес ссылки отношения ко многим, как описано ниже.
Для всех типов запросов тело ДОЛЖНО содержать элемент data
, значение которого
представляет собой пустой массив или массив объектов идентификаторов ресурсов.
Если клиент отправляет запрос PATCH
к URL-адресу от to-many
связь, сервер ДОЛЖЕН либо полностью
заменить каждый член отношения, вернуть соответствующий ответ об ошибке
если некоторые ресурсы не могут быть найдены или недоступны, или вернуть 403 Запрещено
ответ, если полная замена не разрешена сервером.
Например, следующий запрос заменяет все теги для статьи:
ПАТЧ / статьи / 1 / отношения / теги HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": [
{"type": "tags", "id": "2"},
{"тип": "теги", "идентификатор": "3"}
]
}
И следующий запрос очищает все теги для статьи:
ПАТЧ / статьи / 1 / отношения / теги HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принимаю: приложение / внд.api + json
{
"данные": []
}
Если клиент отправляет запрос POST
на URL-адрес из
связь, сервер ДОЛЖЕН добавить указанный
члены отношения, если они еще не присутствуют. Если данный тип
и id
уже находится в связи, сервер НЕ ДОЛЖЕН добавлять его снова.
Примечание. Это соответствует семантике баз данных, использующих внешние ключи для имеет много отношений. Хранилище на основе документов должно проверять наличие множества отношения перед добавлением, чтобы избежать дублирования.
Если все указанные ресурсы могут быть добавлены или уже присутствуют в отношении, тогда сервер ДОЛЖЕН вернуть успешный ответ.
Примечание. Такой подход гарантирует, что запрос будет успешным, если сервер состояние соответствует запрошенному состоянию и помогает избежать бессмысленных условий гонки вызвано тем, что несколько клиентов вносят одинаковые изменения в отношения.
В следующем примере комментарий с ID 123
добавляется в список
комментарии к статье с ID 1
:
POST / article / 1 / Relations / comments HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": [
{"тип": "комментарии", "идентификатор": "123"}
]
}
Если клиент делает запрос DELETE
на URL-адрес из
связь связи сервер ДОЛЖЕН удалить указанный
участников из отношения или вернуть ответ 403 Forbidden
. Если все
указанные ресурсы могут быть удалены или уже отсутствуют
от, отношение, тогда сервер ДОЛЖЕН вернуть успешный ответ.
Примечание. Как описано выше для запросов
POST
, этот подход помогает избежать бессмысленные условия гонки между несколькими клиентами, вносящими одни и те же изменения.
Члены отношения указываются так же, как в запросе POST
.
В следующем примере удаляются комментарии с идентификаторами 12
и 13
.
из списка комментариев к статье с ID 1
:
УДАЛИТЬ / статьи / 1 / отношения / комментарии HTTP / 1.1
Тип содержимого: application / vnd.api + json
Принять: application / vnd.api + json
{
"данные": [
{"тип": "комментарии", "идентификатор": "12"},
{"тип": "комментарии", "идентификатор": "13"}
]
}
Примечание. RFC 7231 указывает, что запрос DELETE может включать в себя тело, но что сервер может отклонить запрос. Эта спецификация определяет семантику server, и мы определяем его семантику для JSON: API.
Ответы
202 Принято
Если запрос на обновление отношения был принят в обработку, но
обработка не была завершена к моменту ответа сервера,
сервер ДОЛЖЕН возвращать код состояния 202 Accepted
.
204 Нет содержимого
Сервер ДОЛЖЕН возвращать код состояния 204 Нет содержимого
, если обновление
успешно, и представление ресурса в запросе соответствует
результат.
Примечание. Это подходящий ответ на запрос
POST
, отправленный на URL-адрес. от связи отношения ко многим, когда эта связь уже существуют. Это также подходящий ответ на запросDELETE
, отправленный по URL-адресу. от связи отношения ко многим, когда эта связь не существует.
200 ОК
Если сервер принимает обновление, но также изменяет целевые отношения
другими способами, кроме указанных в запросе, ДОЛЖЕН возвращать 200
ОК
ответ. Ответный документ ДОЛЖЕН включать представление
обновленные отношения.
Сервер ДОЛЖЕН возвращать код состояния 200 OK
, если обновление прошло успешно,
текущие данные клиента остаются актуальными, и сервер отвечает
только с метаданными верхнего уровня.В этом случае сервер НЕ ДОЛЖЕН включать представление обновленных отношений.
403 Запрещено
Сервер ДОЛЖЕН возвращать 403 Запрещено
в ответ на неподдерживаемый запрос
обновить отношения.
Другие ответы
Сервер МОЖЕТ отвечать другими кодами состояния HTTP.
Сервер МОЖЕТ включать сведения об ошибках с ответами об ошибках.
Сервер ДОЛЖЕН подготовить ответы, а клиент ДОЛЖЕН интерпретировать
ответы, в соответствии с Семантика HTTP
.
Удаление ресурсов
Отдельный ресурс может быть удален путем выполнения запроса DELETE
к
URL ресурса:
УДАЛИТЬ / фотографии / 1 HTTP / 1.1
Принять: application / vnd.api + json
Ответы
202 Принято
Если запрос на удаление был принят в обработку, но обработка
не было завершено к моменту ответа сервера, сервер ДОЛЖЕН вернуть код статуса 202 Accepted
.
204 Нет содержимого
Сервер ДОЛЖЕН возвращать код состояния 204 No Content
, если удаление
запрос выполнен успешно, и содержимое не возвращается.
200 ОК
Сервер ДОЛЖЕН вернуть код состояния 200 OK
, если запрос на удаление
успешно, и сервер отвечает только метаданными верхнего уровня.
404 НЕ НАЙДЕНО
Сервер ДОЛЖЕН возвращать код состояния 404 Not Found
, если запрос на удаление завершился неудачно.
из-за того, что ресурс не существует.
Другие ответы
Сервер МОЖЕТ отвечать другими кодами состояния HTTP.
Сервер МОЖЕТ включать сведения об ошибках с ответами об ошибках.
Сервер ДОЛЖЕН подготовить ответы, а клиент ДОЛЖЕН интерпретировать
ответы, в соответствии с Семантика HTTP
.
Параметры запроса
Параметры запроса для конкретной реализации ДОЛЖЕН соответствовать тем же ограничениям в качестве имен членов с дополнительным требованием, что они ДОЛЖНЫ содержать в хотя бы один символ, отличный от a-z (от U + 0061 до U + 007A). РЕКОМЕНДУЕТСЯ , чтобы U + 002D ДЕФИС-МИНУС, «-», U + 005F НИЖНЯЯ СТРОКА, «_» или заглавная буква используются (например, верблюжья оболочка).
Если сервер обнаруживает параметр запроса, который не соответствует названию
соглашениям выше, и сервер не знает, как обработать его как запрос
параметр из этой спецификации, он ДОЛЖЕН возвращать 400 Bad Request
.
Примечание. Это сделано для того, чтобы JSON: API мог добавлять дополнительные элементы. к стандартным параметрам запроса без конфликта с существующими реализациями.
Ошибки
Ошибки обработки
Сервер МОЖЕТ остановить обработку, как только возникнет проблема, или МОЖЕТ продолжить обработку и столкнуться с множеством проблем. Например, сервер может обрабатывать несколько атрибутов, а затем возвращать несколько проверок проблемы в одном ответе.
Когда сервер сталкивается с несколькими проблемами для одного запроса, большинство
в ответе СЛЕДУЕТ использовать обычно применимый код ошибки HTTP .Для
Например, 400 Bad Request
может подходить для нескольких ошибок 4xx
или 500 Внутренняя ошибка сервера
может подходить для нескольких ошибок 5xx.
Объекты ошибок
Объекты ошибок предоставляют дополнительную информацию о проблемах, возникших при
выполнение операции. Объекты ошибок ДОЛЖНЫ быть возвращены в виде массива.
с ключом ошибок
на верхнем уровне документа JSON: API.
Объект ошибки МОЖЕТ иметь следующие элементы:
-
id
: уникальный идентификатор для этого конкретного возникновения проблемы. -
ссылки
: объект ссылок, содержащий следующие элементы:-
около
: ссылка, которая ведет к более подробной информации об этом конкретное возникновение проблемы.
-
-
статус
: код статуса HTTP, применимый к этой проблеме, выраженный как строковое значение. -
код
: код ошибки приложения, выраженный в виде строкового значения. -
title
: краткое, понятное для человека описание проблемы, которой НЕ ДОЛЖЕН изменение от возникновения проблемы к возникновению, за исключением локализация. -
деталь
: удобочитаемое объяснение, относящееся к этому случаю проблема. Как иtitle
, значение этого поля можно локализовать. -
источник
: объект, содержащий ссылки на источник ошибки, необязательно включая любого из следующих членов:-
указатель
: указатель JSON [RFC6901] к связанному объекту в документе запроса [например,"/ данные"
для первичный объект данных или"/ data / attributes / title"
для конкретного атрибута]. -
параметр
: строка, указывающая, какой параметр запроса URI вызвал Ошибка.
-
-
мета
: мета-объект, содержащий нестандартную метаинформацию о ошибка.
25.6 Контроль доступа к сохраненным объектам
25.6 Контроль доступа к сохраненным объектам
Сохраненные программы (процедуры, функции, триггеры и события) и
представления определяются перед использованием и, когда на них ссылаются, выполняются
в контексте безопасности, который определяет их привилегии.В
привилегии, применимые к выполнению сохраненного объекта:
контролируется его атрибутом DEFINER
и SQL SECURITY
характеристика.
Определение сохраненного объекта может включать DEFINER
атрибут, который именует учетную запись MySQL.
Если в определении отсутствует атрибут DEFINER
,
определителем объекта по умолчанию является пользователь, который его создает.
Следующие правила определяют, какие учетные записи вы можете указать как
атрибут DEFINER
для сохраненного объекта:
Если у вас
SET_USER_ID
привилегия (или устаревшаяSUPER
привилегия), вы можете укажите любую учетную запись какDEFINER
атрибут.Если учетная запись не существует, появляется предупреждение. сгенерировано. Дополнительно, чтобы установить сохраненный объектDEFINER
атрибут учетной записи, имеющей привилегияSYSTEM_USER
, у вас должен бытьSYSTEM_USER
привилегия.В противном случае единственной разрешенной учетной записью является ваша собственная, указанная буквально или как
CURRENT_USER
илиCURRENT_USER ()
.Ты не можешь установите определитель на любую другую учетную запись.
Создание сохраненного объекта с несуществующим
Учетная запись DEFINER
создает бесхозный объект,
что может иметь негативные последствия; видеть
Сиротские хранимые объекты.
Характеристика БЕЗОПАСНОСТИ SQL
Для хранимых подпрограмм (процедур и функций) и представлений
определение объекта может включать SQL SECURITY
характеристика со значением DEFINER
или INVOKER
, чтобы указать,
выполняется в контексте определителя или инициатора.Если в определении нет
характеристика SQL SECURITY
, значение по умолчанию
это более точный контекст.
У триггеров и событий нет SQL SECURITY
характерны и всегда выполняются в определенном контексте. Сервер
вызывает эти объекты автоматически по мере необходимости, поэтому нет
вызывающий пользователя.
Контексты безопасности определителя и инициатора различаются следующим образом:
Сохраненный объект, который выполняется в определенном контексте безопасности выполняется с привилегиями учетной записи, названной ее
DEFINER
атрибут.Эти привилегии могут полностью отличаться от таковых вызывающего пользователя. В invoker должен иметь соответствующие привилегии, чтобы ссылаться на объект (например,EXECUTE
для вызова хранимой процедуры илиВЫБРАТЬ
для выбора из view), но во время выполнения объекта привилегии вызывающего игнорируются, и только учетная записьDEFINER
привилегии имеют значение. Если учетная записьDEFINER
имеет мало привилегий, объект соответственно ограничен в операции, которые он может выполнять.Если Учетная записьDEFINER
имеет высокие привилегии (например, административная учетная запись), объект может выполнять мощные операции независимо от того, кто вызывает Это.Сохраненная процедура или представление, выполняемое в режиме безопасности вызывающего объекта. контекст может выполнять только те операции, для которых вызывающий имеет привилегии. Атрибут
DEFINER
имеет не влияет на выполнение объекта.
Рассмотрим следующую хранимую процедуру, которая объявлена с помощью SQL SECURITY DEFINER
для выполнения в определителе
контекст безопасности:
CREATE DEFINER = 'admin' @ 'localhost' ПРОЦЕДУРА p1 ()
ОПРЕДЕЛЕНИЕ БЕЗОПАСНОСТИ SQL
НАЧИНАТЬ
ОБНОВЛЕНИЕ t1 УСТАНОВИТЬ счетчик = счетчик + 1;
КОНЕЦ;
Любой пользователь, имеющий EXECUTE
привилегия для p1
может вызвать его с помощью ЗВОНИТЕ
заявление.Однако когда p1
выполняется в определенном режиме безопасности
контексте и, таким образом, выполняется с привилегиями 'admin' @ 'localhost'
, учетная запись, названная как его DEFINER
атрибут. Эта учетная запись должна иметь EXECUTE
привилегия для p1
, а также ОБНОВЛЕНИЕ
привилегия для таблицы t1
ссылка в теле объекта.
В противном случае процедура не выполняется.
Теперь рассмотрим эту хранимую процедуру, которая идентична p1
за исключением того, что его SQL
БЕЗОПАСНОСТЬ
характеристика INVOKER
:
CREATE DEFINER = 'admin' @ 'localhost' ПРОЦЕДУРА p2 ()
ВЫЗОВЕР БЕЗОПАСНОСТИ SQL
НАЧИНАТЬ
ОБНОВЛЕНИЕ t1 УСТАНОВИТЬ счетчик = счетчик + 1;
КОНЕЦ;
В отличие от p1
, p2
выполняется в
контекст безопасности invoker и, следовательно, с привилегиями
вызывающий пользователя независимо от DEFINER
значение атрибута. p2
не работает, если вызывающий
не имеет права EXECUTE
для p2
или ОБНОВЛЕНИЕ
привилегия для таблицы т1
.
Сиротский сохраненный объект - это объект, для которого DEFINER
именует несуществующий атрибут
учетная запись:
Сиротский сохраненный объект можно создать, указав несуществующий аккаунт
DEFINER
на время создания объекта.Существующий сохраненный объект может стать бесхозным из-за выполнение
DROP USER
оператор, который удаляет объектDEFINER
аккаунт илиПЕРЕИМЕНОВАТЬ ПОЛЬЗОВАТЕЛЯ
оператор, который переименовывает объектDEFINER
учетная запись.
Сиротский сохраненный объект может быть проблематичным по следующим причинам:
Поскольку учетная запись
DEFINER
не существует, объект может работать не так, как ожидалось, если он выполняется в определитель контекста безопасности:Для сохраненной подпрограммы ошибка возникает в подпрограмме. время выполнения, если
SQL SECURITY
значениеDEFINER
, но определитель Аккаунт не существует.Для триггера это не лучшая идея для триггера. активация происходит до тех пор, пока учетная запись не сделает существовать. В противном случае поведение в отношении привилегий проверка не определена.
Для события ошибка возникает во время выполнения события, если аккаунт не существует.
Для представления ошибка возникает при ссылке на представление если значение
SQL SECURITY
равноDEFINER
, но учетная запись определителя не существует.
Объект может представлять угрозу безопасности, если несуществующий
DEFINER
аккаунт впоследствии воссоздан с целью, не связанной с объектом. В этом В этом случае учетная запись «принимает» объект, а с соответствующие привилегии, может выполнить его, даже если это не предназначено.
Начиная с MySQL 8.0.22, сервер накладывает дополнительные проверки безопасности управления учетными записями, предназначенные для предотвращения операции, которые (возможно, непреднамеренно) заставляют хранимые объекты становятся сиротами или вызывают принятие хранимых объектов, которые в настоящее время осиротели:
DROP USER
завершается с ошибкой если какая-либо учетная запись, которую нужно удалить, называетсяDEFINER
атрибут для любого сохраненного объекта.(То есть утверждение не выполняется, если удаление учетной записи привести к тому, что сохраненный объект станет бесхозным.)ПЕРЕИМЕНОВАТЬ ПОЛЬЗОВАТЕЛЯ
не работает с ошибка, если какая-либо учетная запись, которую нужно переименовать, имеет имяDEFINER
атрибут для любого сохраненного объекта. (То есть утверждение не выполняется, если переименование учетной записи привести к тому, что сохраненный объект станет бесхозным.)CREATE USER
не работает с ошибка, если любая создаваемая учетная запись названаDEFINER
атрибут для любого сохраненного объекта.(То есть утверждение не выполняется, если создание учетной записи заставить учетную запись принять в настоящее время осиротевшую сохраненную объект.)
В определенных ситуациях может потребоваться преднамеренное
выполнять эти отчеты по управлению счетом, даже если они
иначе не получится. Чтобы это стало возможным, если у пользователя есть SET_USER_ID
привилегия, которая
привилегия отменяет проверки безопасности потерянных объектов и
утверждения преуспевают с предупреждением, а не с ошибкой
ошибка.
Для получения информации об учетных записях, используемых в качестве хранимого объекта
определителей в установке MySQL, запросите ИНФОРМАЦИЯ_СХЕМА
.
Этот запрос определяет, какие INFORMATION_SCHEMA
таблицы описывают объекты
которые имеют атрибут DEFINER
:
mysql> SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
ГДЕ COLUMN_NAME = 'ОПРЕДЕЛЕНИЕ';
+ -------------------- + ------------ +
| TABLE_SCHEMA | ТАБЛИЦА ИМЯ |
+ -------------------- + ------------ +
| information_schema | СОБЫТИЯ |
| information_schema | МАРШРУТЫ |
| information_schema | ТРИГГЕРЫ |
| information_schema | ПРОСМОТРЫ |
+ -------------------- + ------------ +
В результате вы узнаете, какие таблицы запрашивать, чтобы узнать, какие.
сохраненный объект Значения DEFINER
существуют и которые
объекты имеют конкретное значение DEFINER
:
Чтобы определить, какие значения
DEFINER
существуют в для каждой таблицы используйте эти запросы:ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ ОПРЕДЕЛИТЕЛЬ ИЗ INFORMATION_SCHEMA.СОБЫТИЯ; ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ ОПРЕДЕЛИТЕЛЬ ИЗ INFORMATION_SCHEMA.ROUTINES; ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ ОПРЕДЕЛИТЕЛЬ ИЗ INFORMATION_SCHEMA.TRIGGERS; ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ ОПРЕДЕЛИТЕЛЬ ИЗ INFORMATION_SCHEMA.VIEWS;
Результаты запроса важны для любой отображаемой учетной записи. следующим образом:
Если учетная запись существует, ее удаление или переименование вызывает сохраненные объекты стать сиротами. Если вы планируете бросить или переименуйте аккаунт, сначала удалите его связанные хранимые объекты или переопределение их, чтобы иметь другой определитель.
Если учетная запись не существует, ее создание приводит к принять в настоящее время осиротевшие хранимые объекты. Если вы планируете создайте учетную запись, подумайте, нет ли сирот объекты должны быть связаны с ним. Если нет, переопределите у них есть другой определитель.
Чтобы переопределить объект с другим определителем, вы можете использовать
АЛЬТЕРНОЕ СОБЫТИЕ
илиALTER VIEW
для непосредственного изменения счетDEFINER
событий и просмотров.Для хранимых процедур и функций, а также для триггеров вы должен отбросить объект и воссоздать его, чтобы назначить другойDEFINER
аккаунтЧтобы определить, какие объекты имеют данный
DEFINER
account, используйте эти запросы, заменяя интересующий счет наимя_пользователя
@имя_хоста
ВЫБРАТЬ EVENT_SCHEMA, EVENT_NAME FROM INFORMATION_SCHEMA.СОБЫТИЯ WHERE DEFINER = ' имя_пользователя @ имя_хоста '; ВЫБЕРИТЕ ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE ОТ INFORMATION_SCHEMA.ROUTINES WHERE DEFINER = ' имя_пользователя @ имя_хоста '; ВЫБЕРИТЕ TRIGGER_SCHEMA, TRIGGER_NAME ИЗ INFORMATION_SCHEMA.TRIGGERS WHERE DEFINER = ' имя_пользователя @ имя_хоста '; ВЫБЕРИТЕ TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE DEFINER = ' имя_пользователя @ имя_хоста ';
Для стола
ROUTINES
запрос включаетстолбец ROUTINE_TYPE
, поэтому эти выходные строки различают,DEFINER
предназначен для хранимой процедуры или сохраненная функция.Если учетная запись, которую вы ищете, не существует, любой объекты, отображаемые этими запросами, являются бесхозными объектами.
Руководство по минимизации рисков
Чтобы свести к минимуму потенциальный риск для создания сохраненных объектов и использования, следуйте этим рекомендациям:
Не создавайте бесхозные сохраненные объекты; то есть объекты для который атрибут
DEFINER
называет несуществующий аккаунт.Не заставляйте хранящиеся предметы становиться осиротел, отбросив или переименовав учетную запись, названнуюDEFINER
атрибут любого существующего объекта.Для хранимой процедуры или представления используйте
SQL SECURITY. INVOKER
в определении объекта, когда это возможно, поэтому что его могут использовать только пользователи с разрешениями подходит для операций, выполняемых объектом.Если вы создаете объекты, хранящиеся в контексте определения, при использовании аккаунт, который имеет
SET_USER_ID
привилегия (или устаревшая привилегияSUPER
), указать явный атрибутDEFINER
который называет учетную запись, обладающую только привилегиями требуется для операций, выполняемых объектом.Указать только высокопривилегированная учетная записьDEFINER
когда это абсолютно необходимо.Администраторы могут запретить пользователям создавать сохраненные объекты, которые определяют высокопривилегированные
DEFINER
учетных записей, не предоставив имSET_USER_ID
привилегия (или устарела привилегияSUPER
).Объекты контекста определителя следует писать с учетом что они могут получить доступ к данным, для которых вызывающий у пользователя нет привилегий.В некоторых случаях можно предотвратить ссылки на эти объекты, не разрешая неавторизованные особые привилегии пользователей:
На сохраненную процедуру не может ссылаться пользователь, который делает нет
EXECUTE
привилегия для этого.На представление не может ссылаться пользователь, у которого нет соответствующая привилегия для этого (
ВЫБРАТЬ
для выбора это,ВСТАВИТЬ
для вставки в это и так далее).
Однако для триггеров и событий такого контроля не существует. потому что они всегда выполняются в определенном контексте. Сервер автоматически вызывает эти объекты по мере необходимости, и пользователи не ссылайтесь на них напрямую:
Триггер активируется доступом к таблице, с которой это связано даже с обычными обращениями пользователей к таблицам без особых привилегий.
Событие выполняется сервером по расписанию.
В обоих случаях, если учетная запись
DEFINER
высокопривилегированный, объект может выполнять чувствительные или опасные операции. Это остается верным, если привилегии, необходимые для создания объекта, отозваны у аккаунт пользователя, который его создал. Администраторы должны быть особенно осторожны с предоставлением пользователям возможности создавать объекты привилегии.
FAQ по программированию - документация Python 3.9.4
Есть ли отладчик на уровне исходного кода с точками останова, пошаговым режимом и т. Д.?
Да.
Несколько отладчиков для Python описаны ниже, а встроенная функция breakpoint ()
позволяет перейти к любой из них.
Модуль pdb - это простой, но адекватный отладчик консольного режима для Python. это
часть стандартной библиотеки Python и документирована в библиотеке .
Справочное руководство
.Вы также можете написать свой собственный отладчик, используя код
для pdb в качестве примера.
Интерактивная среда разработки IDLE, которая является частью стандарта Дистрибутив Python (обычно доступный как Tools / scripts / idle) включает графический отладчик.
PythonWin - это среда разработки Python, которая включает отладчик графического интерфейса пользователя на основе pdb. В Отладчик Pythonwin раскрашивает точки останова и имеет довольно много интересных функций, таких как отладка программ, отличных от Pythonwin. Pythonwin доступен как часть Python для проекта Windows Extensions и в составе дистрибутива ActivePython (см. https: // www.activestate.com/activepython).
Eric - это IDE, построенная на PyQt и компонент редактирования Scintilla.
Pydb - это версия стандартного отладчика Python pdb, модифицированная для использования с DDD. (Data Display Debugger), популярный интерфейс графического отладчика. Pydb может быть можно найти на http://bashdb.sourceforge.net/pydb/, а DDD можно найти на https://www.gnu.org/software/ddd.
Существует ряд коммерческих Python IDE, которые включают графические отладчики. В их числе:
Как я могу создать автономный двоичный файл из скрипта Python?
Вам не нужна возможность компилировать Python в код C, если все, что вам нужно, это автономная программа, которую пользователи могут загружать и запускать без установки сначала дистрибутив Python.Есть ряд инструментов, которые определяют набор модулей, необходимых для программы, и связать эти модули вместе с Бинарный файл Python для создания одного исполняемого файла.
Один - использовать инструмент замораживания, который включен в дерево исходных текстов Python как Инструменты / заморозка
. Он преобразует байт-код Python в массивы C; компилятор C вы можете
встроить все свои модули в новую программу, которая затем будет связана с
стандартные модули Python.
Он работает путем рекурсивного сканирования исходного кода на предмет операторов импорта (в обоих forms) и ищем модули в стандартном пути Python, а также в исходный каталог (для встроенных модулей).Затем он превращает байт-код для модулей написано на Python в коде C (инициализаторы массивов, которые можно превратить в код объекты с помощью модуля маршала) и создает настраиваемый файл конфигурации, который содержит только те встроенные модули, которые фактически используются в программе. Это затем компилирует сгенерированный код C и связывает его с остальной частью Python интерпретатор для формирования автономного двоичного файла, который действует точно так же, как ваш скрипт.
Очевидно, для замораживания требуется компилятор C. Есть еще несколько утилит чего нет.Один из них - py2exe Томаса Хеллера (только для Windows) по адресу
.Еще один инструмент - cx_Freeze Энтони Туининга.
Почему я получаю ошибку UnboundLocalError, когда переменная имеет значение?
Это может быть сюрпризом, если UnboundLocalError ранее работал код, когда он изменен путем добавления оператора присваивания где-нибудь в тело функции.
Этот код:
>>> х = 10 >>> def bar (): ... печать (x) >>> бар () 10
работает, но этот код:
>>> х = 10 >>> def foo (): ... print (x) ... х + = 1
приводит к ошибке UnboundLocalError:
>>> foo () Отслеживание (последний вызов последний): ... UnboundLocalError: локальная переменная 'x', на которую ссылается перед назначением
Это связано с тем, что когда вы выполняете присвоение переменной в области видимости, это
переменная становится локальной для этой области и затеняет любую переменную с аналогичным именем
во внешнем объеме. Поскольку последний оператор в foo присваивает новое значение x
, компилятор распознает его как локальную переменную.Следовательно, когда
ранее print (x)
пытается распечатать неинициализированную локальную переменную и
возникает ошибка.
В приведенном выше примере вы можете получить доступ к переменной внешней области, объявив ее весь мир:
>>> х = 10 >>> def foobar (): ... глобальный x ... печать (x) ... х + = 1 >>> foobar () 10
Это явное заявление необходимо для того, чтобы напомнить вам, что (в отличие от внешне аналогичная ситуация с переменными класса и экземпляра) вы фактически изменяя значение переменной во внешней области:
Вы можете сделать то же самое во вложенной области, используя нелокальный
ключевое слово:
>>> def foo (): ... x = 10 ... def bar (): ... нелокальный x ... печать (x) ... х + = 1 ... бар() ... печать (x) >>> foo () 10 11
Каковы правила для локальных и глобальных переменных в Python?
В Python переменные, которые упоминаются только внутри функции, неявно Глобальный. Если переменной присваивается значение в любом месте тела функции, предполагается, что он является локальным, если явно не объявлен как глобальный.
Поначалу это немного удивительно, но небольшое размышление объясняет это.На
одной рукой, требуя global
для присвоенных переменных, обеспечивает полосу
от непреднамеренных побочных эффектов. С другой стороны, если требуется global
для всех глобальных ссылок вы всегда будете использовать global
. У тебя было бы
объявить глобальными каждую ссылку на встроенную функцию или компонент
импортированный модуль. Этот беспорядок сведет на нет полезность global
.
объявление для выявления побочных эффектов.
Почему лямбда-выражения, определенные в цикле с разными значениями, возвращают один и тот же результат?
Предположим, вы используете цикл for для определения нескольких различных лямбда-выражений (или даже простых функции), e.г .:
>>> квадраты = [] >>> для x в диапазоне (5): ... squares.append (лямбда: x ** 2)
Это дает вам список, содержащий 5 лямбд, которые вычисляют x ** 2
. Ты
можно ожидать, что при вызове они вернут, соответственно, 0
, 1
, 4
, 9
и 16
. Однако, когда вы действительно попробуете, вы увидите, что
все они возвращают 16
:
>>> квадраты [2] () 16 >>> квадраты [4] () 16
Это происходит потому, что x
не является локальным для лямбда-выражений, но определено в
внешняя область видимости, и к ней обращаются, когда вызывается лямбда, а не когда она
определено.В конце цикла значение x
равно 4
, поэтому все
теперь функции возвращают 4 ** 2
, то есть 16
. Вы также можете проверить это,
измените значение x
и посмотрите, как изменятся результаты лямбд:
>>> х = 8 >>> квадраты [2] () 64
Во избежание этого необходимо сохранить значения в переменных, локальных для
лямбды, чтобы они не полагались на значение глобального x
:
>>> квадраты = [] >>> для x в диапазоне (5): ... squares.append (лямбда n = x: n ** 2)
Здесь n = x
создает новую переменную n
, локальную для лямбды, и вычисляет
когда лямбда определена так, что она имеет то же значение, что и x
в
эта точка в петле. Это означает, что значение n
будет 0
.
в первой лямбде, 1
во второй, 2
в третьей и т. д.
Поэтому каждая лямбда теперь будет возвращать правильный результат:
>>> квадраты [2] () 4 >>> квадраты [4] () 16
Обратите внимание, что это поведение не свойственно лямбдам, но применяется к обычным функции тоже.
Как передать глобальные переменные в модули?
Канонический способ обмена информацией между модулями в рамках одной программы - для создания специального модуля (часто называемого config или cfg). Просто импортируйте конфиг модуль во всех модулях вашего приложения; модуль затем становится доступным как глобальное имя. Поскольку существует только один экземпляр каждого модуля, любые изменения сделанные в модуле объект отражаются повсюду. Например:
config.py:
x = 0 # Значение по умолчанию для параметра конфигурации 'x'
мод.py:
импорт конфигурации config.x = 1
main.py:
импорт конфигурации импорт мода печать (config.x)
Обратите внимание, что использование модуля также является основой для реализации дизайна Singleton. узор по той же причине.
Каковы «лучшие практики» использования импорта в модуле?
Как правило, не используйте из импорта имени модуля *
. Это загромождает
пространство имен импортера, и линтерам намного сложнее обнаружить undefined
имена.
Импортировать модули в начало файла. Так станет понятно, какие еще модули ваш код требует и позволяет избежать вопросов о том, входит ли имя модуля в область видимости. Использование одного импорта на строку упрощает добавление и удаление импорта модуля, но при использовании нескольких операций импорта на строку используется меньше места на экране.
Рекомендуется импортировать модули в следующем порядке:
стандартных библиотечных модуля - например,
sys
,os
,getopt
,re
сторонних библиотечных модулей (все, что установлено в пакетах сайтов Python справочник) - эл.грамм. mx.DateTime, ZODB, PIL.Image и т. д.
модуля собственной разработки
Иногда необходимо переместить импорт в функцию или класс, чтобы избежать проблемы с циклическим импортом. Гордон Макмиллан говорит:
Циклический импорт подходит, если оба модуля используют форму «import
». импорта. Они терпят неудачу, когда 2-й модуль хочет вырвать имя из first («из имени импорта модуля»), а импорт - на верхнем уровне. Это потому что имена в 1-м еще недоступны, потому что первый модуль занят импортом 2-го.
В этом случае, если второй модуль используется только в одной функции, то импорт можно легко перенести в эту функцию. К моменту вызова импорта первый модуль завершит инициализацию, а второй модуль сможет выполнить свою Импортировать.
Также может потребоваться переместить импорт с верхнего уровня кода, если некоторые из модули зависят от платформы. В этом случае, возможно, даже не удастся импортировать все модули в верхней части файла. В этом случае импорт правильные модули в соответствующем программном коде - хороший вариант.
Перемещайте импорт только в локальную область, например внутри определения функции, если
необходимо решить такую проблему, как избежать циклического импорта или
пытается сократить время инициализации модуля. Эта техника
особенно полезно, если многие из импорта не нужны, в зависимости от того, как
программа выполняется. Вы также можете переместить импорт в функцию, если
модули используются только в этой функции. Обратите внимание, что при загрузке модуля
первый раз может быть дорогим из-за однократной инициализации
модуль, но загрузка модуля несколько раз практически бесплатна и стоит всего лишь
пару поисков по словарю.Даже если имя модуля вышло за рамки,
модуль, вероятно, доступен в sys.modules
.
Почему значения по умолчанию разделяются между объектами?
Этот тип ошибок обычно укусывает начинающих программистов. Рассмотрим эту функцию:
def foo (mydict = {}): # Опасность: общая ссылка на один dict для всех вызовов ... вычислить что-нибудь ... mydict [ключ] = значение вернуть mydict
При первом вызове этой функции mydict
содержит единственный элемент.В
во второй раз mydict
содержит два элемента, потому что когда начинается foo ()
при выполнении mydict
начинается с уже содержащегося в нем элемента.
Часто ожидается, что вызов функции создает новые объекты по умолчанию. значения. Это не то, что происходит. Значения по умолчанию создаются ровно один раз, когда функция определена. Если этот объект был изменен, как словарь в этом Например, последующие вызовы функции будут ссылаться на этот измененный объект.
По определению неизменяемые объекты, такие как числа, строки, кортежи и Нет
,
защищены от изменений.Изменения в изменяемых объектах, таких как словари, списки,
и экземпляры классов могут привести к путанице.
Из-за этой функции рекомендуется не использовать изменяемые
объекты как значения по умолчанию. Вместо этого используйте Нет
в качестве значения по умолчанию и
внутри функции проверьте, является ли параметр Нет
и создайте новый
список / словарь / что угодно, если есть. Например, не пишите:
а:
def foo (mydict = None): если mydict - Нет: mydict = {} # создать новый dict для локального пространства имен
Эта функция может быть полезной.Когда у вас есть функция, требующая много времени, вычислить, распространенным методом является кэширование параметров и результирующего значения каждого вызова функции, и вернуть кешированное значение, если то же значение запросил еще раз. Это называется «запоминанием» и может быть реализовано следующим образом:
# Вызывающие могут предоставить только два параметра и опционально передать _cache по ключевому слову def дорого (arg1, arg2, *, _cache = {}): если (arg1, arg2) в _cache: return _cache [(arg1, arg2)] # Рассчитать значение результат =... дорогое вычисление ... _cache [(arg1, arg2)] = result # Сохранить результат в кеше вернуть результат
Вместо значения по умолчанию можно использовать глобальную переменную, содержащую словарь. значение; это дело вкуса.
Как передать необязательные параметры или параметры ключевого слова из одной функции в другую?
Соберите аргументы, используя спецификаторы *
и **
в функциях
список параметров; это дает вам позиционные аргументы в виде кортежа и
аргументы ключевого слова как словарь.Затем вы можете передать эти аргументы, когда
вызов другой функции с использованием *
и **
:
def f (x, * args, ** kwargs): ... kwargs ['ширина'] = '14 .3c ' ... g (x, * аргументы, ** kwargs)
В чем разница между аргументами и параметрами?
Параметры определяются именами, которые появляются в определение функции, а аргументы - это значения фактически передается функции при ее вызове. Параметры определяют, какие типы аргументы, которые функция может принимать.Например, учитывая определение функции:
def func (foo, bar = None, ** kwargs): проходить
foo , bar и kwargs - параметры func
. Однако при звонке func
, например:
func (42, bar = 314, extra = somevar)
значения 42
, 314
и somevar
являются аргументами.
Почему при изменении списка «y» изменился и список «x»?
Если вы написали такой код:
>>> x = [] >>> у = х >>> у.добавить (10) >>> у [10] >>> х [10]
, вам может быть интересно, почему добавление элемента к y
изменило также x
.
Есть два фактора, которые приводят к этому результату:
Переменные - это просто имена, относящиеся к объектам. Выполнение
y = x
не дает создать копию списка - он создает новую переменнуюy
, которая ссылается на относится к тому же объектуx
. Это означает, что есть только один объект (список), и к нему относятся какx
, так иy
.Списки изменяемы, что означает, что вы можете изменять их содержимое.
После вызова append ()
содержимое изменяемого объекта имеет
изменено с []
на [10]
. Поскольку обе переменные относятся к одному и тому же
объект, используя любое имя, получает доступ к измененному значению [10]
.
Если вместо этого мы назначим неизменяемому объекту x
:
>>> x = 5 # целые числа неизменяемы >>> у = х >>> x = x + 1 # 5 не может быть изменен, здесь мы создаем новый объект >>> х 6 >>> у 5
мы видим, что в этом случае x
и y
больше не равны.Это
потому что целые числа неизменны, и когда мы делаем x = x + 1
, мы не
изменение int 5
путем увеличения его значения; вместо этого мы создаем
новый объект (int 6
) и присвоение ему значения x
(то есть изменение
объект x
относится к). После этого назначения у нас есть два объекта (int 6
и 5
) и две относящиеся к ним переменные ( x
теперь относятся к 6
, но y
по-прежнему относится к 5
).
Некоторые операции (например, y.append (10)
и y.sort ()
) изменяют
объект, тогда как внешне похожие операции (например, y = y + [10]
и sorted (y)
) создают новый объект. В целом в Python (и во всех случаях
в стандартной библиотеке) метод, изменяющий объект, вернет Нет
чтобы избежать путаницы между двумя типами операций. Итак, если вы
по ошибке напишите y.sort ()
, думая, что это даст вам отсортированную копию y
,
вместо этого вы получите Нет
, что, скорее всего, приведет к тому, что ваша программа
генерировать легко диагностируемую ошибку.
Однако есть один класс операций, в котором одна и та же операция иногда
имеет разное поведение с разными типами: расширенное задание
операторы. Например, + =
изменяет списки, но не кортежи или целые числа ( a_list
+ = [1, 2, 3]
эквивалентно a_list.extend ([1, 2, 3])
и изменяет a_list
, тогда как some_tuple + = (1, 2, 3)
и some_int + = 1
создают
новые объекты).
Другими словами:
Если у нас есть изменяемый объект (
list
,dict
,set
, и т.п.), мы можем использовать некоторые специальные операции, чтобы изменить его и все переменные которые относятся к нему, увидят изменение.Если у нас есть неизменяемый объект (
str
,int
,tuple
, и т. д.), все переменные, которые относятся к нему, всегда будут иметь одно и то же значение, но операции, которые преобразуют это значение в новое значение, всегда возвращают новое объект.
Если вы хотите знать, относятся ли две переменные к одному и тому же объекту или нет, вы можете
используйте оператор is
или встроенную функцию id ()
.
Как мне написать функцию с выходными параметрами (вызов по ссылке)?
Помните, что аргументы в Python передаются путем присваивания. С момента присвоения просто создает ссылки на объекты, нет псевдонима между именем аргумента в вызывающий и вызываемый, и, следовательно, никакого вызова по ссылке как такового. Вы можете добиться желаемый эффект несколькими способами.
Возвращая кортеж результатов:
>>> def func1 (a, b): ... a = 'new-value' # a и b - локальные имена ... b = b + 1 # назначается новым объектам ... return a, b # вернуть новые значения ... >>> x, y = 'старое значение', 99 >>> func1 (x, y) ('новое значение', 100)
Это почти всегда самое ясное решение.
С использованием глобальных переменных. Это не является потокобезопасным и не рекомендуется.
Путем передачи изменяемого (изменяемого на месте) объекта:
>>> def func2 (a): ... a [0] = 'new-value' # 'a' ссылается на изменяемый список ... a [1] = a [1] + 1 # изменяет общий объект ... >>> args = ['старое значение', 99] >>> func2 (аргументы) >>> аргументы ['новое значение', 100]
Путем передачи изменяемого словаря:
>>> def func3 (аргументы): ... args ['a'] = 'new-value' # args - изменяемый словарь ... args ['b'] = args ['b'] + 1 # изменить его на месте ... >>> args = {'a': 'старое значение', 'b': 99} >>> func3 (аргументы) >>> аргументы {'a': 'новое значение', 'b': 100}
Или объедините значения в экземпляр класса:
>>> Пространство имен класса: ... def __init __ (self, /, ** args): ... для ключа значение в args.items (): ... setattr (сам, ключ, значение) ... >>> def func4 (аргументы): ... args.a = 'new-value' # args - изменяемое пространство имен ... args.b = args.b + 1 # изменить объект на месте ... >>> args = Пространство имен (a = 'старое значение', b = 99) >>> func4 (аргументы) >>> vars (аргументы) {'a': 'новое значение', 'b': 100}
Практически никогда не бывает серьезных причин усложнять задачу.
Лучше всего вернуть кортеж, содержащий несколько результатов.
Как сделать в Python функцию высшего порядка?
У вас есть два варианта: вы можете использовать вложенные области или вы можете использовать вызываемые объекты.
Например, предположим, что вы хотите определить linear (a, b)
, который возвращает
функция f (x)
, которая вычисляет значение a * x + b
. Использование вложенных областей видимости:
def linear (a, b): def результат (x): вернуть a * x + b вернуть результат
Или используя вызываемый объект:
класс линейный: def __init __ (self, a, b): себя.a, self.b = a, b def __call __ (self, x): вернуть self.a * x + self.b
В обоих случаях
дает вызываемый объект, где налогов (10e6) == 0,3 * 10e6 + 2
.
Подход вызываемых объектов имеет тот недостаток, что он немного медленнее и приводит к немного более длинному коду. Однако обратите внимание, что набор вызываемых может передать свою подпись по наследству:
класс экспоненциальный (линейный): # __init__ унаследовано def __call __ (self, x): вернуть себя.а * (х ** сам.б)
Объект может инкапсулировать состояние для нескольких методов:
счетчик классов: значение = 0 def set (self, x): self.value = x def up (self): self.value = self.value + 1 def down (self): self.value = self.value - 1 счетчик = счетчик () inc, dec, reset = count.up, count.down, count.set
Здесь inc ()
, dec ()
и reset ()
действуют как функции, которые разделяют
та же счетная переменная.
Как мой код может узнать имя объекта?
Вообще говоря, не может, потому что у объектов на самом деле нет имен.
По сути, присвоение всегда связывает имя со значением; то же самое верно и в отношении def
и class
операторов, но в этом случае значение будет
вызываемый. Рассмотрим следующий код:
>>> класс A: ... проходить ... >>> B = A >>> a = B () >>> б = а >>> print (b) <__ main __. Объект по адресу 0x16D07CC> >>> print (а) <__ main__.Объект по адресу 0x16D07CC>
Возможно, у класса есть имя: хотя он привязан к двум именам и вызывается через имя B созданный экземпляр по-прежнему сообщается как экземпляр class A. Однако невозможно сказать, является ли имя экземпляра a или b, поскольку оба имени связаны с одним и тем же значением.
Вообще говоря, не обязательно, чтобы ваш код «знал имена» определенных ценностей. Если вы намеренно не пишете интроспективный программ, это обычно указывает на то, что изменение подхода может быть выгодный.
В comp.lang.python Фредрик Лунд однажды дал отличную аналогию в ответ на этот вопрос:
Точно так же, как вы получили имя той кошки, которую нашли у себя на крыльце: кошка (объект) сам по себе не может сказать вам свое имя, и ему все равно, поэтому единственный способ узнать, как это называется, - спросить всех своих соседей (пространства имен), если это их кот (объект)…
… .и не удивляйтесь, если вы обнаружите, что он известен под разными именами, или вообще без имени!
Что случилось с приоритетом оператора запятой?
Запятая не является оператором в Python.Рассмотрим этот сеанс:
>>> «а» в «б», «а» (Ложь, 'а')
Поскольку запятая является не оператором, а разделителем между выражениями, выше оценивается, как если бы вы ввели:
не:
То же самое верно и для различных операторов присваивания ( =
, + =
и т. Д.). Они
на самом деле не операторы, а синтаксические ограничители в операторах присваивания.
Существует ли эквивалент тернарного оператора C «?:»?
Да, есть.Синтаксис следующий:
[on_true] if [выражение] else [on_false] х, у = 50, 25 small = x, если xДо того, как этот синтаксис был представлен в Python 2.5, распространенной идиомой было использование логические операторы:
[выражение] и [on_true] или [on_false]Однако эта идиома небезопасна, поскольку может дать неверные результаты, если on_true имеет ложное логическое значение. Поэтому всегда лучше использовать форма
... if ... else ...
.Можно ли писать запутанные однострочные строки в Python?
Да. Обычно это делается путем вложения
лямбда
вЛямбда
. См. Следующие три примера, принадлежащие Ульфу Бартельту:из functools import reduce # Простые числа <1000 print (list (filter (None, map (lambda y: y * reduce (lambda x, y: x * y! = 0, map (лямбда x, y = y: y% x, диапазон (2, int (pow (y, 0.5) +1))), 1), диапазон (2,1000))))) # Первые 10 чисел Фибоначчи print (list (map (lambda x, f = lambda x, f: (f (x-1, f) + f (x-2, f)) if x> 1 else 1: f (x, f), диапазон (10)))) # Набор Мандельброта print ((lambda Ru, Ro, Iu, Io, IM, Sx, Sy: reduce (lambda x, y: x + y, map (lambda y, Iu = Iu, Io = Io, Ru = Ru, Ro = Ro, Sy = Sy, L = лямбда yc, Iu = Iu, Io = Io, Ru = Ru, Ro = Ro, i = IM, Sx = Sx, Sy = Sy: reduce (lambda x, y: x + y, map (lambda x, xc = Ru, yc = yc, Ru = Ru, Ro = Ro, i = i, Sx = Sx, F = лямбда xc, yc, x, y, k, f = lambda xc, yc, x, y, k, f: (k <= 0) или (x * x + y * y > = 4.0) или 1 + f (xc, yc, x * xy * y + xc, 2.0 * x * y + yc, k-1, f): f (xc, yc, x, y, k, f): chr ( 64 + F (Ru + x * (Ro-Ru) / Sx, yc, 0,0, i)), диапазон (Sx))): L (Iu + y * (Io-Iu) / Sy), диапазон ( Sy )))) (- 2,1, 0,7, -1,2, 1,2, 30, 80, 24)) # \ ___ ___ / \ ___ ___ / | | | __ строк на экране # V V | | ______ столбцов на экране # | | | __________ максимум «итераций» # | | _________________ диапазон по оси y # | ____________________________ диапазон по оси xНе пробуйте это дома, детки!
Что означает косая черта (/) в списке параметров функции?
Косая черта в списке аргументов функции означает, что параметры до это только позиционное.Только позиционные параметры - это параметры без внешне используемое имя. При вызове функции, которая принимает только позиционные параметры, аргументы сопоставляются с параметрами исключительно на основе их положения. Например,
divmod ()
- это функция, которая принимает только позиционные параметры. Его документация выглядит так:>>> справка (divmod) Справка по встроенной функции divmod во встроенных модулях: divmod (х, у, /) Вернуть кортеж (x // y, x% y). Инвариант: div * y + mod == x.Косая черта в конце списка параметров означает, что оба параметра только позиционный. Таким образом, вызов
divmod ()
с аргументами ключевого слова приведет к к ошибке:>>> divmod (x = 3, y = 4) Отслеживание (последний вызов последний): Файл "", строка 1, в TypeError: divmod () не принимает аргументов ключевого слова Как указать шестнадцатеричные и восьмеричные целые числа?
Чтобы указать восьмеричную цифру, перед восьмеричным значением поставьте ноль, а затем нижний или заглавная «о».Например, чтобы установить для переменной «а» восьмеричное значение «10» (8 в десятичной системе), введите:
В шестнадцатеричной системе счисления так же просто. Просто поставьте перед шестнадцатеричным числом ноль, а затем букву «x» в нижнем или верхнем регистре. Шестнадцатеричные цифры можно указывать в нижнем регистре. или в верхнем регистре. Например, в интерпретаторе Python:
>>> a = 0xa5 >>> а 165 >>> b = 0XB2 >>> б 178Почему -22 // 10 возвращает -3?
Это в первую очередь вызвано желанием, чтобы
i% j
имели тот же знак, что иj
.Если вы этого хотите, а также хотите:я == (я // j) * j + (я% j), то целочисленное деление должно вернуть пол. C также требует, чтобы это удостоверение удерживайте, а затем компиляторы, которые усекают
i // j
, должны заставитьi% j
иметь тот же знак, что иi
.Существует несколько реальных вариантов использования
i% j
, когда значениеj
отрицательное. Когдаj
положительный, их много, и практически во всех из них он более полезен дляi% j
будет> = 0
.Если часы показывают 10 сейчас, что они говорят 200 часов тому назад?-190% 12 == 2
полезно;-190% 12 == -10
- это ошибка, ожидающая кусать.Как преобразовать строку в число?
Для целых чисел используйте встроенный конструктор типа
int ()
, напримеринтервал ('144') == 144
. Точно так жеfloat ()
преобразуется в числа с плавающей запятой, напримерс плавающей запятой ('144') == 144.0
.По умолчанию они интерпретируют число как десятичное, так что
int ('0144') == 144
верно, аint ('0x144')
вызываетValueError
.int (строка, base)
принимает базу для преобразования в качестве второго необязательного аргумента, поэтомуint ( '0x144', 16) == 324
. Если база указана как 0, число интерпретируется используя правила Python: ведущий «0o» указывает на восьмеричное, а «0x» - на шестнадцатеричный номер.Не используйте встроенную функцию
eval ()
, если все, что вам нужно, это преобразовать строки в числа.eval ()
будет значительно медленнее и представляет угроза безопасности: кто-то может передать вам выражение Python, которое может иметь нежелательные побочные эффекты.Например, кто-то мог пройти__import __ ('os'). System ("rm -rf $ HOME")
, который сотрет ваш дом каталог.
eval ()
также имеет эффект интерпретации чисел как выражений Python, так что, например,eval ('09 ')
выдает синтаксическую ошибку, потому что Python не позволяет ведущий «0» в десятичном числе (кроме «0»).Как изменить строку на месте?
Вы не можете, потому что строки неизменяемы. В большинстве ситуаций вам следует просто создайте новую строку из различных частей, которые вы хотите собрать это из.Однако, если вам нужен объект с возможностью изменения на месте данные в Юникоде, попробуйте использовать объект
io.StringIO
или массивмодуль:
>>> import io >>> s = "Привет, мир" >>> sio = io.StringIO (s) >>> sio.getvalue () 'Привет мир' >>> sio.seek (7) 7 >>> sio.write («туда!») 6 >>> sio.getvalue () 'Привет!' >>> импортный массив >>> a = array.array ('и', s) >>> print (а) array ('u', 'Привет, мир') >>> а [0] = 'у' >>> print (а) array ('u', 'yello, world') >>> а.туникод () 'yello, world'Как использовать строки для вызова функций / методов?
Существуют разные техники.
Лучше всего использовать словарь, который отображает строки в функции. Основной Преимущество этого метода в том, что строки не должны совпадать с именами функций. Это также основной метод, используемый для имитации кейса. построить:
def a (): проходить def b (): проходить dispatch = {'go': a, 'stop': b} # Обратите внимание на отсутствие скобок для функций dispatch [get_input ()] () # Обратите внимание на конечные скобки для вызова функцииИспользуйте встроенную функцию
getattr ()
:import foo getattr (фу, 'бар') ()Обратите внимание, что
getattr ()
работает с любым объектом, включая классы, класс экземпляры, модули и так далее.Используется в нескольких местах стандартной библиотеки, например:
класс Foo: def do_foo (сам): ... def do_bar (сам): ... f = getattr (foo_instance, 'do_' + имя операции) f ()Используйте
locals ()
для разрешения имени функции:def myFunc (): print ("привет") fname = "myFunc" f = locals () [fname] f ()Есть ли аналог Perl chomp () для удаления завершающих символов новой строки из строк?
Вы можете использовать
S.rstrip ("\ r \ n")
, чтобы удалить все вхождения любой строки терминатор с конца строкиS
без удаления других завершающих пробел. Если строкаS
представляет более одной строки, с несколькими пустые строки в конце, терминаторы для всех пустых строк будут удалено:>>> lines = ("строка 1 \ r \ n" ... "\ r \ n" ... "\ r \ n") >>> lines.rstrip ("\ n \ r") 'линия 1 'Так как это обычно требуется только при чтении текста по одной строке за раз, используйте
С.rstrip ()
этот способ работает хорошо.Есть ли эквивалент scanf () или sscanf ()?
Не как таковой.
Для простого синтаксического анализа ввода самый простой подход - обычно разбить строку на слова, разделенные пробелами, с использованием метода
split ()
строковых объектов а затем преобразовать десятичные строки в числовые значения с помощьюint ()
илипоплавок ()
.split ()
поддерживает дополнительный полезный параметр «sep». если в строке используется что-то другое, кроме пробела, в качестве разделителя.Для более сложного анализа ввода более эффективны регулярные выражения. чем C
sscanf ()
и лучше подходит для этой задачи.Как преобразовать кортежи в списки?
Конструктор типа
tuple (seq)
преобразует любую последовательность (фактически, любую iterable) в кортеж с теми же элементами в том же порядке.Например,
кортеж ([1, 2, 3])
дает(1, 2, 3)
икортеж ('abc')
дает('a', 'b', 'c')
.Если аргумент является кортежем, он не делает копию но возвращает тот же объект, поэтому вызовtuple ()
дешево, когда вы не уверены, что объект уже является кортежем.Конструктор типа
list (seq)
преобразует любую последовательность или итерацию в список с теми же предметами в том же порядке. Например,list ((1, 2, 3))
дает[1, 2, 3]
иlist ('abc')
дает['a', 'b', 'c']
. Если аргумент является списком, он делает копию точно так же, какseq [:]
.Что такое отрицательный индекс?
последовательности Python индексируются положительными и отрицательными числами. Для положительные числа 0 - это первый индекс, 1 - второй индекс и так далее. Для отрицательные индексы -1 - последний индекс, -2 - предпоследний (предпоследний) index и так далее. Думайте о
seq [-n]
как о том же, что и оseq [len (seq) -n]
.Использование отрицательных индексов может быть очень удобным. Например,
S [: - 1]
- это все строка, за исключением ее последнего символа, который полезен для удаления завершающий символ новой строки из строки.Как удалить дубликаты из списка?
См. В Поваренной книге Python подробное обсуждение многих способов сделать это:
Если вы не против переупорядочить список, отсортируйте его, а затем отсканируйте с конца список, удаляя дубликаты по ходу:
, если мой список: mylist.sort () last = mylist [-1] для i в диапазоне (len (mylist) -2, -1, -1): if last == mylist [i]: del mylist [я] еще: last = mylist [i]Если все элементы списка могут использоваться как ключи набора (т.е. они все hashable) это часто быстрее
mylist = список (набор (мой список))Преобразует список в набор, тем самым удаляя дубликаты, а затем обратно в список.
Как удалить несколько элементов из списка
Как и при удалении дубликатов, явная итерация в обратном порядке с условие удаления - одна из возможностей. Однако так проще и быстрее использовать замену среза с неявной или явной итерацией вперед. Вот три варианта.:
mylist [:] = фильтр (keep_function, mylist) mylist [:] = (x вместо x в моем списке, если keep_condition) mylist [:] = [x вместо x в моем списке, если keep_condition]Понимание списка может быть самым быстрым.
Как создать массив в Python?
Используйте список:
["это", 1, "есть", "an", "массив"]Списки эквивалентны массивам C или Pascal по своей временной сложности; основной разница в том, что список Python может содержать объекты самых разных типов.
Модуль
array
также предоставляет методы для создания массивов фиксированных типов. с компактными представлениями, но они индексируются медленнее, чем списки. Также обратите внимание, что числовые расширения и другие определяют структуры, подобные массиву, с также различные характеристики.Чтобы получить связанные списки в стиле Lisp, вы можете эмулировать cons-ячейки с помощью кортежей:
lisp_list = ("нравится", ("это", ("пример", Нет)))Если требуется изменчивость, вы можете использовать списки вместо кортежей.Здесь аналог машины lisp -
lisp_list [0]
и аналог cdr -lisp_list [1]
. Делайте это только в том случае, если уверены, что вам это действительно нужно, потому что это обычно намного медленнее, чем при использовании списков Python.Как создать многомерный список?
Вы, наверное, пробовали создать многомерный массив вроде этого:
Выглядит правильно, если распечатать:
>>> А [[Нет, Нет], [Нет, Нет], [Нет, Нет]]Но когда вы присваиваете значение, оно появляется в нескольких местах:
>>> A [0] [0] = 5 >>> А [[5, Нет], [5, Нет], [5, Нет]]Причина в том, что репликация списка с
*
не создает копии, а только создает ссылки на существующие объекты.* 3
создает список содержащий 3 ссылки на один и тот же список длиной два. Изменения в одной строке будут показывать во всех строках, что почти наверняка не то, что вам нужно.Предлагаемый подход состоит в том, чтобы сначала создать список желаемой длины, а затем заполните каждый элемент вновь созданным списком:
A = [Нет] * 3 для i в диапазоне (3): A [i] = [Нет] * 2Это генерирует список, содержащий 3 разных списка длиной два. Вы также можете используйте понимание списка:
ш, в = 2, 3 A = [[Нет] * w для i в диапазоне (h)]Или вы можете использовать расширение, которое предоставляет тип данных матрица; NumPy - самый известный.
Почему a_tuple [i] + = [‘item’] вызывает исключение, когда добавление работает?
Это связано с тем, что расширенное присваивание операторы присваивания операторов, и разница между изменяемым и неизменяемые объекты в Python.
Это обсуждение применяется в целом, когда операторы расширенного присваивания применяется к элементам кортежа, указывающим на изменяемые объекты, но мы будем использовать список
и
+ =
в качестве нашего образца.Если вы написали:
>>> a_tuple = (1, 2) >>> a_tuple [0] + = 1 Отслеживание (последний вызов последний): ... TypeError: объект 'tuple' не поддерживает назначение элементовПричина исключения должна быть ясна сразу:
1
добавляется в объектa_tuple [0]
указывает на (1
), создавая объект результата,2
, но когда мы пытаемся присвоить результат вычисления2
элементу0
кортежа, мы получаем ошибку, потому что не можем изменить элемент кортеж указывает на.Под обложками то, что делает этот оператор расширенного присваивания, примерно так:
>>> результат = набор_ [0] + 1 >>> a_tuple [0] = результат Отслеживание (последний вызов последний): ... TypeError: объект 'tuple' не поддерживает назначение элементовОшибка - это присваивающая часть операции, поскольку кортеж неизменен.
Когда вы пишете что-то вроде:
>>> a_tuple = (['фу'], 'бар') >>> a_tuple [0] + = ['элемент'] Отслеживание (последний вызов последний): ... TypeError: объект 'tuple' не поддерживает назначение элементовИсключение несколько более удивительно, и еще более удивительно то, что что даже несмотря на то, что произошла ошибка, приложение работало:
>>> a_tuple [0] ['фу', 'элемент']Чтобы понять, почему это происходит, вам нужно знать, что (а) если объект реализует
__iadd__
магический метод, он вызывается при расширенном назначении+ =
выполняется, и его возвращаемое значение используется в операторе присваивания; и (b) для списков__iadd__
эквивалентно вызову, расширьте
в списке. и возврат списка.Вот почему мы говорим, что для списков+ =
является «Стенография» дляlist.extend
:>>> a_list = [] >>> a_list + = [1] >>> a_list [1]Это эквивалент:
>>> результат = a_list .__ iadd __ ([1]) >>> a_list = результатОбъект, на который указывает a_list, был изменен, и указатель на Мутировавший объект снова присваивается
a_list
. Конечный результат назначение - это не операция, поскольку это указатель на тот же объект, что иa_list
ранее указывал на, но присвоение все еще происходит.Таким образом, в нашем примере с кортежем происходящее эквивалентно:
>>> result = a_tuple [0] .__ iadd __ (['элемент']) >>> a_tuple [0] = результат Отслеживание (последний вызов последний): ... TypeError: объект 'tuple' не поддерживает назначение элементов
__iadd__
преуспевает, и, таким образом, список расширяется, но даже еслирезультат
указывает на тот же объект, на который уже указываетa_tuple [0]
, это последнее присвоение по-прежнему приводит к ошибке, потому что кортежи неизменяемы.Как отсортировать один список по значениям из другого списка?
Объедините их в итератор кортежей, отсортируйте полученный список, а затем выберите из нужного вам элемента.
>>> list1 = ["что", "я", "сортировка", "по"] >>> list2 = ["что-то", "еще", "в", "сортировать"] >>> пары = zip (список1, список2) >>> пары = отсортированные (пары) >>> пары [("Я", "еще"), ("по", "сортировать"), ("сортировка", "по"), ("что", "что-то")] >>> result = [x [1] для x в парах] >>> результат ['else', 'sort', 'to', 'что-то']Что такое класс?
Класс - это особый тип объекта, созданный при выполнении оператора класса.Объекты класса используются в качестве шаблонов для создания экземпляров объектов, которые воплощают как данные (атрибуты), так и код (методы), относящиеся к типу данных.
Класс может быть основан на одном или нескольких других классах, называемых его базовым классом (ами). Это затем наследует атрибуты и методы своих базовых классов. Это позволяет объектная модель, которая будет последовательно уточняться путем наследования. У вас может быть общий класс
Mailbox
, который предоставляет базовые методы доступа для почтового ящика, и подклассы, такие какMboxMailbox
,MaildirMailbox
,OutlookMailbox
которые обрабатывают различные специфические форматы почтовых ящиков.Что такое метод?
Метод - это функция некоторого объекта
x
, который вы обычно вызываете какx.name (аргументы ...)
. Методы определяются как функции внутри класса определение:класс C: def meth (self, arg): вернуть arg * 2 + self.attributeКак мне проверить, является ли объект экземпляром данного класса или его подкласса?
Используйте встроенную функцию
isinstance (obj, cls)
. Вы можете проверить, есть ли у объекта является экземпляром любого из нескольких классов, предоставляя кортеж вместо одноклассник, эл.грамм.isinstance (obj, (class1, class2, ...))
, а также может проверьте, является ли объект одним из встроенных типов Python, напримерisinstance (obj, str)
илиisinstance (obj, (int, float, complex))
.Обратите внимание, что
isinstance ()
также проверяет виртуальное наследование от абстрактный базовый класс. Итак, тест вернетTrue
для зарегистрированный класс, даже если он не унаследовал прямо или косвенно. К тест на «истинное наследование», просканируйте MRO класса:из коллекций.abc import Mapping класс P: проходить класс C (P): проходить Mapping.register (P)>>> c = C () >>> isinstance (c, C) # прямой Правда >>> isinstance (c, P) # косвенный Правда >>> isinstance (c, Mapping) # виртуальный Правда # Актуальная цепочка наследования >>> введите (c) .__ mro__ (<класс 'C'>, <класс 'P'>, <класс 'объект'>) # Тест на "истинное наследование" >>> Отображение в типе (c) .__ mro__ ЛожьОбратите внимание, что большинство программ не используют
isinstance ()
в пользовательских классах. очень часто.Если вы сами разрабатываете классы, более подходящий объектно-ориентированный стиль заключается в определении методов в классах, которые инкапсулируют конкретное поведение, вместо проверки класса объекта и выполнения разные вещи в зависимости от того, к какому классу это относится. Например, если у вас есть функция что-то делает:def поиск (объект): если isinstance (obj, Mailbox): ... # код для поиска в почтовом ящике elif isinstance (объект, документ): ... # код для поиска в документе Элиф...Лучшим подходом является определение метода
search ()
для всех классов и просто позвони:класс Почтовый ящик: def поиск (сам): ... # код для поиска в почтовом ящике класс Document: def поиск (сам): ... # код для поиска в документе obj.search ()Что такое делегирование?
Делегирование - это объектно-ориентированный метод (также называемый шаблоном проектирования). Допустим, у вас есть объект размером
Программистыx
, и вы хотите изменить поведение только одного его методов.Вы можете создать новый класс, который предоставляет новую реализацию метода, который вы хотите изменить, и делегирует все остальные методы соответствующий методx
.Python могут легко реализовать делегирование. Например, следующие class реализует класс, который ведет себя как файл, но преобразует все записанные данные в верхний регистр:
класс UpperOut: def __init __ (self, outfile): self._outfile = outfile def write (self, s): себя._outfile.write (s.upper ()) def __getattr __ (я, имя): вернуть getattr (self._outfile, имя)Здесь класс
UpperOut
переопределяет методwrite ()
для преобразования строку аргумента в верхний регистр перед вызовом базовогоself._outfile.write ()
метод. Все остальные методы делегированы базовый объектself._outfile
. Делегирование осуществляется через__getattr__
метод; обратитесь к справочнику по языку для получения дополнительной информации об управлении доступом к атрибутам.Обратите внимание, что в более общих случаях делегирование может стать сложнее. Когда атрибуты должен быть установлен, а также получен, класс должен определять
__setattr __ ()
метод тоже, и он должен делать это осторожно. Базовая реализация__setattr __ ()
примерно эквивалентно следующему:класс X: ... def __setattr __ (я, имя, значение): self .__ dict __ [имя] = значение ...Большинство реализаций
__setattr __ ()
должны модифицироватьself.__dict__
хранить локальное состояние для себя, не вызывая бесконечной рекурсии.Как мне вызвать метод, определенный в базовом классе, из производного класса, который его переопределяет?
Используйте встроенную функцию
super ()
:класс Derived (Базовый): def meth (сам): super (производное, собственное) .meth ()Для версии до 3.0 вы можете использовать классические классы: Для класса определение, такое как
class Derived (Base): ...
вы можете вызвать методmeth ()
определяется вBase
(или одном из базовых классовBase
) какBase.мет (я, аргументы ...)
. ЗдесьBase.meth
- это несвязанный метод, поэтому вам нужно предоставьте аргументself
.Как мне организовать свой код, чтобы упростить изменение базового класса?
Вы можете назначить базовый класс псевдониму и унаследовать его от псевдонима. Тогда все необходимо изменить значение, присвоенное псевдониму. Между прочим, этот трюк также удобен, если вы хотите принимать решения динамически (например, в зависимости от наличия ресурсов), какой базовый класс использовать.Пример:
класс Base: ... BaseAlias = База класс Derived (BaseAlias): ...Как мне создать данные статического класса и методы статического класса?
Поддерживаются как статические данные, так и статические методы (в смысле C ++ или Java). в Python.
Для статических данных просто определите атрибут класса. Чтобы присвоить новое значение атрибут, вы должны явно использовать имя класса в назначении:
класс C: count = 0 # количество раз C.__init__ называется def __init __ (сам): C.count = C.count + 1 def getcount (self): вернуть C.count # или вернуть self.count
c.count
также относится кC.count
для любогоc
, так чтоisinstance (c, C)
удерживается, если не отменено самимc
или каким-либо классом базового класса путь поиска отc .__ class__
доC
.Осторожно: в методе языка C присваивание типа
self.count = 42
создает новый и несвязанный экземпляр с именем «count» в собственном dictself. Переплет имя статических данных класса всегда должно указывать класс, будь то внутри метода или нет:
Возможны статические методы:
класс C: @staticmethod def static (arg1, arg2, arg3): # Нет параметра "self"! ...Однако гораздо более простой способ получить эффект статического метода - это через простую функцию уровня модуля:
def getcount (): вернуть C.считатьЕсли ваш код структурирован так, чтобы определить один класс (или тесно связанный класс иерархия) на модуль, это обеспечивает желаемую инкапсуляцию.
Как я могу перегрузить конструкторы (или методы) в Python?
Этот ответ действительно применим ко всем методам, но обычно возникает вопрос сначала в контексте конструкторов.
В C ++ вы должны написать
класс C { C () {cout << "Нет аргументов \ n"; } C (int i) {cout << "Аргумент:" << i << "\ n"; } }В Python вам нужно написать единственный конструктор, который ловит все случаи, используя аргументы по умолчанию.Например:
класс C: def __init __ (self, i = None): если я Нет: print ("Без аргументов") еще: print ("Аргумент равен", i)Это не полностью эквивалентно, но на практике достаточно близко.
Вы также можете попробовать список аргументов переменной длины, например
def __init __ (self, * args): ...Тот же подход работает для всех определений методов.
Я пытаюсь использовать __spam и получаю сообщение об ошибке _SomeClassName__spam.
Имена переменных с двойным подчеркиванием в начале «искажены» для упрощения но эффективный способ определения частных переменных класса. Любой идентификатор формы
__spam
(минимум два символа подчеркивания в начале и не более одного символа подчеркивания в конце) текстуально заменяется на_classname__spam
, гдеимя класса
- это имя текущего класса без начальных подчеркиваний.Это не гарантирует конфиденциальности: посторонний пользователь по-прежнему может преднамеренно получить доступ атрибут «_classname__spam», а частные значения видны в объектах
__dict__
.Многие программисты Python никогда не утруждают себя использованием закрытых переменных. имена вообще.Мой класс определяет __del__, но он не вызывается, когда я удаляю объект.
Для этого есть несколько возможных причин.
Оператор del не обязательно вызывает
__del __ ()
- это просто уменьшает счетчик ссылок объекта, и если он достигает нуля__del __ () вызывается
.Если ваши структуры данных содержат циклические ссылки (например, дерево, в котором каждый дочерний элемент имеет родительская ссылка, и у каждого родителя есть список дочерних элементов) количество ссылок никогда не вернется к нулю.Время от времени Python запускает алгоритм для обнаружения таких циклов, но сборщик мусора может запускаться через некоторое время после последнего ссылка на вашу структуру данных исчезает, поэтому ваш метод
__del __ ()
может быть позвонили в неудобное и случайное время. Это неудобно, если вы пытаетесь воспроизвести проблему. Хуже того, порядок, в котором объект__del __ ()
методы выполняются произвольно. Вы можете запуститьgc.collect ()
, чтобы коллекции, но - это патологических случаев, когда предметы никогда не будут собраны.Несмотря на сборщик циклов, все же неплохо определить явный
close ()
для объектов, которые будут вызываться всякий раз, когда вы с ними закончите. В Затем методclose ()
может удалить атрибуты, относящиеся к подобъектам. Не вызовите__del __ ()
напрямую -__del __ ()
должен вызватьclose ()
иclose ()
должен убедиться, что он может вызываться более одного раза для одного и того же объект.Другой способ избежать циклических ссылок - использовать модуль
weakref
, что позволяет указывать на объекты без увеличения их счетчика ссылок.Например, древовидные структуры данных должны использовать слабые ссылки для своих родительских и ссылки на братьев и сестер (если они им нужны!).Наконец, если ваш метод
__del __ ()
вызывает исключение, предупреждающее сообщение печатается наsys.stderr
.Почему результат
id ()
не является уникальным?Встроенная функция
id ()
возвращает целое число, которое гарантированно будет уникальным в течение время жизни объекта. Поскольку в CPython это память объекта адреса, часто бывает, что после удаления объекта из памяти следующий только что созданный объект размещается в той же позиции в памяти.Этот иллюстрируется этим примером:>>> id (1000) 132 >>> id (2000) 132Два идентификатора принадлежат разным целочисленным объектам, созданным ранее, и удаляется сразу после выполнения вызова
id ()
. Чтобы убедиться, что объекты, идентификатор которых вы хотите изучить, все еще живы, создайте еще одну ссылку до объекта:>>> а = 1000; b = 2000 >>> id (а) 132 >>> id (b) 138
Когда я могу положиться на тесты идентификации с оператором
is ?Оператор
is
проверяет идентичность объекта.Тестa is b
is эквивалентid (a) == id (b)
.Самым важным свойством проверки идентичности является то, что объект всегда идентично самому себе,
a - это
, всегда возвращаетTrue
. Идентификационные тесты обычно быстрее, чем тесты на равенство. И в отличие от тестов на равенство, тесты идентичности гарантированно возвращают логическое значениеTrue
илиFalse
.Тем не менее, проверки идентичности могут быть заменены проверками на равенство только , когда идентичность объекта гарантируется.Как правило, есть три обстоятельства, когда личность гарантирована:
1) Назначения создают новые имена, но не изменяют идентичность объекта. После присвоение
новый = старый
, гарантируется, что новый- старый
.2) Помещение объекта в контейнер, в котором хранятся ссылки на объекты, не изменить идентичность объекта. После присвоения списка
s [0] = x
, это Гарантировано, чтос [0] равно x
.3) Если объект является одиночным, это означает, что только один экземпляр этого объекта может существовать.После присвоений
a = Нет
иb = Нет
, это Гарантировано, чтоa - это b
, потому чтоNone
является одноэлементным.В большинстве других обстоятельств тесты идентичности нецелесообразны, а тесты на равенство являются предпочтительными. В частности, не следует использовать тесты личности для проверки такие константы, как
int
иstr
, которые не гарантируются одиночные:>>> а = 1000 >>> b = 500 >>> c = b + 500 >>> а есть с Ложь >>> a = 'Python' >>> b = 'Py' >>> c = b + 'тон' >>> а есть с ЛожьАналогичным образом, новые экземпляры изменяемых контейнеров никогда не идентичны:
>>> a = [] >>> b = [] >>> а это б ЛожьВ коде стандартной библиотеки вы увидите несколько общих шаблонов для правильно используя тесты личности:
1) В соответствии с рекомендациями PEP 8 , проверка личности является предпочтительным способом проверки для
нет
.Это читается как простой английский в коде и позволяет избежать путаницы с другие объекты, которые могут иметь логические значения, которые оцениваются как ложные.2) Обнаружение необязательных аргументов может быть затруднено, если
Нет
является допустимым входом значение. В таких ситуациях вы можете создать одноэлементный дозорный объект. гарантированно отличаться от других объектов. Например, вот как реализовать метод, который ведет себя какdict.pop ()
:_sentinel = объект () def pop (self, key, default = _sentinel): если ввести self: значение = сам [ключ] дель сам [ключ] возвращаемое значение если по умолчанию _sentinel: поднять KeyError (ключ) вернуть по умолчанию3) В реализациях контейнеров иногда требуется дополнять тесты на равенство с помощью тесты личности.Это предотвращает путаницу кода такими объектами, как
float ('NaN')
, которые не равны сами себе.Например, вот реализация
collections.abc.Sequence .__ содержит __ ()
:def __contains __ (self, value): для v в себе: если v - значение или v == значение: вернуть True вернуть ложьКак создать файл .pyc?
Когда модуль импортируется впервые (или когда исходный файл изменено с момента создания текущего скомпилированного файла) a
.pyc
файл, содержащий скомпилированный код должен быть создан в подкаталоге__pycache__
каталога каталог, содержащий файл.py
. Файл.pyc
будет иметь имя файла, которое начинается с того же имени, что и файл.py
, и заканчивается на.pyc
, со средним компонентом, который зависит от конкретногоpython
двоичный файл, который его создал. (Подробнее см. PEP 3147 .)Одна из причин, по которой файл
.pyc
не может быть создан, - это проблема с разрешениями. с каталогом, содержащим исходный файл, что означает, что__pycache__
подкаталог не может быть создан.Это может произойти, например, если вы разрабатываете как один пользователь, но запускается от имени другого, например, если вы тестируете с помощью веб-сервера.Если не установлена переменная среды
PYTHONDONTWRITEBYTECODE
, создание файла .pyc происходит автоматически, если вы импортируете модуль и Python имеет возможность (разрешения, свободное пространство и т. д.) для создания__pycache__
подкаталог и запишите скомпилированный модуль в этот подкаталог.Запуск Python в скрипте верхнего уровня не считается импортом и не
.pyc
будет создан. Например, если у вас есть модуль верхнего уровняfoo.py
, который импортирует другой модульxyz.py
, когда вы запускаетеfoo
(by набравpython foo.py
в качестве команды оболочки), будет создан.pyc
дляxyz
, потому чтоxyz
импортирован, но файл.pyc
не будет создан дляfoo
, посколькуfoo.py
не импортируется.Если вам нужно создать файл
.pyc
дляfoo
, то есть создать.pyc
для модуля, который не импортирован - вы можете, используяpy_compile
икомпилируют все модули
.Модуль
py_compile
может вручную скомпилировать любой модуль. Один из способов - использовать функцияcompile ()
в этом модуле интерактивно:>>> импортировать py_compile >>> py_compile.compile ('foo.py')Это запишет
.pyc
в подкаталог__pycache__
в том же расположение какfoo.py
(или вы можете переопределить это с помощью необязательного параметра, файл
).Вы также можете автоматически компилировать все файлы в каталоге или каталогах, используя модуль
compileall
. Вы можете сделать это из командной строки, запустивcompileall.py
и указание пути к каталогу, содержащему файлы Python для компиляции:Как мне узнать текущее имя модуля?
Модуль может узнать свое собственное имя модуля, посмотрев на предопределенный глобальный переменная
__name__
.Если это значение'__main__'
, программа работает как скрипт. Многие модули, которые обычно используются, также импортируя их предоставить интерфейс командной строки или самопроверку и выполнять только этот код после проверки__name__
:def main (): print ('Выполняется тест ...') ... если __name__ == '__main__': основной()Как я могу иметь модули, которые взаимно импортируют друг друга?
Предположим, у вас есть следующие модули:
foo.py:
из бара импорта bar_var foo_var = 1бар.py:
из foo import foo_var bar_var = 2Проблема в том, что интерпретатор выполнит следующие действия:
основной импорт foo
Созданы пустые глобальные объекты для foo
foo компилируется и начинает выполнение
foo импорт бар
Созданы пустые глобалы для бара
bar компилируется и начинает выполняться
bar импортирует foo (что невозможно, поскольку уже существует модуль с именем foo)
бар.foo_var = foo.foo_var
Последний шаг завершился неудачно, потому что Python еще не завершил интерпретацию
foo
и глобальный словарь символов дляfoo
все еще пуст.То же самое происходит, когда вы используете
import foo
, а затем пытаетесь получить доступfoo.foo_var
в глобальном коде.Есть (как минимум) три возможных решения этой проблемы.
Гвидо ван Россум рекомендует избегать любого использования
из
, г. и размещение всего кода внутри функций. Инициализации глобальных переменных и переменные класса должны использовать только константы или встроенные функции. Это означает все из импортированного модуля обозначается какimport... <модуль>. <имя>
.Джим Роскинд предлагает выполнить шаги в следующем порядке в каждом модуле:
экспорта (глобальные объекты, функции и классы, которым не требуется импортированная база классов)
импорт
выпискиактивный код (включая глобальные переменные, которые инициализируются из импортированных значений).
ван Россуму не очень нравится такой подход, потому что импорт появляется в странное место, но оно работает.
Маттиас Урликс рекомендует реструктурировать код так, чтобы рекурсивный импорт в первую очередь не нужно.
Эти решения не исключают друг друга.
Когда я редактирую импортированный модуль и повторно импортирую его, изменения не отображаются. Почему это происходит?
Из соображений эффективности и согласованности Python только читает модуль файл при первом импорте модуля.Если этого не произошло, в программе состоящий из множества модулей, каждый из которых импортирует один и тот же базовый модуль, базовый модуль будет анализироваться и повторно анализироваться много раз. Чтобы заставить перечитать изменен модуль, сделайте так:
импорт importlib импортировать имя мода importlib.reload (имя мода)Предупреждение: этот метод не на 100% надежен. В частности, модули содержащие утверждения типа
из имени мода import some_objectsпродолжит работу со старой версией импортированных объектов.Если модуль содержит определения классов, существующие экземпляры классов будут , а не . обновлен для использования нового определения класса. Это может привести к следующему парадоксальное поведение:
>>> импорт importlib >>> import cls >>> c = cls.C () # Создать экземпляр C >>> importlib.reload (cls) <модуль cls из cls.py> >>> isinstance (c, cls.C) # isinstance is false?!? ЛожьСуть проблемы станет ясной, если вы распечатаете «идентичность» класс объектов:
>>> шестнадцатеричный (id (c.__класс__)) '0x7352a0' >>> шестнадцатеричный (идентификатор (cls.C)) '0x4198d0'Опасные вещества и опасные грузы
На вашем рабочем месте могут использоваться опасные вещества и опасные грузы. Опасными веществами могут быть предметы, которые вы видите каждый день, например, краска, клей, чистящая жидкость и порошки.
Опасные грузы могут быть коррозионными, легковоспламеняющимися, взрывоопасными, самовоспламеняющимися, токсичными, окисляющими или реагирующими с водой. Они должны быть обозначены на рабочем месте (и при транспортировке) разноцветными «ромбовидными» символами.
Ключевой момент: Опасным веществом может быть любое вещество, твердое, жидкое или газообразное, которое может нанести вред вашему здоровью.
Опасные вещества классифицируются на основе их потенциального воздействия на здоровье, будь то острое (немедленное) или хроническое (долгосрочное).
Опасные грузы классифицируются на основе непосредственного физического или химического воздействия, такого как пожар, взрыв, коррозия и отравление. Несчастный случай с опасными грузами может нанести серьезный ущерб имуществу или окружающей среде.
Вред для здоровья может возникнуть внезапно (острый), например, головокружение, тошнота и зуд в глазах или на коже; или это может происходить постепенно в течение многих лет (хроническое), например, дерматит или рак. Некоторые люди могут быть более восприимчивыми, чем другие.
Мы используем опасные вещества и опасные грузы почти каждый день нашей жизни. Это может быть антисептик для пореза, краска для стен или чистящее средство для ванной. Хотя они могут показаться безобидными, даже эти обычные вещи могут вызвать у вас серьезное заболевание, если их не использовать должным образом.
Ключевой момент : Ваш работодатель несет ответственность за обеспечение безопасных рабочих процедур при обращении с опасными веществами и опасными грузами, а также за предоставление информации, обучение и контроль. Обработка первой помощи при обращении с опасными веществами и опасными грузами должна быть частью вашего обучения.
Паспорт безопасности материала
Паспорт безопасности материала (MSDS) предоставляет подробную информацию об опасном веществе или опасном грузе. Он дает больше информации, чем вы найдете на этикетке.Производители и поставщики опасных веществ и опасных товаров по закону обязаны предоставлять вашему работодателю паспорта безопасности материалов (MSDS) по запросу.
Важно, чтобы опасные вещества и опасные грузы на рабочих местах использовались строго в соответствии с письменными инструкциями производителя или поставщика. Любые меры контроля рисков, указанные в паспорте безопасности материалов и процедурах, разработанных на рабочем месте, также должны строго соблюдаться.
Помните:
- Соблюдайте безопасные рабочие процедуры
- Всегда используйте подходящие средства индивидуальной защиты и одежду, предоставленные вашим работодателем
- Не ешьте, не пейте и не курите во время работы с опасными веществами или опасными грузами
- Не храните пищу или пить рядом с веществами
- Мойте руки, лицо и другие открытые участки водой с мылом перед тем, как сходить в туалет, есть и пить
- Прочтите паспорт безопасности материалов перед использованием любого опасного вещества.Если паспорт безопасности материала отсутствует, попросите своего работодателя или руководителя получить один
Задания
Учащиеся могут выполнить следующие задания по работе с опасными веществами и опасными грузами:
Шаблон глобального объекта
Вердикт
Как и несколько других языков сценариев, Python анализирует внешний уровень каждого модуля как обычный код. Операторы присваивания без отступа, выражения, и даже циклы и условные выражения будет выполняться при импорте модуля.Это прекрасная возможность для дополнения классов и функций модуля с константами и структурами данных, которые будут полезны вызывающим абонентам - но также предлагает опасные соблазны: изменяемые глобальные объекты могут привести к связыванию удаленного кода, а операции ввода-вывода приводят к затратам времени импорта и побочным эффектам.
Каждый модуль Python представляет собой отдельное пространство имен. Такой модуль, как
json
, может предлагать функциюload ()
. без конфликта, замены или перезаписи совершенно другая функциязагружает ()
определено в модулеpickle
.Отдельные пространства имен имеют решающее значение для обеспечения управляемости языка программирования. Если бы модули Python не были отдельными пространствами имен, вы не сможете читать или писать код Python сосредоточив свое внимание на модуле перед вами - строка кода может использовать или случайно конфликтовать с имя, определенное где-нибудь еще в Стандартной библиотеке или сторонний модуль, который вы установили. Обновление стороннего модуля может нарушить работу всей вашей программы если в новой версии определен новый глобал, конфликтующий с вашим.Программисты, которые вынуждены писать код на языке без пространств имен скоро обнаружат, что они украшают мировые имена с префиксами, суффиксами и лишними знаками препинания в отчаянной гонке, чтобы удержать их от конфликта.
Хотя каждая функция и класс, конечно же, объект - в Python все является объектом - шаблон Module Global более конкретно относится к обычным экземплярам объекта которым присвоены имена на глобальном уровне модуля.
Два шаблона используют глобальные модули но достаточно важны, чтобы оправдать их собственные статьи:
- Методы предварительной привязки генерируются, когда модуль строит объект а затем назначает один или несколько связанных методов объекта к именам на глобальном уровне модуля.Имена можно использовать для вызова методов позже. без необходимости искать сам объект.
- В то время как объект-охранник не обязательно находиться в глобальном пространстве имен модуля - некоторые дозорные объекты определены как атрибуты класса, в то время как другие являются частными и живут внутри закрытия - много часовых, как в Стандартной библиотеке, так и за ее пределами, определены и доступны как глобальные объекты модуля.
В этой статье будут рассмотрены некоторые другие распространенные случаи.
Постоянный узор
Модуличасто присваивают полезные числа, строки и другие значения. к именам в их глобальной области видимости.Стандартная библиотека включает в себя множество таких заданий, из которого мы можем взять несколько примеров.
января = 1 # calendar.py ПРЕДУПРЕЖДЕНИЕ = 30 # logging.py MAX_INTERPOLATION_DEPTH = 10 # configparser.py SSL_HANDSHAKE_TIMEOUT = 60.0 # asyncio.constants.py TICK = "'" # email.utils.py CRLF = "\ r \ n" # smtplib.pyПомните, что это «константы» только в смысле что сами объекты неизменны. Имена еще можно переназначить.
импорт календаря calendar.January = 13 печать (календарь. январь)Или удален, если на то пошло.
дель календаря.Январь печать (календарь. январь)Traceback (последний вызов последний): ... AttributeError: модуль «календарь» не имеет атрибута «январь»Помимо целых чисел, чисел с плавающей запятой и строк, константы также включают неизменяемые контейнеры, такие как кортежи и замороженные наборы:
all_errors = (Ошибка, OSError, EOFError) # ftplib.py bytes_types = (bytes, bytearray) # рассол.ру ЦИФРЫ = frozenset ("0123456789") # sre_parse.pyБолее специализированные неизменяемые типы данных также служат константами:
_EPOCH = datetime (1970, 1, 1, tzinfo = timezone.utc) # datetimeВ редких случаях модуль global который код явно никогда не намеревается изменять в любом случае использует изменяемую структуру данных. Простые изменяемые наборы распространены в коде, предшествующем изобретению морозильной установки
. Словари используются и сегодня потому что, увы, Стандартная библиотека не предлагает замороженный словарь.
# socket.py _blocking_errnos = {EAGAIN, EWOULDBLOCK}# locale.py windows_locale = { 0x0436: «af_ZA», # африкаанс 0x041c: "sq_AL", # албанский 0x0484: «gsw_FR», # Эльзасский - Франция ... 0x0435: «zu_ZA», # зулусский }Константы часто вводятся в процессе рефакторинга: программист замечает, что то же значение
60.0
неоднократно появляется в их коде, и так вводится константаSSL_HANDSHAKE_TIMEOUT
вместо этого значения.Каждое использование имени теперь потребует небольших затрат на поиск в глобальном масштабе, но это уравновешивается парой преимуществ. Имя константы теперь отражает значение значения, улучшение читабельности кода. И оператор присваивания константы теперь предоставляет единое местоположение где значение может быть отредактировано в будущем без необходимости искать код для каждого места был использован60.0
.Эти преимущества достаточно веские что константа иногда вводится даже для значения, которое используется только один раз, подъем литерала, который был спрятан глубоко в коде до видимости в качестве глобального.
Некоторые программисты ставят постоянные задания близко к коду, который их использует; другие помещают все константы в начало файла. Если константа не помещена так близко к ее коду что он всегда будет на виду у читателей, может быть более удобным помещать константы в верхней части модуля для удобства читателей которые еще не настроили свои редакторы для поддержки перехода к определению.
Другой вид постоянной не направлен внутрь, к коду в самом модуле, но наружу как часть рекламируемого API модуля.Константа типа
WARNING
из модуля регистрациипредлагает вызывающему абоненту преимущества константы: код будет более читабельным, и значение константы можно будет изменить позже без необходимости редактировать код каждому вызывающему абоненту.
Можно ожидать, что константа, предназначенная для собственного использования модулем, но не предназначен для звонящих, всегда будет начинаться с подчеркивания, чтобы пометить его как частный. Но программисты Python не едины в том, чтобы помечать константы как частные, возможно, потому что стоимость необходимости поддерживать постоянную вечность потому что звонящий, возможно, решил начать использовать его меньше, чем стоимость вспомогательная функция или API класса навсегда заблокированы.
Расчет времени импорта
Иногда константы вводятся для повышения эффективности, чтобы избежать повторного вычисления значения каждый раз при вызове кода. Например, хотя математические операции с буквальными числами фактически оптимизированы во всех современных реализациях Python, разработчики часто все еще чувствуют себя более комфортно явно указать, что математика должна выполняться во время импорта путем присвоения результата модулю global:
# zipfile.py ZIP_FILECOUNT_LIMIT = (1 << 16) - 1Когда математическое выражение сложно, присвоение имени также улучшает читаемость кода.
В качестве другого примера, существуют специальные значения с плавающей запятой это не может быть записано на Python как литералы; они могут быть сгенерированы только путем передачи строки в тип float. Чтобы избежать вызова
float ()
с'nan'
или'inf'
каждый раз, когда требуется такое значение, модули часто создают такие значения только один раз как глобальные переменные модуля.# encoder.py БЕСКОНЕЧНОСТЬ = float ('inf')Константа также может фиксировать результат условного чтобы не переоценивать его каждый раз, когда требуется значение - при условии, конечно, что условие не будет меняться во время работы программы.
# shutil.py COPY_BUFSIZE = 1024 * 1024, если _WINDOWS иначе 16 * 1024Мой любимый пример вычисляемых констант в стандартной библиотеке это модуль
типов
. Я всегда предполагал, что это реализовано на C, для получения специального доступа к объектам встроенного типа, таким какFunctionType
иLambdaType
, которые определяются самой реализацией языка.Получается? Я ошибался. Модуль
типов
написан на простом Python!Без какого-либо специального доступа к внутреннему языку, он делает то же, что и любой другой, чтобы узнать, какие функции имеют типы.Он создает функцию, затем спрашивает ее тип:
# types.py def _f (): пройти Тип функции = тип (_f)С одной стороны, это делает модуль
типов
почти лишним - вы всегда можете использовать тот же трюк, чтобы самостоятельно открытьFunctionType
. Но с другой стороны, импортируя его изтипов
позволяет сиять обоим основным преимуществам постоянного узора: код становится более читабельным потому чтоFunctionType
везде будет иметь одно и то же имя, и более эффективный потому что константу нужно вычислить только один раз независимо от того, сколько модулей в большой системе могут его использовать.Константы Дандера
Особый случай констант, определенных на глобальном уровне модуля представляют собой «грязные» константы, имена которых начинаются и заканчиваются двойным подчеркиванием.
Несколько глобальных dunder-констант модуля устанавливаются самим языком. Для официального списка, найдите подзаголовок «Модули» в разделе справочника Python, посвященном стандартная иерархия типов. Чаще всего встречаются два:
__name__
, какие программы нужно проверять из-за ужасного дизайнерского решения Python присвоить поддельное имя'__main__'
в модуль, вызываемый из командной строки, и__file__
, полный путь файловой системы к самому файлу Python модуля - который почти повсеместно используется для поиска файлов данных, включенных в пакет, хотя официальная рекомендация в наши дни использоватьpkgutil.get_data ()
вместо этого.здесь = os.path.dirname (__ file__)Помимо черных констант, установленных средой выполнения языка, есть один, который Python распознает, если модуль решает установить его: если
__all__
присвоена последовательность идентификаторов, тогда только эти имена будут импортированы в другой модуль то естьиз… import *
. Вы могли ожидать, что__all__
станет менее популярным какимпорт *
получил репутацию антипаттерна, но он сделал счастливую вторую карьеру ограничение списка включенных символов автоматическими механизмами документации, такими как Модуль Sphinx autodoc.Хотя большинство модулей никогда не планируют модифицировать
__all__
, они необъяснимо определяют его как список Python. Более элегантно использовать кортеж.Помимо этих официальных констант dunder, некоторые модули - несмотря на непривлекательность, сколько людей находят дурацкие имена - побаловать себя созданием еще большего. Присваивания имен вроде
__author__
и__version__
разбросаны по Стандартной библиотеке и за ее пределами. Хотя они не появляются достаточно последовательно для оснастки можно предполагать их наличие, случайные читатели, вероятно, найдут их информативными, и их легче получить, чем официальные метаданные пакета.Остерегайтесь, кажется, согласия нет, даже в стандартной библиотеке, о том, какой тип
__author__
должен быть.# bz2.py __author__ = "Надим Вавда" # inspect.py __author__ = ('Ка-Пинг Йи', 'Юрий Селиванов ') Почему не автор
и
версия вместо
, без дандеров? Ранний читатель, вероятно, неправильно понял dunders, что на самом деле означало «специально для среды выполнения языка Python», как нечеткое указание что значение было метаданными модуля, а не кодом модуля.Некоторые модули стандартной библиотеки предлагают свою версию без дандеров, но даже не договорившись о капитализации.VERSION = "1.3.0" # etree / ElementTree.py версия = "0.20" # sax / expatreader.py version = "0.9.0" # tarfile.pyВо избежание несоответствий, окружающих эти неформальные и специальные соглашения о метаданных, пакет, который предполагается установить с
pip
может узнать названия и версии других установленных пакетов прямо из системы установки пакетов Python.Дополнительная информация доступна в документации setuptools по модулюpkg_resources
.Шаблон глобального объекта
В полноценном шаблоне Global Object, как в шаблоне "Постоянный", модуль создает экземпляр объекта во время импорта и присваивает ему имя в глобальной области видимости модуля. Но объект не просто служит данными; это не просто целое число, строка или структура данных. Вместо этого объект становится доступным ради методов, которые он предлагает - для действий, которые он может выполнять.
Простейшие глобальные объекты неизменны. Типичный пример - скомпилированное регулярное выражение - вот несколько примеров из стандартной библиотеки:
escapesre = re.compile (r '[\\ "]') # электронная почта / utils.py magic_check = re.compile ('([*? [])') # glob.py commentclose = re.compile (r '- \ s *>') # html / parser.py HAS_UTF8 = re.compile (b '[\ x80- \ xff]') # json / encoder.pyКомпиляция регулярного выражения как глобального модуля является хорошим примером более общего шаблона глобального объекта.Это обеспечивает элегантный и безопасный перенос расходов. из более позднего времени выполнения программы, чтобы вместо этого импортировать время. Компромиссы:
- Стоимость импорта модуля увеличивается по стоимости компиляции регулярного выражения (плюс крошечные затраты на присвоение ему глобального имени).
- Стоимость времени импорта теперь ложится на каждую программу, импортирующую модуль. Даже если программа не вызывает никакого кода который использует регулярное выражение
HAS_UTF8
, показанное выше, это потребует затрат на его компиляцию всякий раз, когда он импортирует модульjson
.(Поворот сюжета: в Python 3 шаблон больше даже не используется в модуле! Но его имя не было помечено как личное с подчеркиванием, поэтому я полагаю, что удалять - небезопасно - и каждый импортjson
окупает свою стоимость навсегда?)- Но функции и методы, которые на самом деле нужно использовать регулярное выражение больше не будет нести повторные затраты на его компиляцию. Скомпилированное регулярное выражение готов немедленно начать сканирование строки! Если регулярное выражение используется часто, как во внутреннем цикле такой дорогостоящей операции, как синтаксический анализ, экономия может быть значительной.
- Глобальное имя сделает код вызова более читабельным чем если бы регулярное выражение при локальном использовании используется анонимно в более крупном выражении. (Однако если удобочитаемость - единственная проблема, помните, что вы можете определить строку регулярного выражения как глобальную но пропустите стоимость компиляции на уровне модуля.)
Этот список компромиссов примерно такой же, кстати, если вы переместите регулярное выражение в атрибут класса вместо того, чтобы полностью переместить его в глобальную область видимости.Когда я наконец приступил к написанию о Python и классах, Я дам ссылку здесь на дальнейшие мысли об атрибутах класса.
Глобальные изменяемые объекты
Но как насчет изменяемых глобальных объектов?
Их проще всего оправдать, когда они оборачивают системные ресурсы которые по своей природе также глобальны для процесса операционной системы. Одним из примеров в самой стандартной библиотеке является среда
Environment
. объект что дает вашей программе Python «среду» - текстовые ключи и значения, указывающие ваш часовой пояс, тип терминала и т. д. - который был передан вашей программе Python из родительского процесса.Сейчас, спорно ли ваша программа действительно должен записывать новые значения в свою среду во время работы. Если вы запускаете подпроцесс требует настройки переменной среды, подпрограммы
подпроцесса
предлагают параметрenv
. Но если коду действительно нужно манипулировать этим глобальным ресурсом, тогда имеет смысл опосредовать этот доступ соответствующим глобальным объектом Python:# os.py Environment = _createenviron ()Через этот глобальный объект различные процедуры и, возможно, потоки в программе Python координировать свой доступ к этому общесистемному ресурсу.Любое изменение:
импорт ОС os.environ ['TERM'] = 'xterm'- будет сразу виден любой другой части программы который читает этот ключ среды:
>>> os.environ ['СРОК'] 'xterm'Проблемы с подключением удаленных частей вашей кодовой базы, и даже несвязанные части разных библиотек, через уникальный глобальный объект хорошо известны.
- Тесты, которые ранее были независимыми внезапно связаны через глобальный объект и больше не может безопасно работать параллельно.Если один тест выполняет временное присвоение
Environment ['PATH']
непосредственно перед тем, как другой тест запустит двоичный файл с подпроцессом, двоичный файл унаследует тестовое значение
$ PATH
- возможно, вызывая ошибку.- Иногда вы можете сериализовать доступ к глобальному объекту через блокировку. Но если вы не проведете тщательный аудит всех библиотек, которые использует ваш код, и продолжить их аудит при обновлении до новых версий, может быть трудно даже узнать, какие тесты вызывают код который в конечном итоге касается конкретного глобального объекта, такого как
environment
.- Даже тесты, выполняемые последовательно, а не параллельно, теперь будут связаны если один тест не может восстановить
environment
в исходное состояние перед запуском следующего теста. Это правда, можно смягчить с помощью процедур разборки. или с макетами, которые автоматически восстанавливают состояние. Но если каждый тест не является совершенно осторожным, ваш набор тестов все еще может страдать от исключений которые зависят от случайного порядка тестов или от того, был ли предыдущий тест успешным или завершился досрочно.- Эти опасности угрожают не только испытаниям, но и производственным циклам.Даже если ваше приложение не запускает несколько потоков, могут быть удивительные случаи где рефакторинг завершается вызовом кода который выполняет одну операцию на
окружении
прямо посреди другой рутины это также было в процессе преобразования своего состояния.В стандартной библиотеке есть больше примеров изменяемого глобального шаблона - как публичные глобалы, так и частные засоряют его модули. Некоторые соответствуют уникальным ресурсам на системном уровне:
# Lib / multiprocessing / process.ру _current_process = _MainProcess () _process_counter = itertools.count (1)Другие не соответствуют внешнему ресурсу но вместо этого служат единой точкой координации для общесистемной деятельности, такой как ведение журнала:
# Lib / logging / __ init__.py root = RootLogger (ВНИМАНИЕ)Сторонние библиотеки могут предоставить еще десятки примеров, из глобальных пулов потоков HTTP и подключений к базе данных в реестры обработчиков запросов, плагинов библиотек и сторонних кодеков. Но в любом случае Mutable Global устраняет все вышеперечисленные опасности в обмен на удобство размещения ресурса там, где каждый модуль может его достичь.
Мой совет, насколько вы можете, заключается в написании кода, который принимает аргументы и возвращает вычисленные на их основе значения. В противном случае попробуйте передать соединения с базой данных или открыть сокеты. код, который должен будет взаимодействовать с внешним миром. Это компромисс для кода, который оказывается в затруднительном положении из-за необходимых ему ресурсов прибегнуть к доступу к глобальному.
Слава Python, конечно, в том, что он обычно делает даже анти-паттерны и компромиссы читать код довольно элегантно.Оператор присваивания на глобальном уровне модуля писать и читать так же легко, как и любой другой оператор присваивания, и вызывающие абоненты могут получить доступ к Mutable Global через точно такой же оператор импорта они используются для функций и классов.
Ввод / вывод во время импорта
Многие из худших глобальных объектов которые выполняют файловый или сетевой ввод-вывод во время импорта. Они не только накладывают затраты на ввод-вывод. в каждой библиотеке, скрипте и тесте, которым нужен модуль, но подвергнуть их опасности, если файл или сеть недоступны.
Авторы библиотеки, к сожалению, имеют склонность делать предположения вроде «Файл
/ etc / hosts
будет существовать всегда» когда на самом деле они не могут знать заранее все экзотические среды, с которыми однажды столкнется их код - может быть, крошечная встроенная система, в которой фактически отсутствует этот файл; возможно, среда непрерывной интеграции раскрутка контейнеров, в которых вообще отсутствует какая-либо сетевая конфигурация.Даже столкнувшись с такой возможностью, автор модуля все еще может попытаться защитить свой ввод-вывод во время импорта: «Но отложить ввод / вывод до истечения времени импорта. просто откладывает неизбежное - если в системе нет
/ etc / hosts
тогда пользователь все равно получит точно такое же исключение позже.” Попытка найти такое оправдание обнаруживает три недопонимания:
- Ошибки во время импорта намного серьезнее ошибок во время выполнения. Помните, что в момент импорта вашего пакета основная процедура программы, вероятно, не запущена - звонящий обычно все еще находится посередине из стека
импортировать
операторов вверху своего файла. Вероятно, они еще не настроили ведение журнала и еще не вошли в основную попытку своего приложения… кроме
блок, который выявляет и сообщает о сбоях, поэтому любые ошибки во время импорта вероятно, будет печатать прямо на стандартный вывод вместо того, чтобы получить должный отчет.- Приложения часто пишутся пережить провал некоторых операций чтобы в случае аварии они могли выполнять другие функции. Даже если функции, которым нужна ваша библиотека, теперь попадут в исключение, у приложения может быть много других, которые оно может продолжать предлагать - или мог, если вы не убивали его за исключением при импорте.
- Наконец, авторы библиотеки должны помнить что программа Python, которая импортирует их библиотеку может даже не использовать! Никогда не предполагайте, что просто потому, что ваш код был импортирован, он будет использован.Есть много ситуаций, когда модуль импортируется случайно, как зависимость дополнительных модулей, но никогда не звонят. Выполняя ввод-вывод во время импорта, вы можете наложить расходы и риск на сотни программ и тестов. которые даже не нуждаются в вашем сетевом порте и не заботятся о нем, пул соединений или открытый файл.
По всем этим причинам это лучше всего для ваших глобальных объектов подождать, пока они не позвонят перед открытием файлов и созданием сокетов - потому что это в момент первого звонка что библиотека знает, что основная программа запущена и работает, и знает, что его услуги действительно необходимы в этом конкретном запуске программы.
Признаюсь, когда моему пакету нужно загрузить небольшой файл данных который встроен в сам пакет, Иногда я нарушаю это правило.
Глава 2 Основы R | Введение в науку о данных
В этой книге мы будем использовать программную среду R для всех наших анализ. Вы одновременно изучите R и методы анализа данных. Поэтому для продолжения работы вам понадобится доступ к R. Мы также рекомендуем использовать интегрированную среду разработки (IDE), такую как RStudio, для сохранения вашей работы.Обратите внимание, что в рамках курса или семинара обычно предлагается доступ к среде R и IDE через ваш веб-браузер, как это делает облако RStudio. Если у вас есть доступ к такому ресурсу, вам не нужно устанавливать R и RStudio. Однако, если вы собираетесь стать опытным аналитиком данных, мы настоятельно рекомендуем установить эти инструменты на свой компьютер. И R, и RStudio бесплатны и доступны в Интернете.
Пример: убийства с применением огнестрельного оружия в США
Представьте, что вы живете в Европе, и вам предлагают работу в американской компании с офисами во всех штатах.Это отличная работа, но новости с такими заголовками, как «» Уровень убийств с применением огнестрельного оружия в США выше, чем «» в других развитых странах, вас беспокоят. Такие графики могут вас заинтересовать еще больше:
Или, что еще хуже, эта версия с everytown.org:
Но тогда вы помните, что США - большая и разнообразная страна с 50 очень разными штатами, а также округом Колумбия (округ Колумбия).
Например, в Калифорнии проживает больше населения, чем в Канаде, а в 20 штатах США проживает больше населения, чем в Норвегии.В некотором отношении изменчивость между штатами США сродни изменчивости в разных странах Европы. Более того, хотя это и не включено в таблицы выше, уровень убийств в Литве, Украине и России превышает 4 на 100 000 человек. Так что, возможно, сообщения в новостях, которые вас беспокоят, слишком поверхностны. У вас есть выбор, где жить, и вы хотите определить безопасность каждого конкретного штата. Мы получим некоторую информацию, изучив данные, связанные с убийствами с применением огнестрельного оружия в США в 2010 году, с использованием R. 2 + bx + c = 0 \).2 + x -1 = 0 \), то определяем:
, в котором хранятся значения для последующего использования. Мы используем
<-
для присвоения значений переменным.Мы также можем присвоить значения, используя
=
вместо<-
, но мы не рекомендуем использовать=
, чтобы избежать путаницы.Скопируйте и вставьте приведенный выше код в консоль, чтобы определить три переменные. Обратите внимание, что R ничего не печатает, когда мы выполняем это присваивание. Это означает, что объекты были определены успешно.Если бы вы сделали ошибку, вы бы получили сообщение об ошибке.
Чтобы увидеть значение, хранящееся в переменной, мы просто просим R оценить
a
, и он показывает сохраненное значение:Более явный способ попросить R показать нам значение, хранящееся в
a
, используетМы используем термин объект для описания того, что хранится в R. Переменные являются примерами, но объекты также могут быть более сложными объектами, такими как функции, которые описаны позже.
Рабочее пространство
Когда мы определяем объекты в консоли, мы фактически меняем рабочее пространство . Вы можете увидеть все переменные, сохраненные в вашем рабочем пространстве, набрав:
лс () #> [1] "a" "b" "c" "dat" "img_path" "убийства"
В RStudio вкладка Environment показывает значения:
Мы должны увидеть
a
,b
иc
. Если вы попытаетесь восстановить значение переменной, которой нет в вашей рабочей области, вы получите сообщение об ошибке.2-4 * а * в)) / (2 * а) #> [1] -1,62
Функции
После определения переменных процесс анализа данных обычно можно описать как серию из функций , применяемых к данным. R включает в себя несколько предопределенных функций, и большинство построенных нами конвейеров анализа широко их используют.
Мы уже использовали функции install.packages
, library
и ls
. Мы также использовали функцию sqrt
для решения квадратного уравнения выше.Есть еще много готовых функций, и еще больше можно добавить с помощью пакетов. Эти функции не отображаются в рабочей области, потому что вы не определили их, но они доступны для немедленного использования.
Как правило, нам нужно использовать круглые скобки для оценки функции. Если вы наберете ls
, функция не будет оцениваться, и вместо этого R покажет вам код, определяющий функцию. Если вы наберете ls ()
, функция будет оценена, и, как показано выше, мы увидим объекты в рабочей области.
В отличие от ls
, большинству функций требуется один или несколько аргументов . Ниже приведен пример того, как мы назначаем объект аргументу функции log
. Помните, что ранее мы определили как
как 1:
журнал (8)
#> [1] 2,08
журнал (а)
#> [1] 0
Вы можете узнать, что функция ожидает и что она делает, просмотрев очень полезные руководства, включенные в R. Вы можете получить помощь, используя функцию help
, например:
Для большинства функций мы также можем использовать это сокращение:
Страница справки покажет вам, какие аргументы ожидает функция.Например, для log
требуется x
и base
для запуска. Однако некоторые аргументы являются обязательными, а другие - необязательными. Вы можете определить, какие аргументы являются необязательными, отметив в справочном документе, что значение по умолчанию присвоено =
. Их определение необязательно. Например, основание функции log
по умолчанию равно base = exp (1)
, что делает log
натуральным логарифмом по умолчанию.
Если вы хотите быстро просмотреть аргументы, не открывая справочную систему, введите:
args (журнал)
#> function (x, base = exp (1))
#> ПУСТО
Вы можете изменить значения по умолчанию, просто назначив другой объект:
журнал (8, основание = 2)
#> [1] 3
Обратите внимание, что мы не указывали аргумент x
как таковой:
журнал (x = 8, основание = 2)
#> [1] 3
Приведенный выше код работает, но мы можем сэкономить на вводе: если имя аргумента не используется, R предполагает, что вы вводите аргументы в порядке, указанном в файле справки или args
.Поэтому, не используя имена, предполагается, что аргументы - x
, за которыми следует base
:
Если использовать имена аргументов, мы можем включать их в любом порядке:
журнал (основание = 2, x = 8)
#> [1] 3
Чтобы указать аргументы, мы должны использовать =
и не можем использовать <-
.
Есть несколько исключений из правила, согласно которому функции нуждаются в скобках для оценки. Среди них наиболее часто используются арифметические и реляционные операторы.Например:
Вы можете увидеть арифметические операторы, набрав:
или
и реляционные операторы, набрав:
или
Готовые объекты прочие
Есть несколько наборов данных, которые можно использовать для практики и тестирования функций. Вы можете увидеть все доступные наборы данных, набрав:
Здесь отображается имя объекта для этих наборов данных. Эти наборы данных представляют собой объекты, которые можно использовать, просто введя имя. Например, если вы наберете:
R покажет вам данные о концентрации CO2 в атмосфере на острове Мауна-Лоа.
Другие готовые объекты представляют собой математические величины, например константу \ (\ pi \) и \ (\ infty \):
пи
#> [1] 3.14
Inf + 1
#> [1] Инф
Имена переменных
Мы использовали буквы a
, b
и c
в качестве имен переменных, но имена переменных могут быть практически любыми. Некоторые основные правила в R заключаются в том, что имена переменных должны начинаться с буквы, не могут содержать пробелов и не должны быть переменными, предопределенными в R.2-4 * а * в)) / (2 * а)
Чтобы получить дополнительные советы, мы настоятельно рекомендуем изучить руководство по стилю Хэдли Уикхэм.
Сохранение рабочего места
Значения остаются в рабочей области до тех пор, пока вы не завершите сеанс или не удалите их с помощью функции rm
. Но рабочие места также можно сохранить для дальнейшего использования. Фактически, когда вы выходите из R, программа спрашивает вас, хотите ли вы сохранить рабочее пространство. Если вы все же сохраните его, при следующем запуске R программа восстановит рабочее пространство.
На самом деле мы не рекомендуем сохранять рабочее пространство таким образом, потому что, когда вы начнете работать над разными проектами, будет труднее отслеживать, что сохраняется.Вместо этого мы рекомендуем вам присвоить рабочему пространству конкретное имя. Это можно сделать с помощью функции сохранить
или сохранить изображение
. Для загрузки используйте функцию load
. При сохранении рабочего пространства мы рекомендуем суффикс rda
или RData
. В RStudio вы также можете сделать это, перейдя на вкладку Session и выбрав Save Workspace as . Позже вы можете загрузить его, используя параметры Загрузить рабочее пространство на той же вкладке.
Вы можете прочитать справочные страницы по сохранить,
, сохранить.2-4 * а * в)) / (2 * а)
Создав и сохранив скрипт с приведенным выше кодом, нам не нужно каждый раз вводить все заново, а вместо этого просто менять имена переменных. Попробуйте написать приведенный выше сценарий в редакторе и обратите внимание, как легко изменить переменные и получить ответ.
Упражнения
1. Какова сумма первых 100 натуральных чисел? Формула суммы целых чисел от \ (1 \) до \ (n \) равна \ (n (n + 1) / 2 \). Определите \ (n = 100 \), а затем используйте R, чтобы вычислить сумму от \ (1 \) до \ (100 \), используя формулу.Какая сумма?
2. Теперь используйте ту же формулу для вычисления суммы целых чисел от 1 до 1000.
3. Посмотрите на результат ввода следующего кода в R:
n <- 1000
х <- seq (1, n)
сумма (x)
На основании результата, что, по вашему мнению, выполняют функции seq
и sum
? Вы можете использовать справку
.
-
sum
создает список чисел, аseq
складывает их. -
seq
создает список чисел, аsum
складывает их. -
seq
создает случайный список, аsum
вычисляет сумму от 1 до 1000. -
сумма
всегда возвращает одно и то же число.
4. В математике и программировании мы говорим, что вычисляем функцию, когда заменяем аргумент заданным числом. Итак, если мы введем sqrt (4)
, мы оценим функцию sqrt
. В R вы можете оценивать функцию внутри другой функции. Оценки происходят изнутри. Используйте одну строку кода, чтобы вычислить журнал квадратного корня из 100 по основанию 10.10)
журнал (exp (x))
exp (журнал (x, основание = 2))
Типы данных
Переменные в R могут быть разных типов. Например, нам нужно отличать числа от символьных строк, а таблицы от простых списков чисел. Функция class
помогает нам определить, какой у нас тип объекта:
а <- 2
класс (а)
#> [1] "numeric"
Для эффективной работы в R важно изучить различные типы переменных и то, что мы можем с ними делать.
Кадры данных
До сих пор переменные, которые мы определили, представляют собой только одно число. Это не очень полезно для хранения данных. Самый распространенный способ хранения набора данных в R - это фрейм данных . Концептуально мы можем думать о фрейме данных как о таблице со строками, представляющими наблюдения, и различными переменными, сообщаемыми для каждого наблюдения, определяющего столбцы. Фреймы данных особенно полезны для наборов данных, потому что мы можем объединять разные типы данных в один объект.
Большая часть задач анализа данных начинается с данных, хранящихся во фрейме данных. Например, мы сохранили данные для нашего мотивирующего примера во фрейме данных. Вы можете получить доступ к этому набору данных, загрузив библиотеку dslabs и загрузив набор данных убийств
с помощью функции data
:
библиотека (dslabs)
данные (убийства)
Чтобы увидеть, что это на самом деле фрейм данных, мы набираем:
класс (убийства)
#> [1] "данные.рама "
Осмотр объекта
Функция str
полезна для получения дополнительной информации о структуре объекта:
ул. (убийства)
#> 'data.frame': 51 набл. из 5 переменных:
#> $ state: chr "Алабама" "Аляска" "Аризона" "Арканзас" ...
#> $ abb: chr "AL" "AK" "AZ" "AR" ...
#> $ region: множитель с 4 уровнями «Северо-восток», «Юг», ..: 2 4 4 2 4 4 1 2 2
#> 2 ...
#> $ Population: num 4779736 710231 63 28 37253956...
#> $ total: num 135 19 232 93 1257 ...
Это говорит нам гораздо больше об объекте. Мы видим, что в таблице 51 строка (50 состояний плюс DC) и пять переменных. Мы можем показать первые шесть строк с помощью функции head
:
голова (убийства)
#> штат абб область население всего
#> 1 Алабама Аль-Южный 4779736 135
#> 2 Аляска АК Запад 710231 19
#> 3 Аризона, Аризона, Запад 63 232
#> 4 Арканзас Южный 28 93
#> 5 Калифорния Западная Калифорния 37253956 1257
#> 6 Колорадо Колорадо Запад 5029196 65
В этом наборе данных каждое состояние считается наблюдением, и для каждого состояния сообщается пять переменных.
Прежде чем мы продолжим отвечать на наш исходный вопрос о различных состояниях, давайте узнаем больше о компонентах этого объекта.
Аксессуар:
$
Для нашего анализа нам потребуется доступ к различным переменным, представленным столбцами, включенными в этот фрейм данных. Для этого воспользуемся оператором доступа $
следующим образом:
убийств $ населения
#> [1] 4779736 710231 63 28 37253956 5029196 3574097
#> [8] 897934 601723 19687653 90 1360301 1567582 12830632
#> [15] 6483802 3046355 2853118 4339367 4533372 1328361 5773552
#> [22] 6547629 9883640 5303925 27 5988927 989415 1826341
#> [29] 2700551 1316470 87
2059179 102 83 672591
#> [36] 11536504 3751351 3831074 12702379 1052567 4625364 814180
#> [43] 6346105 25145561 2763885 625741 8001024 6724540 1852994
#> [50] 5686986 563626
Но как мы узнали, что использовать населения
? Ранее, применяя функцию str
к объекту убийств
, мы раскрыли имена для каждой из пяти переменных, хранящихся в этой таблице.Мы можем быстро получить доступ к именам переменных, используя:
имен (убийств)
#> [1] "штат" "абб." "Регион" "население" "всего"
Важно знать, что порядок записей в убийствах $ Население
сохраняет порядок строк в нашей таблице данных. Позже это позволит нам манипулировать одной переменной на основе результатов другой. Например, мы сможем упорядочить названия штатов по количеству убийств.
Совет : R поставляется с очень хорошей функцией автозаполнения, которая избавляет нас от необходимости вводить все имена.Попробуйте набрать убийств
$ p, а затем нажать клавишу tab на клавиатуре. Эта функция и многие другие полезные функции автозаполнения доступны при работе в RStudio.
Векторы: числа, символы и логические
Объект убийств $
- это не одно число, а несколько. Мы называем эти типы объектов векторами . Одно число технически является вектором длины 1, но обычно мы используем термин векторы для обозначения объектов с несколькими элементами.Функция length
сообщает вам, сколько записей находится в векторе:
поп <- убийства $ население
длина (поп)
#> [1] 51
Этот конкретный вектор числовой , поскольку размеры населения являются числами:
класс (поп)
#> [1] "numeric"
В числовом векторе каждая запись должна быть числом.
Для хранения символьных строк векторы также могут иметь класс символов . Например, названия штатов - это символы:
класс (состояние убийств)
#> [1] "персонаж"
Как и в случае с числовыми векторами, все записи в векторе символов должны быть символами.
Другой важный тип векторов - логических векторов . Это должно быть ИСТИНА
или ЛОЖЬ
.
г <- 3 == 2
z
#> [1] ЛОЖЬ
класс (z)
#> [1] "логический"
Здесь ==
- это оператор отношения, спрашивающий, равно ли 3 2. В R, если вы просто используете один =
, вы фактически назначаете переменную, но если вы используете два ==
, вы проверяете равенство .
Вы можете увидеть другие операторов отношения , набрав:
В следующих разделах вы увидите, насколько полезными могут быть реляционные операторы.
Мы обсудим более важные особенности векторов после следующего набора упражнений.
Advanced : математически значения в pop
являются целыми числами, а в R. есть целочисленный класс. Однако по умолчанию числам присваиваются числовые классы, даже если они являются округленными целыми числами. Например, class (1)
возвращает числовое значение. Вы можете превратить их в целые числа класса с помощью функции as.integer ()
или добавив L
следующим образом: 1L
.Отметьте класс, набрав: class (1L)
Факторы
В наборе данных убийств
мы можем ожидать, что регион также будет вектором символов. Однако это не так:
класс (убийства $ регион)
#> [1] "коэффициент"
Это коэффициент . Факторы полезны для хранения категориальных данных. Мы можем видеть, что есть только 4 региона, используя функцию уровней
:
уровней (область $ убийств)
#> [1] "Северо-восток" "Юг" "Север-Центр" "Запад"
В фоновом режиме R сохраняет эти уровней как целые числа и ведет карту для отслеживания меток.Это более эффективно с точки зрения памяти, чем хранение всех символов.
Обратите внимание, что уровни имеют порядок, отличный от порядка появления в факторном объекте. По умолчанию в R уровни следуют в алфавитном порядке. Однако часто мы хотим, чтобы уровни располагались в другом порядке. Вы можете указать порядок с помощью аргумента уровни
при создании фактора с помощью функции фактор
. Например, в наборе данных об убийствах регионы упорядочены с востока на запад.Функция переупорядочения
позволяет нам изменять порядок уровней факторной переменной на основе сводки, вычисленной на числовом векторе. Мы продемонстрируем это на простом примере и увидим более сложные в части книги «Визуализация данных».
Предположим, нам нужны уровни региона по общему количеству убийств, а не в алфавитном порядке. Если есть значения, связанные с каждым уровнем, мы можем использовать устройство переупорядочения
и указать сводку данных для определения порядка.Следующий код берет сумму всех убийств в каждом регионе и меняет порядок множителя после этих сумм.
регион <- убийства $ регион
значение <- убийства $ всего
region <- переупорядочить (регион, значение, FUN = сумма)
уровни (регион)
#> [1] "Северо-восток" "Север-Центр" "Запад" "Юг"
Новый порядок согласуется с тем фактом, что на Северо-Востоке меньше всего убийств, а на Юге больше всего.
Предупреждение : Факторы могут быть источником путаницы, поскольку иногда они ведут себя как персонажи, а иногда нет.В результате сбивающие с толку факторы и символы являются частым источником ошибок.
Списки
Кадры данных являются частным случаем списков . Списки полезны, потому что вы можете хранить любую комбинацию разных типов. Вы можете создать список, используя функцию list
, например:
запись <- list (name = "John Doe",
student_id = 1234,
оценки = c (95, 82, 91, 97, 93),
final_grade = "A")
Функция c
описана в разделе 2.6.
Этот список включает символ, число, вектор с пятью числами и еще один символ.
запись
#> $ name
#> [1] "Джон Доу"
#>
#> $ student_id
#> [1] 1234
#>
#> $ grades
#> [1] 95 82 91 97 93
#>
#> $ final_grade
#> [1] "А"
класс (запись)
#> [1] "список"
Как и в случае с фреймами данных, вы можете извлечь компоненты списка с помощью средства доступа $
.
запись $ student_id
#> [1] 1234
Мы также можем использовать двойные квадратные скобки ( [[
), например:
запись [["student_id"]]
#> [1] 1234
Вам следует привыкнуть к тому, что в R часто есть несколько способов сделать то же самое, например, получить доступ к записям.
Вы также можете встретить списки без имен переменных.
запись2 <- список ("Джон Доу", 1234)
запись2
#> [[1]]
#> [1] "Джон Доу"
#>
#> [[2]]
#> [1] 1234
Если список не имеет имен, вы не можете извлечь элементы с помощью $
, но вы все равно можете использовать метод скобок и вместо указания имени переменной вы указываете индекс списка, например:
запись2 [[1]]
#> [1] "Джон Доу"
Мы не будем использовать списки до конца, но вы можете встретить один в своем собственном исследовании R.По этой причине мы покажем вам некоторые основы здесь.
Матрицы
Матрицы - это еще один тип объектов, которые распространены в R. Матрицы похожи на фреймы данных в том, что они двумерны: они имеют строки и столбцы. Однако, как и числовые, символьные и логические векторы, все записи в матрицах должны быть одного типа. По этой причине фреймы данных гораздо более полезны для хранения данных, поскольку в них могут быть символы, множители и числа.
Тем не менее, у матриц есть главное преимущество перед фреймами данных: мы можем выполнять операции матричной алгебры - мощный тип математической техники.Мы не описываем эти операции в этой книге, но многое из того, что происходит в фоновом режиме, когда вы выполняете анализ данных, связано с матрицами. Мы рассмотрим матрицы более подробно в главе 33.1, но кратко опишем их здесь, так как некоторые функции, которые мы изучим, возвращают матрицы.
Мы можем определить матрицу, используя функцию matrix
. Нам нужно указать количество строк и столбцов.
мат <- матрица (1:12, 4, 3)
мат
#> [, 1] [, 2] [, 3]
#> [1,] 1 5 9
#> [2,] 2 6 10
#> [3,] 3 7 11
#> [4,] 4 8 12
Вы можете получить доступ к определенным записям в матрице, используя квадратные скобки ( [
).Если вам нужна вторая строка, третий столбец, используйте:
Если вам нужна вся вторая строка, оставьте место столбца пустым:
Обратите внимание, что это возвращает вектор, а не матрицу.
Точно так же, если вам нужен весь третий столбец, оставьте место строки пустым:
мат [, 3]
#> [1] 9 10 11 12
Это тоже вектор, а не матрица.
При желании вы можете получить доступ к более чем одному столбцу или более чем одной строке. Это даст вам новую матрицу.
мат [, 2: 3]
#> [, 1] [, 2]
#> [1,] 5 9
#> [2,] 6 10
#> [3,] 7 11
#> [4,] 8 12
Вы можете подмножество строк и столбцов:
мат [1: 2, 2: 3]
#> [, 1] [, 2]
#> [1,] 5 9
#> [2,] 6 10
Мы можем преобразовать матрицы в кадры данных с помощью функции as.data.frame
:
as.data.frame (мат)
#> V1 V2 V3
#> 1 1 5 9
#> 2 2 6 10
#> 3 3 7 11
#> 4 4 8 12
Вы также можете использовать одиночные квадратные скобки ( [
) для доступа к строкам и столбцам фрейма данных:
данные («убийства»)
убийства [25, 1]
#> [1] "Миссисипи"
убийства [2: 3,]
#> штат абб область население всего
#> 2 Аляска АК Запад 710231 19
#> 3 Аризона, Аризона, Запад 63 232
Упражнения
1.Загрузите набор данных об убийствах в США.
библиотека (dslabs)
данные (убийства)
Используйте функцию str
, чтобы изучить структуру объекта убийств
. Что из следующего лучше всего описывает переменные, представленные в этом фрейме данных?
- 51 штат.
- Количество убийств во всех 50 штатах и округе Колумбия.
- Название штата, аббревиатура названия штата, регион штата, численность населения штата и общее количество убийств за 2010 год.
-
str
не содержит соответствующей информации.
2. Какие имена столбцов используются во фрейме данных для этих пяти переменных?
3. Используйте средство доступа $
, чтобы извлечь аббревиатуры состояний и назначить их объекту и
. Какой класс у этого объекта?
4. Теперь используйте квадратные скобки, чтобы извлечь аббревиатуры состояний и назначить их объекту b
. Используйте функцию идентичный
, чтобы определить, являются ли a
и b
одинаковыми.
5. Мы видели, что в столбце региона
хранится коэффициент. Вы можете подтвердить это, набрав:
С одной строкой кода используйте функцию , уровни
и длиной
, чтобы определить количество регионов, определенных этим набором данных.
6. Функция table
принимает вектор и возвращает частоту каждого элемента. Вы можете быстро увидеть, сколько состояний находится в каждом регионе, применив эту функцию. Используйте эту функцию в одной строке кода, чтобы создать таблицу состояний для каждого региона.
Векторы
В R наиболее простыми объектами, доступными для хранения данных, являются векторов . Как мы видели, сложные наборы данных обычно можно разбить на компоненты, которые являются векторами. Например, во фрейме данных каждый столбец является вектором. Здесь мы узнаем больше об этом важном классе.
Создание векторов
Мы можем создавать векторы, используя функцию c
, которая означает concatenate . Мы используем c
для объединения записей следующим образом:
коды <- c (380, 124, 818)
коды
#> [1] 380 124 818
Мы также можем создавать векторы символов.Мы используем кавычки, чтобы обозначить, что записи являются символами, а не именами переменных.
страна <- c («италия», «канада», «египет»)
В R вы также можете использовать одинарные кавычки:
страна <- c ('италия', 'канада', 'египет)
Но будьте осторожны, чтобы не путать одинарную кавычку 'с обратной кавычкой `.
К настоящему времени вы должны знать, что если наберете:
страна <- c (италия, канада, египет)
вы получаете сообщение об ошибке, потому что переменные italy
, canada
и egypt
не определены.Если мы не используем кавычки, R ищет переменные с этими именами и возвращает ошибку.
Имена
Иногда полезно давать имена элементам вектора. Например, при определении вектора кодов стран мы можем использовать имена для соединения двух:
коды <- c (италия = 380, канада = 124, египет = 818)
коды
#> италия канада египет
#> 380 124818
Объект с кодами
продолжает быть числовым вектором:
класс (коды)
#> [1] "numeric"
, но с именами:
наименований (кодов)
#> [1] "италия" "канада" "египет"
Если использование строк без кавычек выглядит запутанным, знайте, что вы также можете использовать кавычки:
коды <- c ("italy" = 380, "canada" = 124, "egypt" = 818)
коды
#> италия канада египет
#> 380 124818
Нет разницы между вызовом этой функции и предыдущим.Это один из многих отличий R от других языков.
Мы также можем назначать имена, используя имена
функций:
коды <- c (380, 124, 818)
страна <- c («италия», «канада», «египет»)
имена (коды) <- страна
коды
#> италия канада египет
#> 380 124818
Последовательности
Еще одна полезная функция для создания векторов генерирует последовательности:
seq (1, 10)
#> [1] 1 2 3 4 5 6 7 8 9 10
Первый аргумент определяет начало, а второй - конец, который включается.По умолчанию увеличивается с шагом 1, но третий аргумент позволяет нам сказать, на сколько прыгнуть:
seq (1, 10, 2)
#> [1] 1 3 5 7 9
Если нам нужны последовательные целые числа, мы можем использовать следующее сокращение:
1:10
#> [1] 1 2 3 4 5 6 7 8 9 10
Когда мы используем эти функции, R производит целые числа, а не числа, потому что они обычно используются для индексации чего-либо:
класс (1:10)
#> [1] целое число
Однако, если мы создадим последовательность, включающую нецелые числа, класс изменится:
класс (seq (1, 10, 0.5))
#> [1] "numeric"
Подгруппа
Мы используем квадратные скобки для доступа к определенным элементам вектора. Для вектора с кодами
, которые мы определили выше, мы можем получить доступ ко второму элементу, используя:
коды [2]
#> канада
#> 124
Вы можете получить более одной записи, используя вектор с несколькими записями в качестве индекса:
коды [c (1,3)]
#> италия египет
#> 380 818
Определенные выше последовательности особенно полезны, если мы хотим получить доступ, скажем, к первым двум элементам:
коды [1: 2]
#> италия канада
#> 380 124
Если у элементов есть имена, мы также можем получить доступ к записям, используя эти имена.Ниже приведены два примера.
кодов ["канада"]
#> канада
#> 124
коды [c («египет», «италия»)]
#> египет италия
#> 818 380
Принуждение
В общем, приведение - это попытка R быть гибкой с типами данных. Когда запись не соответствует ожидаемой, некоторые из предварительно созданных функций R пытаются угадать, что имелось в виду, прежде чем выдает ошибку. Это тоже может привести к путанице. Неспособность понять принуждение может свести с ума программистов при попытке написать код на R, поскольку в этом отношении он ведет себя совершенно иначе, чем большинство других языков.Давайте узнаем об этом на нескольких примерах.
Мы сказали, что все векторы должны быть одного типа. Поэтому, если мы попытаемся объединить, скажем, цифры и символы, вы можете ожидать ошибку:
Но мы не получаем ни одного предупреждения, даже предупреждения! Что случилось? Посмотрите на x
и его класс:
х
#> [1] «1» «канада» «3»
класс (x)
#> [1] "персонаж"
R преобразовал данных в символы. Он предположил, что, поскольку вы помещаете строку символов в вектор, вы имели в виду, что 1 и 3 на самом деле были строками символов «1»
и « 3
».Тот факт, что не выдается даже предупреждения, является примером того, как принуждение может вызвать множество незамеченных ошибок в R.
R также предлагает функции для перехода от одного типа к другому. Например, вы можете превратить числа в символы с помощью:
х <- 1: 5
y <- as.character (x)
y
#> [1] "1" "2" "3" "4" "5"
Вы можете повернуть его обратно с помощью as.numeric
:
as.numeric (y)
#> [1] 1 2 3 4 5
Эта функция на самом деле весьма полезна, поскольку наборы данных, содержащие числа в виде символьных строк, являются обычным явлением.
Недоступно (NA)
Когда функция пытается преобразовать один тип в другой и обнаруживает невозможный случай, она обычно выдает предупреждение и превращает запись в специальное значение, называемое NA
для «недоступно». Например:
x <- c ("1", "b", "3")
as.numeric (x)
#> Предупреждение: НП введены принуждением
#> [1] 1 NA 3
R не догадывается, какой номер вы хотите, когда вы набираете b
, поэтому он не пытается.
Как специалист по данным, вы часто будете сталкиваться с NA
, поскольку они обычно используются для пропущенных данных, что является распространенной проблемой в реальных наборах данных.
Упражнения
1. Используйте функцию c
, чтобы создать вектор со средними высокими температурами в январе для Пекина, Лагоса, Парижа, Рио-де-Жанейро, Сан-Хуана и Торонто: 35, 88, 42, 84, 81 и 30 градусов по Фаренгейту. Назовите объект temp
.
2. Теперь создайте вектор с названиями городов и назовите объект city
.
3. Используйте функцию names
и объекты, определенные в предыдущих упражнениях, чтобы связать данные температуры с соответствующим городом.
4. Используйте операторы [
и :
, чтобы получить доступ к температуре первых трех городов в списке.
5. Используйте оператор [
, чтобы получить доступ к температуре Парижа и Сан-Хуана.
6. Используйте оператор :
, чтобы создать последовательность чисел \ (12,13,14, \ точки, 73 \).
7. Создайте вектор, содержащий все положительные нечетные числа меньше 100.
8. Создайте вектор чисел, который начинается с 6, не проходит 55 и складывает числа с шагом 4/7: 6, 6 + 4/7, 6 + 8/7 и так далее. Сколько номеров в списке? Подсказка: используйте seq
и длину
.
9. Каков класс следующего объекта a <- seq (1, 10, 0.5)
?
10. Каков класс следующего объекта a <- seq (1, 10)
?
11.Класс class (a <-1)
является числовым, а не целым. R по умолчанию имеет числовой формат, а чтобы ввести целое число, вам нужно добавить букву L
. Подтвердите, что класс 1L
является целым числом.
12. Определите следующий вектор:
и заставить его получить целые числа.
Сортировка
Теперь, когда мы освоили некоторые базовые знания R, давайте попробуем получить представление о безопасности различных государств в контексте убийств с применением огнестрельного оружия.
сорт
Допустим, мы хотим расположить штаты в порядке от наименее до большинства убийств с применением огнестрельного оружия.Функция sort
сортирует вектор в порядке возрастания. Таким образом, мы можем увидеть наибольшее количество убийств с применением огнестрельного оружия, набрав:
библиотека (dslabs)
данные (убийства)
сортировка (убийств всего $)
#> [1] 2 4 5 5 7 8 11 12 12 16 19 21 22
#> [14] 27 32 36 38 53 63 65 67 84 93 93 97 97
#> [27] 99 111 116 118 120 135 142 207 219 232 246250 286
#> [40] 293 310 321 351 364 376 413 457 517 669 805 1257
Однако это не дает нам информации о том, в каких штатах указано количество убийств.Например, мы не знаем, в каком штате было 1257.
заказать
Функция order
ближе к тому, что мы хотим. Он принимает вектор в качестве входных данных и возвращает вектор индексов, которые сортируют входной вектор. Это может показаться запутанным, поэтому давайте рассмотрим простой пример. Мы можем создать вектор и отсортировать его:
х <- с (31, 4, 15, 92, 65)
sort (x)
#> [1] 4 15 31 65 92
Вместо сортировки входного вектора функция order
возвращает индекс, сортирующий входной вектор:
индекс <- заказ (x)
x [индекс]
#> [1] 4 15 31 65 92
Это тот же результат, что и возвращаемый функцией sort (x)
.Если мы посмотрим на этот индекс, мы увидим, почему он работает:
х
#> [1] 31 4 15 92 65
заказ (x)
#> [1] 2 3 1 5 4
Вторая запись x
является наименьшей, поэтому порядок (x)
начинается с 2
. Следующая по величине - третья запись, поэтому вторая запись - 3
и так далее.
Как это помогает нам упорядочить штаты убийствами? Во-первых, помните, что записи векторов, к которым вы обращаетесь с $
, следуют в том же порядке, что и строки в таблице.Например, эти два вектора, содержащие названия состояний и аббревиатуры, соответственно, соответствуют их порядку:
убийств $ state [1: 6]
#> [1] «Алабама» «Аляска» «Аризона» «Арканзас» «Калифорния»
#> [6] "Колорадо"
убивает $ abb [1: 6]
#> [1] "AL" "AK" "AZ" "AR" "CA" "CO"
Это означает, что мы можем упорядочить названия штатов по количеству их убийств. Сначала мы получаем индекс, который упорядочивает векторы согласно общему количеству убийств, а затем индексируем вектор названий штатов:
ind <- заказ (всего $ убийств)
убивает $ abb [ind]
#> [1] "VT" "ND" "NH" "WY" "HI" "SD" "ME" "ID" "MT" "RI" "AK" "IA" "UT"
#> [14] "WV" "NE" "OR" "DE" "MN" "KS" "CO" "NM" "NV" "AR" "WA" "CT" "WI"
#> [27] "DC" "OK" "KY" "MA" "MS" "AL" "IN" "SC" "TN" "AZ" "NJ" "VA" "NC"
#> [40] "MD" "OH" "MO" "LA" "IL" "GA" "MI" "PA" "NY" "FL" "TX" "CA"
Согласно вышесказанному, в Калифорнии было больше всего убийств.
макс
и макс
Если нас интересует только запись с наибольшим значением, мы можем использовать max
для значения:
макс (всего $ убийств)
#> [1] 1257
и which.max
для индекса наибольшего значения:
i_max <- which.max (всего $ убийств)
убивает $ state [i_max]
#> [1] "Калифорния"
Для минимума мы можем использовать мин.
и , которые.min
таким же образом.
Означает ли это, что Калифорния - самый опасный штат? В следующем разделе мы утверждаем, что нам следует рассматривать ставки, а не итоги. Перед тем, как сделать это, мы вводим последнюю функцию, связанную с порядком: rank
.
рейтинг
Хотя функция order
и sort
используется не так часто, функция rank
также связана с порядком и может быть полезна.
Для любого заданного вектора он возвращает вектор с рангом первой записи, второй записи и т. Д.входного вектора. Вот простой пример:
х <- с (31, 4, 15, 92, 65)
ранг (х)
#> [1] 3 1 2 5 4
Подводя итог, давайте посмотрим на результаты трех введенных нами функций:
оригинал | Сортировать | заказывать | классифицировать |
---|---|---|---|
31 год | 4 | 2 | 3 |
4 | 15 | 3 | 1 |
15 | 31 год | 1 | 2 |
92 | 65 | 5 | 5 |
65 | 92 | 4 | 4 |
Остерегайтесь переработки
Другой частый источник незамеченных ошибок в R - использование повторного использования .Мы видели, что векторы складываются поэлементно. Поэтому, если векторы не совпадают по длине, естественно предположить, что мы должны получить ошибку. Но мы этого не делаем. Обратите внимание, что происходит:
х <- с (1,2,3)
у <- с (10, 20, 30, 40, 50, 60, 70)
х + у
#> Предупреждение в x + y: более длинная длина объекта не кратна меньшей
#> длина объекта
#> [1] 11 22 33 41 52 63 71
Предупреждение появляется, но ошибки нет. Для вывода R переработал числа в формате x
. Обратите внимание на последнюю цифру чисел в выводе.
Упражнения
Для этих упражнений мы будем использовать набор данных об убийствах в США. Убедитесь, что вы загрузили его перед запуском.
библиотека (dslabs)
данные («убийства»)
1. Используйте оператор $
для доступа к данным о численности населения и сохраните их как объект pop
. Затем используйте функцию sort
, чтобы переопределить pop
, чтобы он был отсортирован. Наконец, используйте оператор [
, чтобы сообщить о наименьшей численности населения.
2. Теперь вместо наименьшего размера совокупности найдите индекс записи с наименьшим размером совокупности. Подсказка: используйте для порядка
вместо для порядка
.
3. Фактически мы можем выполнить ту же операцию, что и в предыдущем упражнении, используя функцию which.min
. Напишите одну строку кода, которая сделает это.
4. Теперь мы знаем, насколько маленьким является наименьшее состояние, и какая строка его представляет. Какой это штат? Определите переменную состояния
как имена состояний из фрейма данных убийств
.Сообщите название штата с наименьшим населением.
5. Вы можете создать фрейм данных с помощью функции data.frame
. Вот быстрый пример:
темп <- c (35, 88, 42, 84, 81, 30)
city <- c («Пекин», «Лагос», «Париж», «Рио-де-Жанейро»,
«Сан-Хуан», «Торонто»)
city_temps <- data.frame (name = city, temperature = temp)
Используйте функцию rank
, чтобы определить рейтинг населения каждого штата от наименьшего до наибольшего.Сохраните эти ранги в объекте с именем ranks
, затем создайте фрейм данных с именем состояния и его рангом. Назовите фрейм данных my_df
.
6. Повторите предыдущее упражнение, но на этот раз закажите my_df
, чтобы состояния были упорядочены от наименее густонаселенных к наиболее густонаселенным. Подсказка: создайте объект ind
, который хранит индексы, необходимые для упорядочивания значений совокупности. Затем используйте оператор скобок [
, чтобы изменить порядок каждого столбца во фрейме данных.
7. Вектор na_example
представляет собой серию отсчетов. Вы можете быстро осмотреть объект с помощью:
данные ("na_example")
str (na_example)
#> int [1: 1000] 2 1 3 2 1 3 1 4 3 2 ...
Однако, когда мы вычисляем среднее значение с помощью функции mean
, мы получаем NA
:
среднее (na_example)
#> [1] NA
Функция is.na
возвращает логический вектор, который сообщает нам, какие записи являются NA
.Назначьте этот логический вектор объекту с именем ind
и определите, сколько NA
s имеет na_example
.
8. Теперь снова вычислите среднее значение, но только для записей, отличных от NA
. Подсказка: помните !
оператор.
Векторная арифметика
В Калифорнии было больше всего убийств, но означает ли это, что это самый опасный штат? Что, если в нем намного больше людей, чем в любом другом штате? Мы можем быстро подтвердить, что в Калифорнии действительно самое большое население:
человек. библиотека (dslabs)
данные («убийства»)
убивает $ state [который.макс (убивает население $)]
#> [1] "Калифорния"
с населением более 37 миллионов человек. Поэтому несправедливо сравнивать итоги, если мы заинтересованы в том, чтобы узнать, насколько безопасно это государство. Что нам действительно нужно вычислять, так это количество убийств на душу населения. В отчетах, которые мы описываем в разделе «Мотивация», в качестве единицы измерения использовались убийства на 100 000 человек. Чтобы вычислить это количество, пригодятся мощные возможности векторной арифметики R.
Изменение масштаба вектора
В R арифметические операции над векторами выполняются поэлементно .Для быстрого примера предположим, что у нас есть высота в дюймах:
. дюймов <- c (69, 62, 66, 70, 70, 73, 67, 73, 67, 70)
и хотите преобразовать в сантиметры. Обратите внимание, что происходит, когда мы умножаем дюймов
на 2,54:
дюймов * 2,54
#> [1] 175 157 168 178 178 185 170 185 170 178
В строке выше мы умножили каждый элемент на 2,54. Точно так же, если для каждой записи мы хотим вычислить, на сколько дюймов выше или меньше 69 дюймов, средний рост мужчин, мы можем вычесть это из каждой записи следующим образом:
дюймов - 69
#> [1] 0-7-3 1 1 4-2 4-2 1
Два вектора
Если у нас есть два вектора одинаковой длины, и мы суммируем их в R, они будут добавляться запись за записью следующим образом:
\ [ \ begin {pmatrix} а \\ б \\ с \\ d \ end {pmatrix} + \ begin {pmatrix} е \\ f \\ грамм\\ час \ end {pmatrix} знак равно \ begin {pmatrix} а + е \\ б + е \\ с + г \\ д + ч \ end {pmatrix} \]
То же самое верно и для других математических операций, таких как -
, *
и /
.
Это означает, что для вычисления количества убийств мы можем просто ввести:
murder_rate <- убийств $ всего / убийств $ населения * 100000
Как только мы это сделаем, мы заметим, что Калифорния больше не находится в верхней части списка. Фактически, мы можем использовать то, что мы узнали, чтобы упорядочить штаты по количеству убийств:
убийств $ abb [заказ (murder_rate)]
#> [1] "VT" "NH" "HI" "ND" "IA" "ID" "UT" "ME" "WY" "OR" "SD" "MN" "MT"
#> [14] "CO" "WA" "WV" "RI" "WI" "NE" "MA" "IN" "KS" "NY" "KY" "AK" "OH"
#> [27] "CT" "NJ" "AL" "IL" "OK" "NC" "NV" "VA" "AR" "TX" "NM" "CA" "FL"
#> [40] "TN" "PA" "AZ" "GA" "MS" "MI" "DE" "SC" "MD" "MO" "LA" "DC"
Упражнения
1.2/6 \).
3. Вычислите коэффициент убийств на 100 000 для каждого штата и сохраните его в объекте murder_rate
. Затем вычислите средний уровень убийств в США, используя функцию , среднее значение
. Что в среднем?
Индексирование
R предоставляет мощный и удобный способ индексирования векторов. Мы можем, например, выделить вектор на основе свойств другого вектора. В этом разделе мы продолжаем работать с нашим примером убийств в США, который мы можем загрузить следующим образом:
библиотека (dslabs)
данные («убийства»)
Подмножество с логическими элементами
Теперь мы рассчитали уровень убийств, используя:
murder_rate <- убийств $ всего / убийств $ населения * 100000
Представьте, что вы переезжаете из Италии, где, согласно новостному сообщению ABC, количество убийств составляет всего 0.71 на 100 000. Вы бы предпочли переехать в штат с аналогичным уровнем убийств. Еще одна мощная особенность R - то, что мы можем использовать логику для индексации векторов. Если мы сравниваем вектор с одним числом, он фактически выполняет проверку для каждой записи. Ниже приведен пример, связанный с вопросом выше:
инд <- коэффициент_убийств <0,71
Если вместо этого мы хотим узнать, меньше или равно значение, мы можем использовать:
инд <- коэффициент_убийств <= 0,71
Обратите внимание, что мы возвращаем логический вектор с ИСТИНА
для каждой записи, меньшей или равной 0.71. Чтобы увидеть, какие это состояния, мы можем использовать тот факт, что векторы можно индексировать с помощью логики.
убийств $ state [ind]
#> [1] "Гавайи" "Айова" "Нью-Гэмпшир" "Северная Дакота"
#> [5] "Вермонт"
Чтобы подсчитать, сколько из них ИСТИНА, функция sum
возвращает сумму элементов вектора, и логические векторы получают , приведенное к , приведенное к числовому, при этом ИСТИНА,
кодируется как 1, а ЛОЖЬ,
- как 0. Таким образом, мы можем подсчитайте состояния, используя:
Логические операторы
Предположим, нам нравятся горы, и мы хотим переехать в безопасное государство в западном регионе страны.Мы хотим, чтобы количество убийств было не больше 1. В этом случае мы хотим, чтобы были правдой две разные вещи. Здесь мы можем использовать логические операторы и , которые в R представлены как и
. Эта операция приводит к ИСТИНА
только тогда, когда оба логических логических значения ИСТИНА
. Чтобы убедиться в этом, рассмотрим следующий пример:
ИСТИНА И ИСТИНА
#> [1] ИСТИНА
ИСТИНА И ЛОЖЬ
#> [1] ЛОЖЬ
ЛОЖЬ И ЛОЖЬ
#> [1] ЛОЖЬ
В нашем примере мы можем сформировать две логические схемы:
запад <- убийства $ region == "Запад"
безопасный <- murder_rate <= 1
, и мы можем использовать и
, чтобы получить вектор логических значений, который сообщает нам, какие состояния удовлетворяют обоим условиям:
ind <- сейф и запад
убийства $ state [ind]
#> [1] «Гавайи» «Айдахо» «Орегон» «Юта» «Вайоминг»
, из которых
Предположим, мы хотим узнать количество убийств в Калифорнии.Для этого типа операций удобно преобразовывать векторы логических чисел в индексы вместо того, чтобы хранить длинные векторы логических чисел. Функция , которая
сообщает нам, какие записи логического вектора являются ИСТИННЫМИ. Итак, мы можем ввести:
ind <- который (убивает $ state == "Калифорния")
murder_rate [ind]
#> [1] 3.37
соответствие
Если вместо одного штата мы хотим узнать количество убийств для нескольких штатов, скажем, Нью-Йорка, Флориды и Техаса, мы можем использовать функцию match
.Эта функция сообщает нам, какие индексы второго вектора соответствуют каждой из записей первого вектора:
ind <- match (c («Нью-Йорк», «Флорида», «Техас»), убивает $ state)
инд
#> [1] 33 10 44
Теперь мы можем посмотреть на количество убийств:
скорость_ убийств [ind]
#> [1] 2,67 3,40 3,20
% в%
Если вместо индекса нам нужна логика, которая сообщает нам, находится ли каждый элемент первого вектора во втором, мы можем использовать функцию % в%
.Представим, что вы не уверены, являются ли Бостон, Дакота и Вашингтон штатами. Узнать можно так:
c («Бостон», «Дакота», «Вашингтон»)% в% убийств $ штат
#> [1] FALSE FALSE TRUE
Обратите внимание, что мы будем часто использовать % в%
на протяжении всей книги.
Продвинутый : существует связь между , соответствует
и % в% с
по , что
. Чтобы убедиться в этом, обратите внимание, что следующие две строки производят один и тот же индекс (хотя и в разном порядке):
совпадение (c («Нью-Йорк», «Флорида», «Техас»), штат $ убийств)
#> [1] 33 10 44
который (убивает $ state% в% c ("Нью-Йорк", "Флорида", "Техас"))
#> [1] 10 33 44
Упражнения
Начните с загрузки библиотеки и данных.
библиотека (dslabs)
данные (убийства)
1. Вычислите коэффициент убийств на 100 000 для каждого штата и сохраните его в объекте с именем murder_rate
. Затем используйте логические операторы для создания логического вектора с именем low
, который сообщает нам, какие записи murder_rate
ниже 1.
2. Теперь используйте результаты предыдущего упражнения и функцию which
для определения индексов murder_rate
, связанных со значениями ниже 1.
3. Используйте результаты предыдущего упражнения, чтобы сообщить названия штатов, в которых уровень убийств ниже 1.
4. Теперь расширите код из упражнений 2 и 3, чтобы сообщить о штатах на северо-востоке с уровнем убийств ниже 1. Совет: используйте ранее определенный логический вектор low
и логический оператор и
.
5. В предыдущем упражнении мы вычислили уровень убийств для каждого штата и среднее значение этих чисел. Сколько штатов ниже среднего?
6.Используйте функцию сопоставления, чтобы идентифицировать состояния с помощью сокращений AK, MI и IA. Подсказка: начните с определения индекса записей убийств $ abb
, которые соответствуют трем аббревиатурам, затем используйте оператор [
для извлечения состояний.
7. Используйте оператор % в%
, чтобы создать логический вектор, который отвечает на вопрос: какие из следующих сокращений являются действительными: MA, ME, MI, MO, MU?
8. Расширьте код, который вы использовали в упражнении 7, чтобы указать одну запись, которая представляет собой , а не , как фактическое сокращение.Подсказка: используйте !
оператор, который превращает FALSE
в TRUE
и наоборот, затем , который
для получения индекса.
Земельные участки
В главе 7 мы описываем дополнительный пакет, который обеспечивает мощный подход к созданию графиков в R. Затем у нас есть целая часть по визуализации данных, в которой мы приводим множество примеров. Здесь мы кратко опишем некоторые функции, доступные в базовой установке R.
участок
График Функция
может использоваться для построения диаграмм рассеяния.6
y <- убийств $ всего
участок (x, y)
Для быстрого построения графика, избегающего двойного доступа к переменным, мы можем использовать с функцией
:
с (убийства, заговор (население, всего))
Функция с
позволяет нам использовать имена столбцов убийств
в функции plot
. Он также работает с любыми фреймами данных и любыми функциями.
история
Мы опишем гистограммы, поскольку они связаны с распределениями, в части книги «Визуализация данных».Здесь мы просто отметим, что гистограммы представляют собой мощную графическую сводку списка чисел, которая дает вам общий обзор типов значений, которые у вас есть. Мы можем составить гистограмму наших показателей убийств, просто набрав:
x <- с (убийства, всего / население * 100000)
hist (x)
Мы видим, что существует широкий диапазон значений, большинство из которых находится в диапазоне от 2 до 3, а в одном очень крайнем случае коэффициент убийств превышает 15:
. убийств $ state [который.макс (х)]
#> [1] "Округ Колумбия"
коробчатый участок
Коробчатые диаграммытакже будут описаны в части книги «Визуализация данных». Они обеспечивают более краткое изложение, чем гистограммы, но их легче сочетать с другими коробчатыми диаграммами. 6 total_gun_murders <- убийств $ всего участок (население_в_миллионах, общее_пушечное_ убийство)
Имейте в виду, что во многих штатах население составляет менее 5 миллионов человек, и они являются скученными.Мы можем получить больше информации, сделав этот график в логарифмической шкале. Преобразуйте переменные с помощью преобразования log10
и затем постройте их.
2. Создайте гистограмму населения штата.
3. Создание диаграмм населения штата по регионам.
Классификация дорожных препятствий по их относительной скорости | Журнал EURASIP по обработке изображений и видео
Чтобы обнаруживать дорожные препятствия, отслеживать их, определять их положение и относительную скорость, используются следующие операции (как показано на Рис.1). Во-первых, область дороги обнаруживается с использованием метода классификации SVM (машина опорных векторов), чтобы отличить класс «дорога» от класса «бездорожье». Во-вторых, бездорожье в результате этого обнаружения подразделяется на две области: «препятствия» и «дорожная среда». После последней классификации выделяются три типа регионов: экологическая зона, дорожная зона и препятствия. Настоящие препятствия на дороге, такие как автомобили, пешеходы, ящики и т. Д., Относятся к классу «препятствия».”Мониторинг каждого из этих препятствий осуществляется с помощью алгоритма сопоставления SURF. Заключительный этап заключается в вычислении положения препятствий в поле зрения и вычислении их относительных скоростей, чтобы различать статические и динамические препятствия (в пределах 200 м впереди).
Рис. 1Блок-схема предлагаемого способа
Извлечение области дороги
Первый шаг в алгоритме состоит в сегментации изображения на область дороги и другую область, которая включает оставшуюся часть изображения («бездорожье»).Чтобы классифицировать один пиксель как член класса «дорога», существует ряд возможных методов сегментации на основе цвета, дескрипторов текстуры на основе статистических параметров, структуры или частотного спектра и т. Д. Хотя были получены некоторые приемлемые результаты когда использовались только цветовые компоненты, даже три десятилетия назад [14] или с использованием лучших кандидатов среди статистических данных текстуры и дескрипторов структуры [15], наши рассуждения здесь были ориентированы на более сложный подход, в котором цвет и текстура одновременно рассмотрено [16].
Предлагаемый алгоритм состоит из пяти компонентов. В первом компоненте извлечения признаков вектор признаков извлекается из каждого пикселя входного изображения. Во-вторых, компонент базы данных динамического обучения (DTD) заполнен обучающим набором, помеченным человеком-супервизором при инициализации и обновленным новым обучающим набором в режиме онлайн. В-третьих, компонент вычисления параметров классификатора используется для оценки параметров в классификаторе SVM. Четвертый компонент классификатора SVM отвечает за обучение и классификацию, который берет обучающие данные и параметры классификатора для обучения классификатора SVM и использует обученный классификатор SVM для классификации изображений на классы дороги / внедорожники.Последний компонент состоит из двух этапов: морфологической операции и операции онлайн-обучения. Первый реализует наращивание связной области и заполнение дыр в результате классификации для определения области дороги. Последний сравнивает морфологический результат и результат классификации для оценки качества текущего классификатора, затем выбирает новый обучающий набор из этого сравнения и обновляет DTD. Блок-схема, показанная на рис. 2, иллюстрирует этот алгоритм.
Рис.2Блок-схема алгоритма выделения участка дороги
В качестве начальной операции совокупности «дорожных» и «бездорожных» пикселей указываются действием оператора (водителя) путем маркировки соответствующих прямоугольных областей на изображении, как показано на рис.3. Такую же инициализацию можно произвести путем автоматического обозначения прямоугольного окна в центральной нижней части изображения, априорно гарантирующего, что содержимое типично для участка дороги. Таким образом, указывается исходное содержимое базы данных динамического обучения (DTD).
Рис. 3Инициализация DTD. Красные прямоугольники используются для «положительной» тренировки (дорожный класс), а синих прямоугольников - для «отрицательной» тренировки (внедорожный класс)
Для сокращения вычислений количество пикселей внутри прямоугольника ограничено до 1000.Если общее количество охваченных пикселей больше, одна тысяча из них будет выбрана случайным образом. Это DTD будет постоянно обновляться, чтобы следить за изменениями в дорожной сцене. Выбранный набор классификационных параметров рассчитывается для каждого последующего изображения. Процесс сегментации основан на методе SVM. Заключительный этап классификации - морфологическая обработка бинаризованного изображения. После завершения окончательной сегментации обновление, заключающееся в онлайн-обновлении DTD, является завершающим этапом перед получением нового образа. {2}} p (u, v)}} \ end {array} $$
(5)
$$ \ begin {array} {@ {} rcl @ {}} \ text {Correlation} & = & \ frac {\ sum \ limits_ {u} {\ sum \ limits_ {v} {(u.v) p (u, v) - \ mu_ {x} \ mu_ {y}}}} {\ sigma_ {x} \ sigma_ {y}} \ end {array} $$
(6)
, где IMD - обратный момент разностей, p ( u , v ) - элемент матрицы совместного появления уровней серого (GLCM), и ( μ x , мк y ) и ( σ x , σ y ) - средние значения и ковариации, рассчитанные с использованием этой матрицы.
Остальные три элемента вектора признаков - это пиксели, цвет USV и компоненты.
Естественно предположить, что пространство признаков классов «дорога» и «бездорожье» находятся в нелинейной зависимости и что не ожидается получения некоторой линейной гиперплоскости, которая различает эти два класса в исходном пространстве признаков. Следуя результатам, приведенным в [17], ядро радиальной базисной функции Гаусса (RBF) используется в качестве функции ядра SVM. Существует два классифицирующих параметра: параметр сложности C и параметр γ .Следует найти, какой из них больше подходит для этой дискриминации. Для этого выполняется параллельная проверка этих двух параметров на изображении, принадлежащем DTD.
Из-за непрерывных динамических изменений содержимого дороги в результате движения камеры, DTD необходимо время от времени обновлять. Было выбрано, что после каждых десяти кадров обучающие базы данных для обоих классов обновляются путем замены ста стохастически выбранных старых элементов сотней новых среди популяции пикселей, уже классифицированных в конкретный класс.Большее количество обновленных элементов приводит к чрезмерному влиянию неправильно классифицированных пикселей, в то время как при слишком малом количестве замененных дискретизированных пикселей можно ожидать низких адаптационных возможностей.
После этого шага классификации обычно появляется ряд небольших несвязанных групп пикселей вокруг дороги, классифицируемых как «дорога», а также количество «дыр» в районе дороги. Чтобы исключить такие небольшие скопления пикселей, алгоритм включает морфологические операции «открытие» и «заполнение дыр».
Обновление метода SVM [16] для онлайн-обучения не является обязательным, но очень полезно в контексте этого приложения. Помимо уже упомянутого обновления DTD, оно включает оценку эффективности текущей классификации. Этот процесс основан на основном предположении, что область дороги состоит из соединенных пикселей. В результате этого пиксели «дороги», обнаруженные за пределами основной области дороги, а также пиксели «вне дороги», расположенные над областью дороги, являются источниками информации о том, как следует модифицировать классификатор.
Выделение дорожных препятствий
Классификация внутри «бездорожья»
Для выделения дорожных препятствий необходимо удалить два вида объектов изображения: следы на дороге и окружающую среду за пределами дороги. Предполагается, что маркеры на дороге будут привязаны к региону дороги в предыдущем процессе обнаружения дороги. Окружающая среда вокруг дороги уже была классифицирована как «внедорожная» на первом этапе классификации.Этот шаг алгоритма ориентирован на разделение всего «бездорожья» на два подкласса: «препятствия на дороге» и «все остальное, что существует вне дороги».
На рисунке 4 показан результат обнаружения участка дороги (a) и шаблонное изображение области дороги (b), где черные пиксели представляют дорогу. После анализа конкретной строки изображения получают профиль, показанный на рис. 5. На основе этого профиля линии белые сегменты линии, которые имеют два смежных черных сегмента как с левой, так и с правой стороны, являются сегментами линии, принадлежащими дорожные препятствия.Эта классификация может быть проведена путем проверки каждой строки в шаблоне изображения дороги. Рисунок 4 c показывает результаты этой классификации. Общий класс препятствий на дороге представлен серыми пикселями на (d).
Рис. 4Фазы классификации внутри «недорожного» региона. a Результат обнаружения участка дороги. b Изображение шаблона области дороги. c Результат классификации регионов. d Зона препятствий
Фиг.5Линейный профиль значений яркости пикселей (260-я строка на изображении участка дороги)
Обнаружение и маркировка препятствий
После последней фазы классификации получаются три области (классы пикселей): область дороги, препятствия на дороге и область окружающей среды, при этом важен только класс препятствий на дороге. В этой области находится множество объектов разного размера (рис. 4). г). В качестве первого шага удаляются небольшие объекты (менее 50 пикселей), поскольку они считаются ложными препятствиями.
Выявленные препятствия должны отслеживаться непрерывно в последовательности входящих кадров. Чтобы подготовить этот этап слежения, следует указать некоторую область интереса - обнаруженные препятствия следует пометить, указав некоторое окно слежения, охватывающее каждое из них. Даже последний шаг в оценке относительной скорости строго зависит от выбора этой правильной геометрической формы, соответствующей конкретному препятствию. На рис. 6 показаны различные этапы маркировки препятствий на дороге.Рисунок 6 а показывает область реального препятствия после фильтрации нежелательных объектов. Красный прямоугольник вокруг этой области показан в b, который будет заменен на следующем шаге зеленым квадратом шириной, равной основанию красного прямоугольника, как в c. Окончательное представление области поиска, наложенное на исходное изображение, показано в d.
Фиг.6a - d Этапы разметки дорожных препятствий
Принцип отслеживания дорожных препятствий
Для оценки относительной скорости препятствий их следует отслеживать в последовательности кадров.Если камера неподвижна, разница между двумя последовательными изображениями будет использоваться в качестве естественного источника информации, какая часть изображения принадлежит стационарному фону, а какая часть может быть связана с движущимся объектом. В нашем конкретном случае камера сама по себе является движущимся объектом, и принцип слежения не может быть основан на этом рассуждении. Предыдущий шаг в предложенном алгоритме завершился выделением прямоугольной области вокруг обнаруженного дорожного препятствия, и фокус внимания должен быть направлен на эти области в последовательности входящих изображений.
Самая первая идея могла бы заключаться в том, чтобы определить в следующем кадре, в какой позиции можно найти общее содержимое прямоугольного окна вокруг препятствия, на основе некоторой меры корреляции. Очевидно, что этот принцип требует много времени и, более того, чувствителен к ожидаемым преобразованиям масштаба и вращения как для входящих, так и для исходящих препятствий.
В результате этого более целесообразно выбирать среди всех пикселей внутри окна отслеживания подмножество точек, которые являются характеристиками в соответствии с некоторым заранее заданным критерием, и отслеживать их от кадра к кадру.Эти характерные точки (ключевые точки) могут сильно различаться в зависимости от принципа извлечения и возможностей сохранения стабильности свойств объекта на основе их выбора. Ссылка [18] была источником исчерпывающего обзора методов, относящихся к предмету определения точек интереса, а также к дескрипторам, связанным с этими точками.
В основном наш выбор был ориентирован на точки, для которых характерны высокие значения локальных градиентов. Условия освещения между двумя последовательными кадрами не будут изменены в некоторой значительной степени, в то время как локальные градиенты будут сохранять почти постоянные значения при наличии аффинных преобразований.
Углы обычно используются в качестве характерных точек, поскольку их можно использовать для вычисления угловой ориентации элемента. Иногда настоятельно рекомендуется применить какую-либо фильтрацию нижних частот в качестве первого шага, чтобы уменьшить влияние шума. Таким образом, некоторые комбинации LP и HP фильтрации (типичный пример - лапласиан Гаусса - LOG) используются для извлечения углов как точек интереса.
Известный детектор Харриса [19] был проанализирован как первый среди подходящих кандидатов для выделения и описания характерных точек.Хотя некоторые очень хорошие результаты отслеживания были получены с использованием детектора Харриса в ряде типичных дорожных сценариев, было решено, что более сложное описание окрестностей вокруг точек «высокого градиента» предпочтительнее, чтобы преодолеть проблемы при изменении препятствия. его размер и ориентация быстро, что типично, когда приближающийся автомобиль близко приближается к камере или другое транспортное средство просто проезжает мимо автомобиля, на котором установлена камера.
Следующим выбором в этом направлении стал алгоритм SIFT (масштабно-инвариантное преобразование признаков).SIFT относится к дескрипторам спектров, обычно требующим более интенсивных вычислений с плавающей запятой. Он разработан Лоу [20, 21] и обеспечивает способ поиска точек интереса и дескрипторов характеристик, инвариантных к масштабу, повороту, освещению, аффинному искажению, преобразованиям перспективы и подобия, а также шуму. SIFT включает в себя этапы для выбора центральной окружающей круговой взвешенной разности гауссовских (DoG) точек интереса максимумов в масштабном пространстве для создания масштабно-инвариантной ключевой точки. Хотя алгоритм SIFT можно считать наиболее мощным для этой цели, он довольно сложен для любых приложений реального времени.
В качестве естественного кандидата, основанного на принципах SIFT, мы рассматривали алгоритм SURF [22] как версию, сокращающую время вычислений. Алгоритм SURF состоит из трех последовательных шагов [22, 23]. Первый шаг - это обнаружение точек интереса, а второй шаг - построение дескриптора, связанного с каждой из точек интереса. {2}} g (\ sigma) \) с image I в точке x , и аналогично для L xy ( p , σ ) и L гг ( p , σ ).Авторы аппроксимируют матрицу Гессе с помощью прямоугольных фильтров, аппроксимирующих производные Гаусса второго порядка, и фильтрация может выполняться с использованием интегральных изображений с очень низкой вычислительной сложностью, в то время как время вычисления не зависит от размера фильтра. Пусть D х , D xy и D гг быть приближениями L х , л xy и L гг соответственно.
Отклики фильтра далее нормализуются относительно их размера, что гарантирует постоянную норму Фробениуса для любого размера фильтра. Поскольку норма Фробениуса остается постоянной для прямоугольных фильтров любого размера, отклики фильтров нормализованы по шкале и не требуют дальнейшего взвешивания. Построение масштабного пространства начинается с фильтра 9 × 9. Затем применяются фильтры размером 15 × 15, 21 × 21 и 27 × 27 (рис. 7).
Рис.7Фильтры D х ( слева ) и D xy ( справа ) для двух последовательных уровней шкалы (9 × 9 и 15 × 15)
Назначение доминирующей ориентации для локального набора функций HAAR находится с использованием окна скользящего сектора размером \ (\ frac {\ Pi} {3} \).Это скользящее секторное окно поворачивается вокруг интересующей точки через определенные промежутки времени. В области скользящего сектора суммируются все характеристики HAAR. Это включает в себя как горизонтальные, так и вертикальные отклики, которые дают набор векторов ориентации. Выбирается наибольший вектор для представления ориентации доминирующего элемента. Для сравнения, SURF объединяет градиенты, чтобы найти доминирующее направление.
Чтобы создать вектор дескриптора SURF, вокруг интересующей точки устанавливается прямоугольная сетка из 4 × 4 областей, и каждая область этой сетки разбивается на подобласти 4 × 4.В каждой подобласти отклик вейвлета HAAR вычисляется по 5 × 5 точкам выборки. Конечный вектор дескриптора имеет размер 64: 4 × 4 области с четырьмя частями на область.
Предлагаемый алгоритм отслеживания
Ключевые точки извлекаются из прямоугольных областей, обнаруженных после шага, описанного в разделе 3.2. Эти ключевые точки описываются как векторы на этапе описания. Следующий шаг - сопоставление. Несколько векторов из базы данных сопоставляются с новыми векторами из нового входного изображения путем вычисления евклидова расстояния между этими векторами.Таким образом объекты можно будет распознать в новом кадре. Когда будет найдено достаточное количество совпадающих точек, конкретное препятствие помечается как распознанное и больше не проверяется. Некоторые новые препятствия появятся в этом новом кадре, и они будут рассмотрены в следующем, в то время как будут случаи, когда некоторые из ранее существовавших препятствий теперь исчезают или не распознаются. Непревзойденные препятствия будут рассматриваться в следующих кадрах как новые. Псевдокод, иллюстрирующий эту часть алгоритма.
Расчет относительных положений, скоростей и классификация дорожных препятствий
Общий случай восстановления пространственного и углового положения камеры
Пространственное и угловое положение камеры [24] (движущаяся система координат O c х c y c z c (CCF)) можно вычислить относительно внешней стационарной системы координат ( O я х я y я z я (ICF)) в соответствии с общими соотношениями, показанными на рис.8. Матрица преобразования между этими двумя кадрами координат определяется как T . О = т 1 ( ϕ ) T 2 ( 𝜗 ) T 3 ( ψ ), где угловая ориентация камеры относительно ICF определяется через набор углов Эйлера захвата, тангажа и крена ( ψ , 𝜗 , ϕ ) и Т i i = 1,2,3 - преобразование элементарной матрицы.За этим поворотным преобразованием следует перенос, заданный вектором положения \ (\ vec {R} \):
$$ \ begin {array} {@ {} rcl @ {}} \ vec {e} _ {C} = T_ {O} \ vec {e} _ {I}; & \ vec {R} = x_ {O} \ vec {e} _ {I1} + y_ {O} \ vec {e} _ {I2} + z_ {O} \ vec {e} _ {I3} \ end {array} $$
(8)
Рис. 8Иллюстрация общего случая восстановления положения камеры
Чтобы восстановить глубину сцены, \ (| \ vec {R} | \), нужно знать некоторую априорную информацию о расстоянии | O я M | между двумя точками внутри сцены (например,г., расстояние между точкой M в горизонтальной плоскости ICF и началом координат O я , как показано на рис. 8).
На практике восстановление положения основано на обнаружении прямоугольника ABCD в горизонтальной плоскости ICF с началом координат O я в сечении диагоналей, ось O я х я параллельно AB (в направлении точки схода P ), а ось O я y я параллельно BC (в направлении точки схода Q ), (рис.9).
Рис.9Процедура восстановления положения
Для этого конкретного приложения используются параллельные границы полосы движения, чтобы указать точку схода P (направление O я х я ), а направление O я y я перпендикулярно ему (согласно условию \ (\ vec {m} _ {P} \ vec {m} _ {Q} = 0 \)), а ширина полосы движения используется в качестве априори известного расстояния в ICF. .
«m-вектор» для любой точки изображения обычно определяется как:
$$ \ begin {array} {@ {} rcl @ {}} \ vec {m} = \ left [\ begin {array} {l} m_ {1} \\ m_ {2} \\ m_ {3 } \ end {array} \ right] = f \ left [\ begin {array} {l} \ frac {x_ {c}} {x_ {c}} \\ \\ \ frac {y_ {c}} {x_ {c}} \\ \\ \ frac {y_ {c}} {x_ {c}} \ end {array} \ right] = \ left [\ begin {array} {l} f \\ x_ {L} \ \ y_ {L} \ end {array} \ right]; & x_ {c} \ neq0 \ end {array} $$
(9)
, где f - фокусное расстояние, ( x c , y c , z c ) - координаты точки, представленной в CCF, и ( x л , y л ) - его координаты в фокальной плоскости.
Положение препятствия относительно камеры
Чтобы вычислить положение препятствия на дороге относительно камеры, установленной на движущемся транспортном средстве, следует применить принцип, проиллюстрированный на рис. 9. Этот принцип проиллюстрирован здесь на пример синтезированной последовательности изображений, предполагающей угловую ориентацию камеры (0 °, 0 °, −5 °), поле зрения ± 15 ° и фокусное расстояние f = 5 мм. В качестве первого шага необходимо выделить границы полосы в нижней части изображения, где они параллельны.Контрольный прямоугольник ABCD теперь выглядит так, как показано на рис.10. a априорно известная информация: ( A D ) // ( B C ), ( A ) B ) // ( C D ) и шириной полосы движения (в данном примере 3 м). Точка схода P является пересечением AD и B C , Q - это пересечение AB и DC , а O - центр прямоугольника ABCD .Рисунок 10. b показывает результат вычисления глубины сцены с использованием информации о расстоянии | O E | который равен половине ширины полосы движения и положению камеры относительно виртуальной точки O (вектор \ (\ vec {R} \)). Следующим шагом является вычисление расстояния до каждого препятствия на дороге путем предоставления виртуальной точки O с использованием глубины сцены, но здесь неизвестная величина становится | O я M | = | O O 1 |.Путевая точка О 1 - центр основания зеленого квадрата (результат алгоритма, описанного в разделе 3). Рисунок 10. c иллюстрирует этот последний шаг в вычислении глубины сцены до точки O 1 , а на рис.10 d показано расстояние камеры от препятствия. Расчетное относительное положение составляет (-29,38, -3,07,1,51) [м], а реальное - (-30, -3.15,1,5) [m], вводя относительную ошибку (2,1,2,5,0,67) % .
Фиг.10a - d Иллюстрация реконструкции положения камеры
Относительные скорости
Чтобы вычислить относительную скорость каждого препятствия на дороге, нужно сначала вычислить относительные положения в последовательные моменты времени t и t +1, как показано на рис.{t}} {\ bigtriangleup t} \ end {array} $$
(10)
Фиг.11a - c Иллюстрация расчета относительной скорости
Классификация
В Относительный = В Препятствие - V Камера
$$ \ begin {array} {@ {} rcl @ {}} & \ Rightarrow V _ {\ text {Препятствие}} = V _ {\ text {Relative}} + V _ {\ text {Camera}} \ end {array} $$
(11)
Классификация проводится по:
$$ \ begin {array} {@ {} rcl @ {}} & V _ {\ text {Препятствие}} = 0 & \ Rightarrow \ text {Стационарный} \\ & V _ {\ text {Препятствие}} <0 & \ Rightarrow \ текст {входящий} \\ & V _ {\ text {Препятствие}}> 0 & \ Rightarrow \ text {исходящий} \ end {array} $$
(12)
Потенциальные препятствия
Помимо препятствий, которые уже существуют на дороге, которые следует классифицировать в соответствии с их скоростью относительно движущейся камеры, есть некоторые объекты, потенциально внезапно входящие на дорогу с боковых сторон.Это пешеходы, которые нерегулярно переходят улицу, или транспортные средства, совершающие некоторые парковочные маневры возле трамвайных путей, животные на дороге и т. Д. Хотя было показано, что первоначальную классификацию дорожного покрытия можно произвести путем надлежащей характеристики на основе цвета и особенности текстуры, тот же подход практически невозможно применить при рассмотрении соседнего бездорожья из-за огромного разнообразия всевозможных непрерывно меняющихся фонов «вне дороги».Для того чтобы учесть эти потенциальные препятствия, их также следует обнаруживать и характеризовать между собой относительно их составляющей скорости, перпендикулярной ориентации дороги, следующим образом.
Во-первых, точка схода P должна быть определена как пересечение линий полосы движения и границы дороги. Затем можно выделить соседнюю полосу справа от дороги (3 м в ширину и 30 м в длину) и рассмотреть ее с точки зрения распределения силы света.Все пиксели с интенсивностью света за пределами области, указанной как ± σ (стандартное отклонение) вокруг среднего значения, являются кандидатами на представление потенциальных объектов.