Содержание

союзы — Как правильно пишется союз перед перечислением: как то или как-то?

Зализняк, конечно, ученый авторитетный, но пока неясны мотивы разного написания как-то/как то в 1980 году и в 2000 году. Придавал ли он этому значение, занимался ли проблемой напрямую, принимал ли непосредственное участие в изменении письма?

Я же попробую дать свое видение проблемы.

До 1956 года в русской орфографии было немало парных написаний, которые выбирались авторами произвольно, по своему желанию, поэтому не удивляет их наличие в словаре 18 века. Собственно говоря, именно принятые тогда правила утвердили нормы, которые нужно было теперь соблюдать однозначно.

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

Дефисное письмо подсказывает нам слитное произношение, при этом ударение удобно ставить на первом слоге.

У наречия кАк-то имеется (или раньше имелся) синоним – пояснительный союз кАк-то, стоящий перед перечислением и имеющий значение «а именно, то есть». Здесь используются те же формы, что и у наречия (фонетическая и графическая), хорошо знакомые пользователям. Это кого-то удивляет, разве в русском языке нет синонимов? Грамматическая роль наречия и союза

ЛЕГКО РАЗЛИЧАЕТСЯ, что же еще надо?

Зачем нужно делить союз на части, ведь и так ясна его исходная структура. Нет, хочется, разделили, и что имеем?

И ударение перенесли на частицу тО, да только зачем? Всё равно в предложении слоги как и то произносятся слитно, но только теперь с ударением на втором слоге, так что образуется странное слово «кактО». Стоит оно в позиции между двумя паузами и выглядит как уточнение. Изменили узнаваемую фонетику, графику, изобрели «кактО», обособили.

Ну и как, нравится?

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

И еще одно достижение. Нас предупреждают. Не смешивать с сочетанием союза и местоимения: «Глаза были синие, как то небо, а косы светлые, будто она их мыла в золотой воде». Что ж, хотели дифференцировать (это так важно!), но одно различили, другое смешали.

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

Вспомним еще раз Булгакова: «А вы соглашались с вашим собеседником? — На все сто!»

Вот никогда не надо соглашаться «на все сто», разве это неясно (шутка).

ДОПОЛНЕНИЕ

Итак, крамольную форму как-то все дружно заклеймили еще в 2014 году. По-зор! По-зор! Как только академики пропустили такое безобразие! В образовательном процессе главное – это однозначная правильность,

инакомыслие очень вредит детям.

Но я всё-таки приведу другой диалог из того времени:

– Вот только удивляет одно: почему в современных учебниках, автор которых И. Б. Голуб, «как то», перед перечислением рекомендуется писать через дефис. Неужели такой авторитетный лингвист не видит разницы между как-то и как то?

– А может быть они считают, что союз «как-то» пишется через дефис, как и местоимение.

«Как-то» или «как то», как пишется правильно?

В рус­ском язы­ке суще­ству­ют оба вари­ан­та напи­са­ния сло­ва: «как-то» и «как то». Выбор дефис­но­го или раз­дель­но­го напи­са­ния этих раз­ных слов зави­сит от того, какая это часть речи, и от кон­тек­ста употребления.

Чтобы опре­де­лить, когда сле­ду­ет пра­виль­но писать сло­во «как-то» с дефи­сом или «как то» раз­дель­но, рас­смот­рим ряд примеров.

Слово «как-то» пишется с дефисом

В кон­тек­сте сло­во «как-то» чаще все­го явля­ет­ся неопре­де­лён­ным место­имен­ным наре­чи­ем. Согласно орфо­гра­фи­че­ско­му пра­ви­лу с части­цей — «то» неопре­де­лен­ные место­име­ния и место­имен­ные наре­чия пишут­ся через дефис, например:

Мать при­е­ха­ла ка́к-то из деревни.

В этом кон­тек­сте сло­во «как-то» сино­ни­мич­но наре­чию «когда-то».

Здесь ка́к-то жарко.

Здесь наре­чие «ка́к-то» упо­треб­ле­но в зна­че­нии меры, сте­пе­ни состо­я­ния: по смыс­лу оно рав­но­знач­но сло­вам «очень», «слиш­ком», «крайне жар­ко».

Девушка гово­ри­ла ка́к-то неесте­ствен­но гром­ким голосом.

В этом пред­ло­же­нии наре­чие «ка́к-то» име­ет зна­че­ние «подоб­но».

В нареч­ных сло­во­со­че­та­ни­ях «ка́к-то раз», «ка́к-то так» рас­смат­ри­ва­е­мое сло­во так­же име­ет дефис­ное написание.

Ка́к-то раз дере­вен­ские девуш­ки пошли в лес по ягоды.

Разговорное выра­же­ние «как-то раз» сино­ни­мич­но наре­чию «одна­жды».

Все это сле­ду­ет сде­лать ка́к-то так, я думаю, а не иначе.

Слово «как то» пишется раздельно

1. Сочетание «как то» пишет­ся раз­дель­но, если оно скла­ды­ва­ет­ся из двух само­сто­я­тель­ных слов: сою­за «как» и ука­за­тель­но­го место­име­ния сред­не­го рода «то».

Из окна про­смат­ри­ва­лось как то зда­ние с поло­щу­щим­ся фла­гом на кры­ше, так и часть ули­цы, по кото­рой ходи­ли трамваи.

В дан­ном пред­ло­же­нии упо­треб­лён состав­ной союз «как…, так и» и ука­за­тель­ное место­име­ние «то».

2. При пере­чис­ле­нии в пред­ло­же­ни­ях с обоб­щен­ным сло­вом упо­тре­бим ввод­ное сло­во «как то», рав­но­знач­ное «а имен­но», «то есть», кото­рое пишет­ся без дефи­са , например:

На база­ре народ­ные умель­цы про­да­ва­ли раз­лич­ные гли­ня­ные изде­лия, как то: сви­стуль­ки, брыз­гал­ки, кув­ши­ны и миски.

Если все же воз­ник­нет сомне­ние в пра­виль­ном напи­са­нии этих слов, под­сказ­кой может стать раз­ни­ца в их произношении.

Разница в уда­ре­нии. Если в сло­ве «ка́к-то» уда­ре­ние пада­ет на бук­ву «а», то при раз­дель­ном напи­са­нии «как то́» на бук­ву «о».

Есть еще один вари­ант, когда «как то» пишет­ся раз­дель­но. В лите­ра­тур­ных про­из­ве­де­ни­ях ино­гда мож­но встре­тить выра­же­ние типа:

«…Глаза были синие, как то небо…» (К. Паустовский).

Скачать ста­тью: PDF

Назначение платежа при перечислении подотчетному лицу

Назначение платежа при перечислении подотчетному лицу — важная информация, поскольку в ней указывается, на какие именно цели расходуются средства.

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

Необходимость правильного назначения платежа подотчетному лицу в платежке

Организации могут выдавать сотрудникам подотчетные суммы путем перечисления средств на их карточные счета в банке, причем карта может быть как личной, так и корпоративной. И хотя законодательно напрямую возможность безналичного подотчета не прописана, в письме Минфина РФ от 25.08.2014 № 03-11-11/42288 имеется четкое разрешение на проведение указанных операций.

ВНИМАНИЕ! С 30.11.2020 изменились некоторые правила выдачи денежных средств под отчет и сроки представления авансового отчета.

Какие именно нововведения в порядке учета кассовых операций вступили в действие с 30.11.2020, рассказали эксперты КонсультантПлюс. Получите пробный доступ к системе К+ и бесплатно переходите в обзорный материал.

Узнайте о внутреннем документе компании, описывающем нюансы расчетов с подотчетными лицами, из материала «Положение о расчетах с подотчетными лицами – образец».

При этом самое главное, на что следует обращать внимание, — правильное оформление в платежном поручении поля «Назначение платежа».

О роли реквизита «Назначение платежа» узнайте из этой публикации.

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

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

Последствия неправильного оформления назначения платежа

При неправильном оформлении назначения платежа возможно развитие событий по 2 вариантам:

  1. Банк может не принять платежное поручение, поскольку в некоторых кредитных учреждениях установлены конкретные требования по заполнению этой графы.
    О том, как заполнить назначение платежа по подотчетным средствам, следует узнавать в банке, обслуживающем организацию.
  2. Контролирующие органы могут посчитать, что перечисленные работнику безналичные суммы — это его заработная плата, а потому налоговая служба потребует удержать и перечислить НДФЛ и взносы на соцстрахование.

Однако Минфин России считает данные претензии со стороны налоговой службы неправомерными, о чем указано в его письме от 08.04.2010 № 03-04-06/3-65.

Об ошибках при учете расчетов с подотчетными лицами читайте в статье «Ошибки, допускаемые в учете расчетов с подотчетными лицами».

Оформление платежного поручения при выдаче в подотчет

Чтобы правильно оформить платежное поручение для перечисления денежных средств сотруднику в подотчет, необходимо придерживаться стандартного порядка действий:

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

Порядок учета командировочных расходов в 2021 году см. по ссылке.

  • В-третьих, с 01.06.2020 в реквизите 20 «Наз. пл.» при выплате подотчетных нужно указывать код 2.

Подробная информация о том, как работать с кодами доходов, есть в системе КонсультантПлюс. Получите пробный доступ к К+ бесплатно и переходите в Обзор.

Именно код выплаты и указание в назначении платежа, что перечисляемые средства являются подотчетными суммами, позволяет обезопасить организацию от претензий контролеров. Сформулировать назначение платежа можно по следующему образцу:

  • «Перечисление подотчетных средств на счет сотрудника Иванова С. Р. согласно приказу от 12.03.2021 № 18/П. Без НДС» — такая фраза будет уместна при перечислении безналичного аванса.
  • «Компенсация перерасхода сотруднику Иванову С. Р. по авансовому отчету от 15.03.2021 № 32. Без НДС» — такая формулировка может использоваться при возмещении перерасхода сотруднику.

Подробнее о выдаче подотчетных сумм на командировочные расходы читайте в материале

«Выдано в подотчет на командировочные расходы — проводка».

Итоги

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

Более полную информацию по теме вы можете найти в КонсультантПлюс.
Пробный бесплатный доступ к системе на 2 дня.

Так же и также: 5 слов, которые вымогают у вас пробел

Если составить список самых частых ошибок в русском языке, то неверное написание «также/так же» или «тоже/то же» может побороться за попадание в рейтинг «лучших». Сегодня «Мел» напомнит, чем отличается слитное и раздельное написание этих и других слов, и расскажет, как больше не сомневаться и всегда писать правильно.

Полезная рассылка «Мела» два раза в неделю: во вторник и пятницу

Следует отличать союз «также» (в значении «и» или «ещё») от указательного местоимения «так» с частицей «же», которая со своей стороны пишется отдельно. Проверить достаточно просто: если «также» можно без потери смысла заменить на союз «и», пишем слитно. Например: «Он был учителем географии, который также преподавал алгебру».

Раздельный вариант нередко употребляется с «как» (в значении «таким же образом, как»), а частицу «же» можно спокойно опустить. К примеру, «Жиры так же важны для организма, как белки и углеводы».


Если вы хоть немного разобрались с прошлым пунктом, то дальше сюрпризов не будет. Союзы «также» и «тоже» — синонимы и могут легко заменять друг друга. Когда одно нельзя заменить другим, то, вероятно, перед нами местоимение и частица. Кроме того, сочетание «то же» часто сопровождается словами «самое» и «что»: «Он делал то же, что и вчера», «То же самое касается нормативов сдачи ЕГЭ». А ещё существует прекрасный сайт-шпаргалка, который стоит добавить в закладки и проверять себя в моменты неуверенности.


Многие, возможно, удивятся: действительно, существует два варианта написания, но в большинстве случаев, конечно, «чтобы» — это союз, и он пишется слитно. К примеру: «Хочу, чтобы поскорее начались каникулы!». А когда выражение можно произнести без частицы «бы», то, соответственно, «что бы» пишется раздельно: «Что бы мне сегодня такое надеть?»


Когда мы подводим итоги сказанному, в качестве вводного слова можем использовать «итак» в значении «таким образом, следовательно». Но если к «и так» можно задать вопрос «как? насколько?», то пишем его раздельно: «И так заканчивался каждый его день».


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

25 самых частых ошибок в русском языке, которые не перестают раздражать

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

Полезная рассылка «Мела» два раза в неделю: во вторник и пятницу

Правильно: поначалу все молчали

Поначалу научитесь отличать одну часть речи от другой. Как только освоите эту магию, так сразу минус одна неловкая ошибка. «Поначалу» — это наречие (когда? — поначалу все молчали), а «по началу» — существительное с предлогом (по чему? — по началу текста я не понял, о чём эта статья). Поодиночке эти слова не распознаешь, но по контексту легко догадаться, как писать правильно. Имейте в виду, что «поначалу» — это разговорный вариант наречий «вначале» и «сначала». Не злоупотребляйте.


Правильно: уплачено

Можно подумать, что именно так проявляется диалектное «оканье», но нет. Первое правило: ни в коем случае не писать и не говорить «уплОчено». Второе правило — не путать глаголы-паронимы «оплатить» и «уплатить», у которых один корень «плат». Глагол «оплатить» употребляем, когда говорим о том, за что платят (но без предлогов!): оплатить учёбу, проезд, товар. «Уплатить» вступает в игру, когда собираемся сказать о том, что именно платят: уплатить налоги, штраф.


Правильно: вместо

Разница в две (одну?) букву, а результат налицо. «Заместо» и «вместо» соседствуют в словарях и означают одно и то же, то есть они синонимы. Дело в стилистике: «заместо» — просторечие, которое не рекомендуется употреблять даже в разговорной речи. Но его легко превратить в литературное слово: просто говорите «вместо». Профит!


Правильно: кладут

Боль граммар-наци и всех неравнодушных. Можно класть, можно положить, а ложить — нельзя. Глагол «ложить» употребляется только с приставками («положить», «доложить», «уложить»), а «класть», наоборот, без приставок. Если решите «покласть» — так тоже не стоит, пожалуйста.


Правильно: течёт

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


Правильно: их, его

Если говорить об общепринятых правилах, то никакого «ихнего», «евонного» и даже «ейнного», конечно, нет. Для обозначения принадлежности к третьему лицу в единственном и множественном числах правильно употреблять местоимения «их», «его» и «её». А если кто-то пытается убедить вас, что даже классики использовали такую форму, — кивните. Действительно использовали, но язык-то меняется. Сегодня «ихний» и «евонный» — просторечные формы и грубые ошибки.


Правильно: в общем, вообще

«Вообщем» встречается так часто, что уже нет сил беситься и пытаться объяснять: такого слова в русском языке не существует. Да-да, вам не показалось: нет такого слова — «вообщем». Вместо него есть два похожих наречия «в общем» и «вообще», которые некоторые любят соединять. Об этом же свидетельствуют более 20 миллионов (!) запросов по слову «вообщем» в гугле. И ловите хорошую шпаргалку — спасибо за неё хорошим людям.


Правильно: мой день рождения

День рождения — в самом деле грустный праздник. Как только над ним не издеваются! И «день рожденЬЯ», и «день рожденИЕ», и «с днём рождениЕМ», и даже «с днёмрожденьем». Всё неправильно. «День рождения» — устойчивое выражение, в котором склоняется главное слово «день», а зависимое — «рождения» — остаётся неизменным: пойдём на день рождения, поздравляю с днём твоего рождения, папин день рождения. И забудьте про средний род.


Правильно: до свидания

Научитесь правильно поздравлять с днём рождения, а потом сразу же беритесь за грамотное прощание. Досвидание, до свидание, досвиданья, до свидания. Проблема идентичная, и решение такое же: к главному слову нужно правильно задать вопрос. До — чего? — свидания. Другой вопрос, честно говоря, и не задашь. А если встретите вариант «до свиданья», скорую лингвистическую помощь вызывать рано: такое окончание допустимо, но в разговорной речи.


Правильно: спросонья

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


Правильно: типа

Излюбленное слово-паразит, которое очень (ОЧЕНЬ) многие пишут неправильно — «типо». Доказывает соцсеть «ВКонтакте», которая даже изобрела к прошлогоднему «Тотальному диктанту» алгоритм слов-паразитов и частых ошибок. Слово «типа» может выступать в роли междометия, частицы (синонима «вроде») и даже бессмысленного слова-паразита. Например: «Ты граммар-наци?» — «Да, типа того». То есть похож на граммар-наци, но до конца не понял.


Правильно: сгибать

У грамотного человека не должно быть сомнений. Правильный вариант один — «нагибаться», без каких-либо исключений или стилевых помет. Так что любой сустав вы «сгибаете», а не «сгинаете», даже если ортопед, фитнес-тренер или ваша бабушка говорят иначе.


Правильно: будущие

Следущий, будующий… Ой, кажется, мы всё перепутали. В «следующем» не хватает буквы «ю», а в «будущем», наоборот, она не нужна. Запомнить можно так: «следую» — «следующий», «буду» — «будущий». Запомнили? Отлично, едем дальше.


Правильно: вряд ли

Хватит сомневаться. И не только в написании частицы, но и вообще во всём. Чтобы стать немного увереннее (хотя бы в русском языке), запомните: «вряд ли» и «навряд ли» всегда пишутся раздельно. Даже если в интернете на каждом шагу «вряд-ли», «врятли», «наврядли» и ещё десяток разнообразных вариантов. Если не можете запомнить — вспоминайте Брюса Ли. Его имя подскажет. А его вид намекнёт, что ошибаться не стоит. Будьте как Ли.


Правильно: в смысле, в принципе

Почти 2 миллиона (!) результатов в гугле по запросу «всмысле». И это ещё не всё! Больше пяти миллионов (!) результатов по запросу «впринципе». Чтобы усилить эффект, скажем, что оба этих наречия пишутся раздельно. Всегда. При любых условиях. В разных предложениях.


Правильно: прийти

Мы пишем «идти», но когда дело доходит до слова «прийти», всё меняется. Всё потому, что глагол «идти» ещё давным-давно писался как «итти». Да что там давно — ещё в 50-х годах по старым правилам слово «прийти» как только не писали: «придти», «итти», «притти». Теперь, к счастью, осталась одна форма. Аллилуйя!


Правильно: мороженое

Коварное лакомство, которое ловит на ошибке даже по-настоящему грамотных людей. Проговаривая слово про себя, мы будто произносим двойную «н», но на письме такого быть не должно. «Мороженое» — существительное, образованное от глагола несовершенного вида «морозить», пишется с одной «н». Появление «нн» возможно только в случае, если глагол «морозить» превращается в прилагательное с зависимыми словами или причастие. Например, «замороженный Вестерос».


Правильно: участвовать

Принять учавствие, учавстник, учавствовать — что-то не то и немного режет глаз, да? Всё потому, что в слове «участвовать» две «в», а не три. Не пытайтесь поставить рекорд. Тут же можно вспомнить «чувствовать», которое некоторые пишут как «чуствовать». Эффект обратный: буква не произносилась, поэтому и не нужна.


Правильно: чересчур

Раздельно или слитно? «С» или «з»? К этому наречию вопросов слишком много. Возможно, потому что оно означает степень и меру. В теории «через Чур» может употребляться в таком виде, если вы кому-то рассказываете о своих увлекательных приключениях, связанных с переходом речки Чур в Удмуртии. Если нет, во всех остальных случаях пишите «чересчур».


Правильно: девчонки

«Мальчишки и девчонки, а также их родители! Весёлые истории увидеть не хотите ли?» Пока вы вовсю ностальгируете по «Ералашу» (почитайте вот этот текст), мы разберём ещё одну частую ошибку. Девочка превращается в девчонку с помощью суффикса «онк». Ещё одна подсказка со школы: под ударением пишите «о», без ударения — «е». Третьего варианта быть не может.


Правильно: созвонИмся?

Чудовищная ошибка, которая крепко-накрепко засела в нашей речи. Особенно в речи тех, кто живёт в маленьких городах и посёлках. Казалось бы, всё очень просто. Есть проверочное слово — «звонить». Попробуйте произнести его с ударением на «о». Получилось? Вот и в слове «созвонимся» двух мнений быть не может.


Правильно: в течение часа

Если вам кто-то пообещал ответить в «течении дня» — дело плохо. Можно точно не ждать ответа в этот день. И заранее подготовиться, что в письме будут орфографические ошибки, а по ним судить письмо не совсем правильно (точнее, зависит от цели письма). «В течении» — сочетание предлога с существительным «течение» (ручья или реки). «В течение» — целиком предлог, связанный с временными промежутками. Чтобы больше не ошибаться, научитесь подбирать правильные вопросы: если к словам «в течении/в течение» нельзя задать вопрос «где?», тогда точно пишем на конце -е. Например: «Маша уронила в реку яблоко, и оно скрылось в течении реки». Скрылось — где? В течении реки. «В течение трёх дней я отвечу вам на письмо». Три дня — промежуток времени, значит, пишем «в течение».


Правильно: надень шапку!

Конечно, вы знаете, в каких случаях нужно говорить «надевать», а в каких — «одевать». Но на всякий случай повторим: первый вариант употребляем, когда говорим о неодушевленных предметах («надеть куртку»), а второй вариант — когда о людях или предметах, их обозначающих («одеть куклу»). Да-да, тут в вашей голове начнёт всплывать что-то про Надежду и одежду. Продолжайте вспоминать — всё правильно!

12 советов о том, как правильно вести список дел

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

Мы собрали для вас 12 советов, как правильно планировать свой день, тем самым увеличивая продуктивность и используя свое время по максимуму.

1) Пользуйтесь приложением

Хотя некоторые из нас предпочитают по старинке пользоваться ежедневником или клеить записки на монитор, такой список сложно все время держать под рукой. К тому же, ежедневник можно случайно оставить дома и из-за этого забыть что-то важное.

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

На рынке приложений есть множество менеджеров задач с разным набором функций и интерфейсом, так что вы можете выбрать приложение по вкусу. Возможно, вам приглянется что-то из списка 9 лучших менеджеров задач по версии Forbes. Среди них есть как платные, так и бесплатные приложения, так что обратите внимание на описания и скриншоты.

Лично нам нравится Todoist из-за его простого и понятного интерфейса.

2) Планируйте свой день заранее

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

Попробуйте каждый вечер выделять 10 минут на то, чтобы распланировать завтрашний день. Используйте календарь или планировщик и выделите достаточно времени на каждую задачу. Если времени на все задачи не хватает, пересмотрите ваш список и расставьте приоритеты заново.

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

3) Разделяйте работу и личную жизнь.

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

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

Есть и другие варианты установления баланса между работой и личной жизнью. Интересные идеи можно почерпнуть в материале «Как соблюдать режим дня: 20 правил от гениев»

4) Составьте список того, чего делать не нужно

Если вам часто не хватает времени на выполнение всех задач из списка дел, попробуйте составить список того, чего делать не нужно. Проанализируйте всё то, чем вы занимаетесь, и попробуйте отказаться от вещей, которые не приносят особой пользы.

Задайте себе несколько вопросов о том, как вы проводите время на работе. На что вы тратите больше всего времени? Как определенные вещи меняют вашу жизнь? Полезны ли эти вещи для вашей карьеры? А для личной жизни? Составьте список вещей, которые не приносят пользы, не реализуемы или просто зря отнимают ваше время.

Например:

— Не назначайте встречи с каждым, кто об этом просит

— Не делайте вручную то, что можно автоматизировать

— Не тратьте много времени на мелочи (вроде выбора подходящего шрифта для заголовка)

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

Если у вас пока нет вдохновения, можете переписать в свой список несколько пунктов отсюда или отсюда.

5) Сделайте ваш список дел доступным для других

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

Во-вторых, это необходимо в случае, если вы работаете над одной задачей с вашим деловым партнером или командой. Некоторые приложения (мы в Чатре используем Asana, но Basecamp тоже отличный инструмент) позволяют вам разделять задачи на подзадачи, и каждую подзадачу назначать нужному человеку. Благодаря таким приложениям вы можете держать коллег в курсе вашего прогресса, а также оставлять комментарии, если вам нужно что-то обсудить или уточнить.

6) Резервируйте время в календаре

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

Нужно набросать план речи? Зарезервируйте несколько часов после обеда или с утра. Предстоит встреча с важным клиентом, и хотите заранее уточнить некоторую информацию? Зарезервируйте полчаса перед встречей.

Крейг Джарроу, автор Time Management Ninja, однажды зарезервировал почти половину времени в своем календаре в Outlook и в каждый блок поставил задачу, которую ему нужно было выполнить. В результате неделя оказалась невероятно продуктивной. Благодаря резервированию времени он избежал приглашений на спонтанные совещания, смог выполнить свои обязательства и не позволил другим его отвлекать.

Совет от Time Management Ninja: используйте только один календарь. Можно использовать разные цвета для личных и рабочих задач, но календарь должен быть только один, если вы не хотите упустить что-нибудь важное.

7) Группируйте задачи

Мультизадачность — это миф. Даже если вам кажется, что вы легко справляетесь с несколькими задачами одновременно, исследование показывает, что наш мозг на это неспособен. Он не выполняет задачи одновременно, а просто быстро переключается между ними.

Предположим, вы отвечаете на письма, слушая музыку. Попробуйте одновременно печатать ответ и осознавать слова песни — скорее всего, это окажется довольно сложно. И каждый раз, когда вы переключаетесь между осознанием музыки и обдумыванием ответа, в вашем мозгу останавливается один процесс и запускается другой. Это влияет на нас негативно: из-за такого переключения мы тратим время (пусть и микросекунды) и энергию, работаем менее эффективно и рискуем допустить больше ошибок.

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

Несколько примеров того, что стоит сгруппировать:

  • Электронная почта. Проверяйте почту и отвечайте на письма один или два раза в день вместо того, чтобы отвечать на них сразу (если вы, конечно, не работаете в поддержке). Например, выделите на это время перед обедом и вечером.
  • Телефонные звонки. Записывайте куда-нибудь контакты всех людей, которым вам нужно позвонить, и раз в день совершайте все необходимые звонки за один заход. Время можете выбрать сами, но лучше исключить обеденные часы.
  • Задачи. Когда у вас есть важные задачи, которые тем или иным образом между собой связаны, лучше выполнять их разом, одну за другой.
  • Планирование. Выделите несколько часов на то, чтобы обдумать и спланировать вашу следующую крупную цель или идею.
  • Отслеживание информации. Можно легко «подсесть» на проверку данных и постоянно проверять статистику вашего сайта или показатели по месячной выручке. Выделите на это отдельное время и проверяйте данные раз в неделю или месяц.

8) Назначайте срок исполнения задачи

У вас бывало такое, что у какой-то важной задачи не было конкретных временных рамок, и вы откладывали ее «на потом» до тех пор, пока задача не стала срочной?

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

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

9) Избавьтесь от вещей, которые вас отвлекают, и боритесь с прокрастинацией

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

Мы все периодически становимся жертвами прокрастинации. Для борьбы с ней есть специальные приложения, которые не дадут вам отвлекаться от работы. Вы сами можете решить, насколько строгим оно должно быть — некоторые приложения просто подсчитывают время, которое вы проводите в соцсетях или на других «непродуктивных» сайтах, а некоторые приложения могут полностью блокировать доступ к таким сайтам. Вот несколько приложений, которые вы можете попробовать:

RescueTime — это условно бесплатное приложение для Windows, которое может подсчитывать, сколько времени вы тратите на разные действия, и показывать вам статистику. Вы можете ставить личные цели и указывать, какие действия являются для вас «продуктивными». Например, если вы работаете в сфере дизайна, то посещение Behance и работа в фоторедакторах — это часть рабочего процесса, а не отвлекающий элемент. Если у вас Mac, можете попробовать таймер Thyme.

Go F*cking Work — это бесплатное расширение для Chrome, которое будет материться каждый раз, когда вы заходите на сайты, которые вас отвлекают.

Freedom — это приложение для iPhone, iPad, Mac и Windows, которое позволяет вам блокировать определенные сайты или полностью блокировать интернет-соединение в течение определенного времени. Подписка стоит от 2.42 долларов в месяц, но у них есть бесплатный 7-дневный пробный период

Productivity Owl — еще одно бесплатное расширение для Chrome, которое позволяет вам заходить на сайты, которые вы укажете в настройках, но только на определенное время, так что вы сможете быстро найти нужную вам информацию и вернуться к работе. Вы также можете указать «свободное время», во время которого отключаются все ограничения.

Если вы не хотите использовать приложения, попробуйте просто перевести телефон в авиарежим.

10) Попробуйте технику помидора

Технику помидора (Pomodoro) придумал Франческо Чирилло в начале 90х. Техника получила такое название из-за того, что Франческо, на тот момент студент итальянского университета, пользовался таймером в виде помидора для отслеживания своей работы. Метод довольно прост: когда у вас есть задача или серия задач, вам нужно разбить работу на короткие отрезки времени (25 минут), разделенные небольшими паузами (5 минут). Такие отрезки называются «помидорами».

Запустите таймер или используйте специальное приложение и на 25 минут полностью погрузитесь в работу над задачей. Постарайтесь не отвлекаться на звонки или оповещения. Если вы вдруг вспомните, что вам нужно сделать что-то еще, запишите это на листке бумаги и продолжите работать. Когда таймер отсчитает 25 минут и подаст сигнал, сделайте паузу — разомнитесь, заварите себе чашечку кофе, помедитируйте или сделайте еще что-нибудь расслабляющее, не связанное с работой. И начните новый «помидор». После каждых 4 «помидоров» делайте большую паузу в 20-30 минут.

Нам нравится приложение Pomotodo, но вы можете использовать другое приложение, которое вам больше понравится. Их довольно много — от простых таймеров для браузера или телефона до специализированных инструментов.

У этой техники есть много преимуществ. Во-первых, она наглядно демонстрирует, сколько времени и усилий требуется на определенную задачу, так что вы сможете примерно представлять, сколько «помидоров» займет похожая задача. Во-вторых, так вы будете меньше отвлекаться — редкое сообщение бывает настолько важным, что не может подождать 25 минут.

Также благодаря технике помидора повышается качество вашей работы — обычно во время одного «помидора» вы работаете над одной задачей, и у вас, скорее всего, останется дополнительное время на то, чтобы проверить ошибки и «прилизать» работу. К тому же, если вы регулярно будете разделять свое рабочее время на «помидоры», это войдет в привычку, и вам гораздо легче будет придерживаться сроков и выполнять всё вовремя.

11) Награждайте себя за выполнение задач

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

Например, после выполнения каждой задачи, вы можете позволить себе зайти на любимый сайт, съесть или выпить что-нибудь вкусное, или посмотреть интересное видео. Можете даже попробовать платить самому себе каждый раз, когда вы завершаете работу над особо сложным проектом. Например, вы можете завести сберегательный счет в банке, или класть деньги на аккаунт в Steam, или покупать подарочные карты в любимом магазине. В зависимости от неприятности и сложности выполнения задачи вы можете решать, сколько денег вы сами себе заплатите.

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

12) Контролируйте температуру в помещении

Исследование показывает, что температура воздуха в офисе влияет на нашу продуктивность. Работники, которым приходилось работать в холодном помещении, делали на 44% больше ошибок, а их продуктивность сократилась почти вдвое.

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

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

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

А как вы справляетесь со списками дел? Может, вы можете поделиться советом или ссылкой на хорошее приложение? Оставляйте комментарии!

Как описать опыт работы в резюме

Опыт работы — вот на что в первую очередь смотрит компания, когда подбирает сотрудника. Как описать свой трудовой путь так, чтобы заинтересовать работодателя, читайте в материале Superjob.ru.

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

Период работы в организации указывайте с точностью до месяца: это позволит менеджеру по персоналу точно оценить, сколько именно вы там проработали. «2014—2015» — такое датирование оставляет ряд вопросов. Если вы, к примеру, устроились в организацию в январе 2014-го, а уволились в декабре 2015-го, значит, вы проработали в компании почти два года, а если пришли в декабре 2014-го, а ушли в феврале 2015-го, то ваш опыт на последнем месте работы составляет лишь два месяца, — разница существенная. Не заставляйте рекрутера гадать: резюме с неточным указанием сроков работы скорее всего отправится в мусорную корзину.

Название организации следует писать полностью, не полагаясь на то, что ее сокращенное наименование всем знакомо. Как правило, рекрутинговые порталы предлагают сообщить краткую информацию об организации — ее местонахождении (достаточно указать город, в некоторых случаях — еще и страну), сфере деятельности, численности персонала и т. д. «ООО «Эдельвейс». Реализация прохладительных напитков (офис в г. Тюмень). Численность персонала — 100 человек» — вполне приемлемый вариант для резюме.

Должность следует указывать четко и ясно — «менеджер по продажам», «главный бухгалтер», «медсестра». А вот писать общее наименование — «специалист», «менеджер», «сотрудник» — нерезультативно: уже из названия позиции должно быть понятно, чем именно вы занимались на предыдущих местах работы.

Соотносите описание обязанностей с целью резюме. Заполняя в резюме графу, которая называется «Должностные обязанности и достижения», не стоит слишком подробно излагать содержание своей работы — лучше сосредоточиться на главном. Исходите из того, на какую должность вы претендуете. Чтобы правильно расставить акценты, внимательно прочитайте объявление об интересующей вас вакансии и задумайтесь: что именно из вашего предыдущего опыта особенно важно для получения желаемой должности? К примеру, соискателю, претендующему на должность менеджера по маркетингу, но не имеющему подтвержденного предыдущей должностью опыта работы, стоит подчеркнуть, что он имеет отношение к маркетингу: если вы занимались заказом сувенирной продукции или, например, помогали организовывать промомероприятия, все это нужно отразить в списке обязанностей. Претендуете на руководящую позицию? Уделите особое внимание своему организаторскому опыту.

Если в своей работе вы использовали специальные инструменты, технологии, программное обеспечение, обязательно назовите их: не исключено, что именно это будет вашим конкурентным преимуществом. «Проектирование деталей и узлов с помощью системы NX»; «Расчет заработной платы сотрудников в программе 1С»; «Разработка интерфейса сайтов в Axure» — подобные строки, без сомнения, украсят резюме.

Особое внимание — конкретным достижениям на предыдущих местах работы. Избегайте размытых фраз и формулировок вроде: «большой опыт»; «повышение эффективности работы отдела»; «налаживание контактов со СМИ» и т. д. Помните, что при описании своих достижений вы должны руководствоваться правилом: чем конкретнее, тем лучше. Называйте цифры, приводите реальные примеры ваших инициатив. «Рост уровня продаж компании на 40% в год»; «Повышение цитируемости ньюсмейкеров компании в 3 раза» — достаточно всего несколько подобных пунктов, чтобы ваше резюме выгодно выделялось на фоне сотен других.

Если в резюме указано несколько мест работы, а список обязанностей и достижений практически совпадает, такое CV едва ли заинтересует рекрутера, ведь кандидат не демонстрирует никакого профессионального развития. Но на каждом из ваших мест работы наверняка были свои достижения! И даже если они кажутся вам небольшими, о них стоит рассказать.

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

Избегайте сокращений и неточностей. Название учебного заведения, места работы, перечисление обязанностей, достижений — все это пишите развернуто. Если же ваше резюме пестрит аббревиатурами, работодатель, вероятнее всего, не станет гадать, что скрывается за непонятными для него буквами.

Ни в коем случае не указывайте в своем резюме недостоверную информацию! Не стоит придумывать несуществующих мест работы, обязанностей и навыков. Едва ли таким образом вам удастся устроиться на работу своей мечты: опытный рекрутер легко вычислит обман, а первые же дни в компании сделают его очевидным. Лучше сосредоточьтесь на грамотном изложении своего реального опыта и правильной расстановке акцентов.

Успехов вам в составлении резюме и поисках работы!

Конструкция предложения

— Как правильно записать перечисление? Нет единого мнения в литературе

Есть несколько способов выразить серию приемлемых моментов. Мне самому нравится «Во-первых … Во-вторых … В-третьих …» и тд. Еще мне нравится «Во-первых … Во-вторых …» и так далее. Другие могут предпочесть «Первый, второй, третий». Третьи предпочтут вообще не нумеровать точки, но когда точек несколько, и особенно когда вы, возможно, позже захотите вернуться к конкретным точкам, некоторая форма нумерации может улучшить ясность .Текст после каждой пронумерованной точки может быть коротким, как предложение или даже фраза, или может состоять из нескольких абзацев или страниц, в зависимости от содержания.

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

Вы спрашиваете о предложении:

А во-вторых, потому что это улучшает экономическую интерпретацию результатов.

, и является ли референт слова «оно» неясным, или этот текст следует объединить с предыдущим предложением. В вашем конкретном примере я думаю, что референт слова «оно» достаточно ясен, но если вы думаете, что это может сбить с толку читателя , вы можете повторить референт, например:

А во-вторых, потому что использование отдельных макетов улучшает экономическую интерпретацию результатов.

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

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

На мой взгляд, форма «во-первых, потому что …» обычно не добавляет смысла или ясности и не должна использоваться автоматически. «Потому что» следует добавлять только там, где это каким-то образом добавляет смысла или помогает читателю.

статей — Перечисление единственного и множественного числа

Я думаю, что в таких контекстах определители (a, an, the и т. Д.) аналогичны кванторам (два, несколько и т. Д.) и стандартным прилагательным (маленький, старый и т. Д.) . Как правило, вы должны использовать перед первым элементом в таких списках, и, очевидно, если вы опустите квантификатор или прилагательное, это повлияет на значение. Но исключение других определяющих факторов немного более расплывчато.

1: Он поставил на стол бутылку, стакан и циновку для пива.
2: Он поставил на стол бутылку, стакан и циновку для пива.
3: ? Он поставил стакан, циновку для пива и бутылку на стол.
4: ?? Он поставил на стол бутылку, стакан и циновку для пива.
5: ?? Он поставил на стол бутылку, два стакана и циновку для пива.
6: ?? Он поставил на стол бутылку, журнал и два стакана.

На самом деле я не думаю, что существует какое-то «грамматическое правило» против последних двух, но они кажутся мне по крайней мере «стилистически неудобными».И №3 немного странный (вы должны представить контекст, в котором уже были идентифицированы бутылка, стакан и пивная циновка ).

Как правило, я бы посоветовал обычно включать все определители , если список не состоит полностью из коротких (одно или двух слов) элементов, и / или эти элементы естественно связаны в текущем контексте. Но если вы с по опускаете статьи, вам, вероятно, следует делать это последовательно, начиная со второго элемента.


Наконец, я просто отмечу периферийную точку, вытекающую из примеров OP …

7: На столе яблоко, груша, персик и банан
8: ? На столе — это яблоко, груша, персик и банан

Я не знаю, есть ли грамматическое правило против использования формы единственного глагола в # 8, но мне это кажется не совсем правильным (люди, тем не менее, используют эту форму, поэтому первый пример OP — это не все , которые плохо).

Во-первых, во-вторых, в-третьих — Использование порядковых наречий

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

«Во-первых» — настоящее слово?

Словарные гиганты Сэмюэл Джонсон и Ной Вебстер вообще не распознавали как слово . Удивлен? Носители английского языка естественно относятся к слову , в первую очередь, как порядковому наречию, потому что большинство наречий оканчиваются на -ly . Не все наречия подходят; Рассмотрим быстро, ну и часто например.

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

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

Вот совет: Хотите, чтобы ваш текст всегда выглядел великолепно? Grammarly может спасти вас от орфографических ошибок, грамматических и пунктуационных ошибок и других проблем с написанием на всех ваших любимых веб-сайтах.

Что я должен использовать: «Сначала» или «Сначала?»

Нет ничего плохого в том, чтобы использовать во-первых, во-вторых, и т. Д. Для подсчета очков.Также нет ничего плохого в использовании более простых first, second, и т. Д.

Эти утверждения эквивалентны по смыслу. Тем не менее, есть веские причины для выбора «первой» последовательности вместо «первой» последовательности.

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

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

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

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

Когда использовать «вначале»

Сначала не используется для нумерации точек, так как сначала и сначала .

Фраза в начале означает «в начале или в начале».

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

Enumeration Type — обзор

10.3.3 Однонаправленная квалифицированная ассоциация

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

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

На рисунке e10.5 показана реализация квалифицированной ассоциации, определяющей отображение в 0..1 с внутренним квалификатором. Список желаний клиентов теперь считается квалифицированной ассоциацией.Соответствующий код представлен ниже:

Рисунок e10.5. Квалифицированная ассоциация с внутренним классификатором.

КЛАСС Клиент

ЧАСТНАЯ АССОЦИАЦИЯ VAR

желаний: MAP

МЕТОД getWishes (): SET

ВОЗВРАТ wish.getValues ​​()

8 END МЕТОД

МЕТОД getWish (anIsbn: Isbn): Книга

ВОЗВРАТ желаний.atKey (anIsbn)

КОНЕЦ МЕТОД

МЕТОД addWish (aBook: Book)

wish.add (aBook.getIsbn (), aBook)

КОНЕЦ МЕТОД

W МЕТОД Книга)

wish.removeValue (aBook)

КОНЕЦ МЕТОДА

МЕТОД removeWish (anIsbn: Isbn)

wish.removeKey (anIsbn)

078 METHOD000 old

3 ENDHOD000

newBook: Book)

— не реализовано

КОНЕЦ МЕТОД

КОНЕЦ КЛАСС

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

Здесь мы отмечаем, что базовая структура данных map имеет обычные операции для доступа к значению с учетом его ключа ( atKey ), доступа к набору всех значений ( getValues ​​), включая пару ключ / значение ( добавить ), удалив пару по ее ключу ( removeKey ) или по ее значению ( removeValue ) и т. д.

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

На рисунке e10.6 представлена ​​карта с внешним квалификатором. Соответствующий код показан ниже:

Рисунок e10.6. Квалифицированная ассоциация с внешним классификатором.

КЛАСС Клиент

ЧАСТНАЯ АССОЦИАЦИЯ VAR телефоны: MAP

МЕТОД getPhones (): SET

СПОСОБ ВОЗВРАТА phone.getValues ​​()

9 ENDValues ​​()

МЕТОД getPhone (aType: PhoneType): Телефон

ВОЗВРАТ телефонов.atKey (aType)

МЕТОД ЗАВЕРШЕНИЯ

МЕТОД addPhone (aType: PhoneType).add (aType, aPhone)

END METHOD

METHOD removePhone (aPhone: Phone)

phones.removeValue (aPhone)

END METHOD

METHOD removePhone phone.removeKey (aType)

КОНЕЦ МЕТОД

КОНЕЦ КЛАСС

В случае рисунка e10.6 необходимо рассмотреть вопрос: поскольку источник ассоциации не имеет ограничения на множественность, а квалификатор не является атрибутом класса, ничто не гарантирует, что один и тот же телефон не связан с двумя или более клавишами.Например, следующая последовательность команд создаст телефон, связанный с двумя разными типами:

aCustomer.addPhone («жилой», aPhone)

aCustomer.addPhone («коммерческий», aPhone)

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

В следующем примере мы считаем, что разные издатели могут редактировать одну и ту же книгу. Таким образом, у нас есть книги и спецификации книг: книга имеет одного издателя, а спецификация книги — набор издателей. ISBN книги для каждого издателя может быть разным, но спецификация книги одинакова для разных издателей, как и ее жанр. На рисунке e10.7 показано, что спецификация книги имеет жанр в качестве атрибута, и поэтому каждая спецификация книги имеет только один жанр, который может быть связан с разными издателями.На рис. E10.7 представлен раздел , то есть квалифицированная ассоциация со многими , с внутренним квалификатором. Соответствующий код показан ниже:

Рисунок e10.7. Квалифицированная ассоциация как раздел с внутренним классификатором.

КЛАСС Издатель

ЧАСТНАЯ АССОЦИАЦИЯ VAR bookSpecs: RELATION

METHOD getBookSpecs (): SET

RETURN bookSpecs.getValues ​​()

КОНЕЦ МЕТОД

МЕТОД getBookSpec (aGenre: BookGenre): SET

RETURN bookSpec.atKey (addBook)

078 END : BookSpec)

bookSpecs.add (aBookSpec.getGenre (), aBookSpec)

КОНЕЦ МЕТОДА

МЕТОД removeBookSpec (aBookSpec: BookSpec)

bookSpecs.removeValue

bookSpecs.removeValue

КОНЕЦ КЛАСС

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

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

Позволяет ли дизайн, представленный на рисунке e10.7, связать спецификацию книги с издателем или разными издателями разных жанров? Ответ: нет . Поскольку жанр неизменен и метод addBookSpec берет ключ из атрибута BookSpec , жанра , можно только один раз добавить спецификацию книги издателю.Поскольку жанр неизменен, спецификация книги никогда не должна добавляться снова с другим жанром.

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

Объявление перечисления — cppreference.com

Перечисление — это отдельный тип, значение которого ограничено диапазоном значений (подробности см. Ниже), который может включать несколько явно названных констант («перечислители »).Значения констант являются значениями целочисленного типа, известного как , базовый тип перечисления.

Перечисление определяется с использованием следующего синтаксиса:

enum-key attr (необязательно) enum-name (необязательно) enum-base (необязательно) (C ++ 11) { список перечислителей (необязательно) } (1)
enum-key attr (необязательно) enum-name enum-base (необязательно) ; (2) (начиная с C ++ 11)
1) спецификатор перечисления , который появляется в описании-описателе-декларации синтаксиса объявления: определяет тип перечисления и его перечислители.2) Объявление непрозрачного перечисления : определяет тип перечисления, но не его перечислители: после этого объявления тип является полным типом, и его размер известен. Примечание: явное объявление специализации члена перечисления с ограниченной областью действия в шаблоне класса — единственный случай, когда спецификатор вложенного имени появляется перед именем перечисления (начиная с C ++ 14)
enum-key один из enum , enum class (начиная с C ++ 11) или enum struct (начиная с C ++ 11)
attr (C ++ 11) необязательная последовательность любого количества атрибутов
имя перечисления имя объявляемого перечисления.Если присутствует, и если это объявление является повторным объявлением, ему может предшествовать описатель вложенного имени (начиная с C ++ 11): последовательность имен и операторов разрешения области видимости :: , заканчивающаяся оператором разрешения области видимости . Имя может быть опущено только в объявлениях перечисления без области видимости и непрозрачности.
enum-base (C ++ 11) двоеточие ( : ), за которым следует последовательность-спецификатора типа, которая называет целочисленный тип (если он квалифицируется cv, квалификации игнорируются), который будет служить фиксированным базовым типом для этого типа перечисления
список перечислителей разделенный запятыми список определений перечислителя, каждое из которых является либо просто идентификатором, который становится именем перечислителя, либо идентификатором с инициализатором: идентификатор = constexpr.В любом случае за идентификатором может следовать необязательная последовательность спецификатора атрибута. (начиная с C ++ 17)

Существует два различных типа перечислений: перечисление без области действия (объявленное ключом перечисления перечисление ) и перечисление области действия (объявленное ключом перечисления перечисление класса или enum struct ).

[править] Перечисление без области видимости

enum имя (необязательно) { перечислитель = constexpr , enumerator = constexpr , } (1)
перечисление имя (необязательно) : тип { счетчик = constexpr , перечислитель = constexpr .. . } (2) (начиная с C ++ 11)
перечисление имя : тип ; (3) (начиная с C ++ 11)

1) Объявляет тип перечисления с незаданной областью, базовый тип которого не является фиксированным (в этом случае базовый тип является определяемым реализацией интегральным типом, который может представлять все значения перечислителя; этот тип не превышает int , если только Значение перечислителя не может поместиться в int или unsigned int .Если список-перечислитель пуст, базовый тип выглядит так, как если бы в перечислении был один перечислитель со значением 0).

2) Объявляет тип перечисления с незаданной областью, базовый тип которого фиксирован.

3) Объявление непрозрачного перечисления для перечисления без области действия должно указывать имя и базовый тип.

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

 enum Color {красный, зеленый, синий};
Цвет r = красный;
переключатель (r)
{
    case red: std :: cout << "красный \ n"; перерыв;
    case green: std :: cout << "зеленый \ n"; перерыв;
    case blue: std :: cout << "синий \ n"; перерыв;
} 

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

 перечисление Foo {a, b, c = 10, d, e = 1, f, g = f + c};
// a = 0, b = 1, c = 10, d = 11, e = 1, f = 2, g = 12 

Значения типа перечисления с незаданной областью неявно преобразуются в целочисленные типы.Если базовый тип не фиксирован, значение может быть преобразовано в первый тип из следующего списка, способный содержать весь их диапазон значений: int, unsigned int, long, unsigned long, long long или unsigned long long, расширенные целочисленные типы с более высокий ранг конверсии (в порядке ранжирования, предпочтение отдается знаку над беззнаковым) (начиная с C ++ 11). Если базовый тип фиксирован, значения могут быть преобразованы в их базовый тип (предпочтительный для разрешения перегрузки), который затем может быть повышен.}}

 enum color {красный, желтый, зеленый = 20, синий};
цвет col = красный;
int n = синий; // п == 21 

Значения целочисленных, с плавающей запятой и перечислимых типов могут быть преобразованы с помощью static_cast или явного приведения к любому типу перечисления.Если базовый тип не фиксирован, а исходное значение выходит за пределы допустимого диапазона, результат не указан (до C ++ 17) undefined (начиная с C ++ 17). (Исходное значение, преобразованное в базовый тип перечисления, если оно является плавающей запятой, находится в диапазоне, если оно помещается в поле наименьшего разряда, достаточно большое, чтобы содержать все перечислители целевого перечисления.) В противном случае результат будет таким же, как и результат результат неявного преобразования в базовый тип.

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

 перечисление access_t {чтение = 1, запись = 2, exec = 4}; // счетчики: 1, 2, 4 диапазон: 0..7
access_t rwe = static_cast  (7);
assert ((rwe & читать) && (rwe & write) && (rwe & exec));

access_t x = static_cast  (8.0); // неопределенное поведение начиная с C ++ 17
access_t y = static_cast  (8); // неопределенное поведение начиная с C ++ 17

перечисление foo {a = 0, b = UINT_MAX}; // диапазон: [0, UINT_MAX]
foo x = foo (-1); // неопределенное поведение, начиная с C ++ 17, даже если базовый тип foo беззнаковый int 

Имя перечисления без области действия может быть опущено: такое объявление только вводит перечислители во включающую область:

 перечисление {a, b, c = 0, d = a + 2}; // определяет a = 0, b = 1, c = 0, d = 2 

Когда перечисление с незаданной областью является членом класса, к его перечислителям можно получить доступ с помощью операторов доступа к членам класса . и -> :

 структура X
{
    перечислить направление {left = 'l', right = 'r'};
};
Х х;
Х * р = & х;

int a = X :: direction :: left; // разрешено только в C ++ 11 и новее
int b = X :: left;
int c = x.left;
int d = p-> слева; 

[править] Перечисления с ограниченной областью действия

перечисление struct | class имя { перечислитель = constexpr , перечислитель = constexpr

0, constexpr

0. constexpr

0... }

(1)
перечисление struct | class имя : тип { перечислитель = constexpr , перечислитель 500 = ... } (2)
перечисление структура | класс имя ; (3)
перечисление структура | класс имя : тип ; (4)

1) объявляет тип перечисления с ограниченной областью действия, базовым типом которого является int (ключевые слова class и struct в точности эквивалентны)

2) объявляет тип перечисления с ограниченной областью действия, базовым типом которого является тип

3) объявление непрозрачного перечисления для перечисления с ограниченной областью видимости, базовым типом которого является int

4) объявление непрозрачного перечисления для перечисления с ограниченной областью видимости, базовым типом которого является тип

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

 enum class Color {красный, зеленый = 20, синий};
Цвет r = Цвет :: синий;
переключатель (r)
{
    case Color :: red: std :: cout << "красный \ n"; перерыв;
    case Color :: green: std :: cout << "зеленый \ n"; перерыв;
    case Color :: blue: std :: cout << "синий \ n"; перерыв;
}
// int n = r; // ошибка: нет преобразования enum в int
int n = static_cast  (г); // ОК, n = 21 
(начиная с C ++ 11)

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

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

Это позволяет вводить новые целочисленные типы (например,грамм. SafeInt), которые используют те же существующие соглашения о вызовах, что и их базовые целочисленные типы, даже в ABI, которые наказывают передачу / возврат структур по значению.

 enum byte: unsigned char {}; // байт - это новый целочисленный тип
байт b {42}; // OK начиная с C ++ 17 (инициализация прямым списком)
байт c = {42}; // ошибка
байт d = байт {42}; // ОК начиная с C ++ 17; то же значение, что и b
байт e {-1}; // ошибка

struct A {byte b; };
A a1 = {{42}}; // ошибка (копирование-список-инициализация параметра конструктора)
A a2 = {байт {42}}; // ОК начиная с C ++ 17

void f (байт);
f ({42}); // ошибка (список-копий-инициализация параметра функции)

enum class Handle: std :: uint32_t {Invalid = 0};
Ручка h {42}; // ОК для C ++ 17 
(начиная с C ++ 17)

Объявление-использования-перечисления

с использованием перечисление вложенный-указатель-имя (необязательно) имя ; (начиная с C ++ 20)

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

Объявление using-enum вводит имена перечислителей именованного перечисления, как если бы посредством объявления-using для каждого перечислителя. Находясь в области класса, объявление using-enum-объявление добавляет перечислители именованного перечисления в качестве членов в область, делая их доступными для поиска членов.

 enum class fruit {апельсин, яблоко};
struct S {
  используя enum fruit; // ОК: вводит апельсин и яблоко в S
};
пусто f ()
{
    SS;
    s.orange; // ОК: называем фрукты :: апельсин
    S :: оранжевый; // ОК: называем фрукты :: апельсин
} 

Два объявления-использования-перечисления, которые вводят два перечислителя с одинаковыми именами, конфликтуют.

 enum class fruit {апельсин, яблоко};
enum class color {красный, оранжевый};
пусто f ()
{
    используя enum fruit; // ОК
    // используя enum color; // ошибка: цвет :: оранжевый и плод :: оранжевый конфликт
} 
(начиная с C ++ 20)

[править] Пример

 #include 
#include 

// перечисление, которое занимает 16 бит
перечисление smallenum: std :: int16_t
{
    а,
    б,
    c
};


// цвет может быть красным (значение 0), желтым (значение 1), зеленым (значение 20) или синим (значение 21)
цвет перечисления
{
    красный,
    желтый,
    зеленый = 20,
    синий
};

// высота может быть altitude :: high или altitude :: low
высота класса перечисления: char
{
     высокий = 'ч',
     low = 'l', // C ++ 11 допускает лишнюю запятую
};

// константа d равна 0, константа e равна 1, константа f равна 3
перечислить
{
    d,
    е,
    е = е + 2
};

// типы перечисления (как с ограниченными, так и с незаданными областями) могут иметь перегруженные операторы
std :: ostream & оператор << (std :: ostream & os, цвет c)
{
    переключатель (c)
    {
        case red: os << "красный"; перерыв;
        case yellow: os << "желтый"; перерыв;
        case green: os << "зеленый"; перерыв;
        case blue: os << "синий"; перерыв;
        по умолчанию: os.setstate (std :: ios_base :: failbit);
    }
    return os;
}

std :: ostream & оператор << (std :: ostream & os, высота al)
{
    return os << static_cast  (al);
}

пространство имен cxx20
{
    перечислимый класс long_long_long_name {x, y};

    auto rnd = [] {return long_long_long_name :: x; };

    void using_enum_demo ()
    {
        std :: cout << "C ++ 20 с использованием enum:";
        переключатель (rnd ())
        {
        # если определено (__ cpp_using_enum)
            используя enum long_long_long_name;
            case x: std :: cout << "x \ n"; перерыв;
            case y: std :: cout << "y \ n"; перерыв;
        #   еще
            case long_long_long_name :: x: std :: cout << "x \ n"; перерыв;
            case long_long_long_name :: y: std :: cout << "y \ n"; перерыв;
        # endif
        }
    }
}

int main ()
{
    цвет col = красный;
    высота а;
    а = высота :: низкая;

    std :: cout << "col =" << col << '\ n'
              << "a =" << a << '\ n'
              << "f =" << f << '\ n';

    cxx20 :: using_enum_demo ();
} 

Выход:

 col = красный
а = л
f = 3
С ++ 20 с использованием enum: x 

[править] Отчеты о дефектах

Следующие ниже отчеты о дефектах, изменяющих поведение, были применены задним числом к ​​ранее опубликованным стандартам C ++.

DR Применяется к Поведение, как опубликовано Правильное поведение
CWG 1638 C ++ 14 грамматика объявления opaque enum, запрещенного к использованию для специализаций шаблонов вложенный спецификатор имени разрешен

[править] См. Также

Совет редактора

: «Соответственно» и «А именно»

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

соответственно

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

  • «Значения OD600 для роста бактерий в группах с 20 ° C, 25 ° C, 30 ° C и 37 ° C составляли 0,5, 0,6, 0,9 и 0,7 соответственно».
    В противном случае это утверждение можно было бы записать так: «Значения OD600 для роста бактерий были равны 0.5 в группе 20 ° C, 0,6 в группе 25 ° C, 0,9 в группе 30 ° C и 0,7 в группе 37 ° C ».
  • НЕ «Значения OD600 для роста бактерий составляли 0,5, 0,6, 0,9 и 0,7 соответственно».
    Это предложение не включает второй список, который соответствует перечисленным значениям и определяет их различия.

Если слово «соответственно» стоит в середине предложения, оно должно начинаться с запятой перед ним и за ним:

  • «Значения OD600 для роста бактерий в группах с 20 ° C, 25 ° C, 30 ° C и 37 ° C были равны 0.5, 0,6, 0,9 и 0,7 соответственно через 2 часа, но все культуры достигли насыщения через 8 часов ».

Наконец, не путайте «соответственно» с «соответствующим», которое имеет прилагательное, означающее «отдельный»:

  • «В конце собрания преподаватели вернулись в свои офисы».

А именно

Это слово полезно при представлении списка, в котором выделяются основные или наиболее важные аспекты чего-либо:

  • «Существует множество регуляторов клеточного цикла, а именно циклины, CDK, CKI и белки контрольных точек.
    То есть регуляторов клеточного цикла много, но эти четыре группы особенно важны.
  • «Это исследование имеет несколько ограничений, а именно небольшой размер выборки и ретроспективный дизайн исследования».
    У исследования могут быть и другие ограничения, но они являются основными.

«Namely» также может использоваться при переопределении термина вместо «т.е.»:

  • "Естественная скорость дает нам предпочтительную ось времени в каждой точке, а именно ось времени, на которой материя, находящаяся рядом с этой точкой, находится в покое."

Мы надеемся, что этот пост поможет вам правильно использовать эти два термина в своем письме. Если у вас возникнут вопросы по поводу этих или других терминов во время написания, свяжитесь с нами по адресу [email protected]. Удачи!

Поделитесь с коллегами

Перечисление

- Поддержка перечислений - документация Python 3.9.5

Исходный код: Lib / enum.py


Перечисление - это набор символических имен (членов), привязанных к уникальным, постоянные значения.Внутри перечисления члены можно сравнивать по идентификатору, а само перечисление можно повторять.

Примечание

Случай членов Enum

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

Содержание модуля

Этот модуль определяет четыре класса перечисления, которые могут использоваться для определения уникальных наборы имен и значений: Enum , IntEnum , Flag и ИнтФлаг .Он также определяет один декоратор, unique (), и один помощник, авто .

класс перечислимый. Перечисление

Базовый класс для создания нумерованных констант. См. Раздел Функциональный API для альтернативного синтаксиса конструкции.

класс перечислим. Внутр.

Базовый класс для создания нумерованных констант, которые также подклассы int .

класс перечислим. Внутфлаг

Базовый класс для создания нумерованных констант, которые можно комбинировать с помощью побитовые операторы без потери членства в IntFlag . Члены IntFlag также являются подклассами int .

класс перечислим. Флаг

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

перечисление. уникальный ()

Декоратор класса Enum, обеспечивающий привязку только одного имени к любому значению.

класс перечислим. авто

Экземпляры заменяются соответствующим значением для членов Enum. По умолчанию начальное значение начинается с 1.

Новое в версии 3.6: Flag , IntFlag , auto

Создание Enum

Перечисления создаются с использованием синтаксиса класса , что делает их легко читать и писать.Альтернативный метод создания описан в Функциональный API. Чтобы определить перечисление, создайте подкласс Enum как следует:

 >>> из enum import Enum
>>> Цвет класса (Enum):
... КРАСНЫЙ = 1
... ЗЕЛЕНЫЙ = 2
... СИНИЙ = 3
...
 

Примечание

Значения элементов перечисления

Значения элементов могут быть любыми: int , str и т. Д. Если точное значение неважно, вы можете использовать экземпляры auto и Для вас будет выбрано подходящее значение.Следует соблюдать осторожность, если вы смешиваете авто с другими значениями.

Примечание

Номенклатура

  • Класс Color - это перечисление (или перечисление )

  • Атрибуты Color.RED , Color.GREEN и т. Д. элементы перечисления (или элементы перечисления ) и являются функциональными константами.

  • Члены перечисления имеют имен и значений (имя Цвет.КРАСНЫЙ - это КРАСНЫЙ , значение цвета . СИНИЙ - это 3 и т. Д.)

Члены перечисления имеют удобочитаемые строковые представления:

 >>> печать (ЦВЕТ.КРАСНЫЙ)
Красный цвет
 

… в то время как их представитель имеет дополнительную информацию:

 >>> печать (repr (Color.RED))
<Цвет.КРАСНЫЙ: 1>
 

Тип члена перечисления - это перечисление, которому он принадлежит:

 >>> тип (Color.КРАСНЫЙ)
<перечисление 'Цвет'>
>>> isinstance (Цвет.ЗЕЛЕНЫЙ, Цвет)
Правда
>>>
 
Члены

Enum также имеют свойство, которое содержит только их имя элемента:

 >>> печать (Color.RED.name)
КРАСНЫЙ
 

Перечисления поддерживают итерацию в порядке определения:

 >>> класс Shake (Enum):
... ВАНИЛЬ = 7
... ШОКОЛАД = 4
... ПЕЧЕНЬЕ = 9
... MINT = 3
...
>>> для встряхивания в Shake:
... распечатать (встряхнуть)
...
Встряхнуть ВАНИЛЬ
Встряхните.ШОКОЛАД
Shake.COOKIES
Встряхнуть.
 

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

 >>> яблоки = {}
>>> яблоки [Color.RED] = 'красное вкусное'
>>> яблоки [Color.GREEN] = 'бабушка кузнец'
>>> яблоки == {Color.RED: 'красный вкусный', Color.GREEN: 'бабушка смит'}
Правда
 

Программный доступ к элементам перечисления и их атрибутам

Иногда бывает полезно получить доступ к элементам в перечислениях программно (т.е.е. ситуации, когда Color.RED не подойдет, потому что точный цвет неизвестен во время написания программы). Enum разрешает такой доступ:

 >>> Цвет (1)
<Цвет.КРАСНЫЙ: 1>
>>> Цвет (3)
<Цвет СИНИЙ: 3>
 

Если вы хотите получить доступ к членам перечисления по имени , используйте доступ к элементу:

 >>> Цвет ['КРАСНЫЙ']
<Цвет.КРАСНЫЙ: 1>
>>> Цвет ["ЗЕЛЕНЫЙ"]
<Цвет.ЗЕЛЕНЫЙ: 2>
 

Если у вас есть член перечисления и вам нужно его имя или значение :

 >>> member = Color.КРАСНЫЙ
>>> member.name
'КРАСНЫЙ'
>>> member.value
1
 

Дублирование элементов и значений перечисления

Наличие двух членов перечисления с одинаковым именем недопустимо:

 >>> Форма класса (Enum):
... КВАДРАТ = 2
... КВАДРАТ = 3
...
Отслеживание (последний вызов последний):
...
TypeError: Попытка повторно использовать ключ: 'SQUARE'
 

Однако два члена перечисления могут иметь одно и то же значение. Учитывая два члена A и B с одинаковым значением (и A определен первым), B - это псевдоним A.По стоимости поиск значения A и B вернет A. Поиск по имени B также возврат A:

 >>> Форма класса (Enum):
... КВАДРАТ = 2
... АЛМАЗ = 1
... КРУГ = 3
... ALIAS_FOR_SQUARE = ​​2
...
>>> Форма. КВАДРАТ
<Форма. КВАДРАТ: 2>
>>> Форма.ALIAS_FOR_SQUARE
<Форма. КВАДРАТ: 2>
>>> Форма (2)
<Форма. КВАДРАТ: 2>
 

Примечание

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

Обеспечение уникальных значений перечисления

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

@ перечисление. уникальный

Декоратор класса специально для перечислений.Он ищет перечисление __members__ , собирающее все найденные псевдонимы; если есть найдено ValueError возникает с деталями:

 >>> from enum import Enum, уникальный
>>> @unique
... ошибка класса (Enum):
... ОДИН = 1
... ДВА = 2
... ТРИ = 3
... ЧЕТЫРЕ = 3
...
Отслеживание (последний вызов последний):
...
ValueError: повторяющиеся значения найдены в : ЧЕТЫРЕ -> ТРИ
 

Использование автоматических значений

Если точное значение неважно, вы можете использовать auto :

 >>> из enum import Enum, auto
>>> Цвет класса (Enum):
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> список (цвет)
[, , ]
 

Значения выбираются функцией _generate_next_value_ () , которая может быть переопределено:

 >>> класс AutoName (Enum):
... def _generate_next_value_ (имя, начало, количество, последние_значения):
... вернуть имя
...
>>> Порядковый номер класса (AutoName):
... СЕВЕР = авто ()
... ЮГ = авто ()
...ВОСТОК = авто ()
... ЗАПАД = авто ()
...
>>> список (порядковый)
[, , , ]
 

Примечание

Цель метода _generate_next_value_ () по умолчанию - предоставить следующий int в последовательности с предоставленным последним int , но способ, которым это делается, является деталью реализации и может измениться.

Примечание

Метод _generate_next_value_ () должен быть определен перед любыми членами.

Итерация

Перебор элементов перечисления не дает псевдонимов:

 >>> список (Форма)
[, , ]
 

Специальный атрибут __members__ - это упорядоченное отображение имен только для чтения. членам. Он включает все имена, определенные в перечислении, включая псевдонимы:

 >>> для имени, член в Shape .__ members __. Items ():
... имя, член
...
('КВАДРАТ', )
('АЛМАЗ', <Форма АЛМАЗ: 1>)
('КРУГ', )
('ALIAS_FOR_SQUARE', )
 

Атрибут __members__ может использоваться для подробного программного доступа к члены перечисления. Например, поиск всех псевдонимов:

 >>> [имя для имени, член в Shape .__ members __. Items () if member.name! = Name]
['ALIAS_FOR_SQUARE']
 

Сравнения

Элементы перечисления сравниваются по идентичности:

 >>> Цвет.КРАСНЫЙ цвет. КРАСНЫЙ
Правда
>>> Цвет. КРАСНЫЙ цвет. СИНИЙ
Ложь
>>> Цвет. КРАСНЫЙ не цвет. СИНИЙ
Правда
 

Упорядоченные сравнения между значениями перечисления не поддерживаются. Enum члены не являются целыми числами (но см. IntEnum ниже):

 >>> Цвет.КРАСНЫЙ <Цвет СИНИЙ
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
TypeError: '<' не поддерживается между экземплярами 'Color' и 'Color'
 

Сравнения на равенство определены, хотя:

 >>> Цвет.СИНИЙ == Цвет.КРАСНЫЙ
Ложь
>>> Color.BLUE! = Цвет.КРАСНЫЙ
Правда
>>> Цвет СИНИЙ == Цвет СИНИЙ
Правда
 

Сравнения с неперечисляемыми значениями всегда будут сравнивать не равные (опять же, IntEnum был явно разработан, чтобы вести себя иначе, см. ниже):

 >>> Цвет СИНИЙ == 2
Ложь
 

Разрешенные элементы и атрибуты перечислений

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

Перечисления представляют собой классы Python и могут иметь методы и специальные методы как обычный. Если у нас есть это перечисление:

 >>> класс Mood (Enum):
... FUNKY = 1
... СЧАСТЛИВ = 3
...
... def описать (сам):
... # self является участником здесь
... вернуть self.name, self.value
...
... def __str __ (сам):
... вернуть 'my custom str! {0} '. Формат (собственное значение)
...
... @classmethod
... def избранное_mood (cls):
... # cls вот перечисление
... вернуть cls.HAPPY
...
 

Тогда:

 >>> Mood.favorite_mood ()
<Настроение.ДОВОЛЬСТВИЕ: 3>
>>> Mood.HAPPY.describe ()
('СЧАСТЛИВ', 3)
>>> str (Mood.FUNKY)
'my custom str! 1 '
 

Правила того, что разрешено, следующие: имена, начинающиеся и заканчивающиеся на одиночное подчеркивание зарезервировано enum и не может использоваться; все остальные атрибуты, определенные в перечислении, станут членами этого перечисление, за исключением специальных методов ( __str __ () , __add __ () и т. Д.), дескрипторы (методы также являются дескрипторами) и имена переменных перечислены в _ignore_ .

Примечание: если ваше перечисление определяет __new __ () и / или __init __ () , тогда любые значения, присвоенные члену перечисления, будут переданы этим методам. См. Например, «Планета».

Подкласс ограниченного перечисления

Новый класс Enum должен иметь один базовый класс Enum, до одного конкретного тип данных и столько классов примесей на основе , сколько необходимо.В порядок этих базовых классов:

 класс EnumName ([mix-in, ...,] [data-type,] base-enum):
    проходить
 

Кроме того, создание подкласса перечисления разрешено только в том случае, если перечисление не определяет любые участники. Значит, это запрещено:

 >>> класс MoreColor (Цвет):
... РОЗОВЫЙ = 17
...
Отслеживание (последний вызов последний):
...
TypeError: невозможно расширить перечисления
 

Но это разрешено:

 >>> класс Foo (Enum):
... def some_behavior (сам):
...         проходить
...
>>> класс Bar (Foo):
... СЧАСТЛИВ = 1
... SAD = 2
...
 

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

Травление

Перечисления могут быть маринованными и неотбираемыми:

 >>> from test.test_enum import Fruit
>>> из импортных свалок соленья, грузов
>>> Фрукты.ПОМИДОР это грузы (отвалы (Fruit.TOMATO))
Правда
 

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

Примечание

С версией протокола pickle 4 можно легко обрабатывать перечисления вложен в другие классы.

Можно изменить способ маринования / извлечения элементов Enum, указав __reduce_ex __ () в классе перечисления.

Функциональный API

Класс Enum вызывается, обеспечивая следующий функциональный API:

 >>> Animal = Enum ('Животное', 'МУРАВЬИНА-ПЧЕЛОВАЯ СОБАКА')
>>> Животное
<перечисление 'Животное'>
>>> Animal.ANT
<Животное.ANT: 1>
>>> Animal.ANT.value
1
>>> список (Животное)
[, , , ]
 

Семантика этого API напоминает namedtuple .Первое аргумент вызова Enum - это имя перечисления.

Второй аргумент - это источник имен членов перечисления. Это может быть разделенная пробелами строка имен, последовательность имен, последовательность 2-кортежи с парами ключ / значение или сопоставление (например, словарь) имен с значения. Последние две опции позволяют назначать произвольные значения для перечисления; остальные автоматически присваивают возрастающие целые числа, начиная с 1 (используйте параметр start , чтобы указать другое начальное значение).А возвращается новый класс, производный от Enum . Другими словами, вышеуказанное присвоение Животное эквивалентно:

 >>> класс Animal (Enum):
... ANT = 1
... BEE = 2
... CAT = 3
... СОБАКА = 4
...
 

Причина, по которой в качестве начального номера по умолчанию используется 1 , а не 0 , что 0 - это Ложь в логическом смысле, но все члены перечисления оценивают to True .

Перечисления травления, созданные с помощью функционального API, могут быть сложными как стек фреймов детали реализации используются, чтобы попытаться выяснить, какой модуль Перечисление создается в (e.грамм. он потерпит неудачу, если вы воспользуетесь утилитой функция в отдельном модуле, а также может не работать на IronPython или Jython). Решение состоит в том, чтобы явно указать имя модуля следующим образом:

 >>> Animal = Enum ('Animal', 'ANT BEE CAT DOG', module = __ name__)
 

Предупреждение

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

Новый протокол рассола 4 также, в некоторых случаях, полагается на __qualname__ устанавливается в место, где pickle сможет найти класс.Например, если класс был доступен в классе SomeData в глобальном масштабе:

 >>> Animal = Enum ('Animal', 'ANT BEE CAT DOG', qualname = 'SomeData.Animal')
 

Полная подпись:

 Enum (значение = 'NewEnumName', names = <...>, *, module = '...', qualname = '...', type = <смешанный класс>, начало = 1)
 
значение

Что новый класс Enum запишет в качестве своего имени.

имен

Члены Enum.Это может быть строка, разделенная пробелами или запятыми. (значения начинаются с 1, если не указано иное):

 'КРАСНЫЙ ЗЕЛЕНЫЙ СИНИЙ' | «КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ» | 'КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ'
 

или итератор имен:

или итератор пар (имя, значение):

 [('СИНИЙ', 4), ('ПУРПУРНЫЙ', 5), ('ЖЕЛТЫЙ', 6)]
 

или отображение:

 {'CHARTREUSE': 7, 'SEA_GREEN': 11, 'ROSEMARY': 42}
 
модуль

имя модуля, в котором можно найти новый класс Enum.

qualname

, где в модуле можно найти новый класс Enum.

тип
Тип

для добавления в новый класс Enum.

начало

номер, с которого начинается отсчет, если указаны только имена.

Изменено в версии 3.5: добавлен параметр start .

Производные перечисления

IntEnum

Первый предоставленный вариант Enum также является подклассом внутр .Элементы IntEnum можно сравнить с целыми числами; в более широком смысле, можно сравнивать целочисленные перечисления разных типов. друг другу:

 >>> из enum import IntEnum
>>> Форма класса (IntEnum):
... КРУГ = 1
... КВАДРАТ = 2
...
>>> Запрос класса (IntEnum):
... POST = 1
... GET = 2
...
>>> Форма == 1
Ложь
>>> Shape.CIRCLE == 1
Правда
>>> Shape.CIRCLE == Request.POST
Правда
 

Однако их все равно нельзя сравнивать со стандартными перечислениями Enum :

 >>> Форма класса (IntEnum):
... CIRCLE = 1
... КВАДРАТ = 2
...
>>> Цвет класса (Enum):
... КРАСНЫЙ = 1
... ЗЕЛЕНЫЙ = 2
...
>>> Shape.CIRCLE == Color.RED
Ложь
 

IntEnum Значения ведут себя как целые числа и в других отношениях:

 >>> int (Shape.CIRCLE)
1
>>> ['a', 'b', 'c'] [Shape.CIRCLE]
'b'
>>> [i для i в диапазоне (Shape.SQUARE)]
[0, 1]
 

Интфлаг

Следующая версия Enum , IntFlag , также основана на на внутр ., ~) и результат по-прежнему IntFlag член. Однако, как следует из названия, IntFlag члены также являются подклассом int и могут использоваться везде, где int использовал. Любая операция с элементом IntFlag , кроме побитовой операции потеряют членство IntFlag .

Образец IntFlag класс:

 >>> из enum import IntFlag
>>> класс Пермь (IntFlag):
... R = 4
... W = 2
... X = 1
...
>>> Пермь.Р | Пермь З
<Перм.R | Ж: 6>
>>> Пермь.Р + Пермь.З
6
>>> RW = Перм.Р | Пермь З
>>> Пермь.Р в RW
Правда
 

Также можно назвать комбинации:

 >>> класс Пермь (IntFlag):
... R = 4
... W = 2
... X = 1
... RWX = 7
>>> Perm.RWX
<Перм. RWX: 7>
>>> ~ Пермь.RWX
<Пермь-8: -8>
 

Еще одно важное различие между IntFlag и Enum заключается в том, что если флаги не установлены (значение 0), его логическая оценка будет Ложь :

 >>> Пермь., ~). в отличие
  IntFlag , их нельзя комбинировать или сравнивать с любыми
other  Flag  enumeration, ни  int . Пока можно
указать значения напрямую, рекомендуется использовать  auto  в качестве
значение и позвольте  Flag  выбрать подходящее значение. 

Подобно IntFlag , если комбинация элементов Flag не дает флаги установлены, логическая оценка - Ложь :

 >>> from enum import Flag, auto
>>> Цвет класса (Флаг):
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> Color.RED & Color.GREEN
<Цвет.0: 0>
>>> bool (Color.RED & Color.GREEN)
Ложь
 

Отдельные флаги должны иметь значения, являющиеся степенями двойки (1, 2, 4, 8,…), а комбинаций флагов не будет:

 >>> Цвет класса (Флаг):
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
... БЕЛЫЙ = КРАСНЫЙ | СИНИЙ | ЗЕЛЕНЫЙ
...
>>> Цвет.БЕЛЫЙ
<Цвет.БЕЛЫЙ: 7>
 

Присвоение имени условию «флаги не установлены» не изменяет его логическое значение. значение:

 >>> Цвет класса (Флаг):
... ЧЕРНЫЙ = 0
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> Цвет. ЧЕРНЫЙ
<Цвет ЧЕРНЫЙ: 0>
>>> bool (Цвет ЧЕРНЫЙ)
Ложь
 

Примечание

Для большинства нового кода Enum и Flag строго рекомендуется, поскольку IntEnum и IntFlag ломают некоторые семантические обещания перечисления (будучи сопоставимы с целыми числами и таким образом, по транзитивности к другим несвязанным перечислениям). IntEnum и IntFlag следует использовать только в тех случаях, когда Enum и Флаг не годится; например, при замене целочисленных констант с перечислениями или для взаимодействия с другими системами.

прочие

Хотя IntEnum является частью модуля enum , это было бы очень просто реализовать самостоятельно:

 класс IntEnum (int, Enum):
    проходить
 

Это демонстрирует, как могут быть определены аналогичные производные перечисления; Например StrEnum , который смешивается с str вместо int .

Некоторые правила:

  1. При создании подкласса Enum смешанные типы должны появляться перед Сам Enum в последовательности баз, как в IntEnum пример выше.

  2. Хотя Enum может иметь элементы любого типа, как только вы смешиваете дополнительный тип, все члены должны иметь значения этого типа, например int выше. Это ограничение не распространяется на микшеры, которые только добавьте методы и не указывайте другой тип.

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

  4. % -стилевое форматирование: % s и % r вызывают классы Enum __str __ () и __repr __ () соответственно; другие коды (например, % i или % h для IntEnum) рассматривать член перечисления как его смешанный тип.

  5. Форматированные строковые литералы, str.format () , и формат () будет использовать смешанный тип __format __ () если __str __ () или __format __ () не переопределено в подклассе, в этом случае будут использоваться замещенные методы или методы Enum . Используйте коды формата! S и! R, чтобы принудительно использовать классы Enum __str __ () и __repr __ () .

__new __ () необходимо использовать всякий раз, когда вы хотите настроить фактическое значение член Enum .Любые другие модификации могут входить либо в __new __ () или __init __ () , при этом предпочтительнее __init __ () .

Например, если вы хотите передать конструктору несколько элементов, но только хочу, чтобы одним из них было значение:

 >>> Координата класса (байты, Enum):
... "" "
... Координаты с двоичными кодами, которые могут быть проиндексированы с помощью кода int.
... "" "
... def __new __ (cls, value, label, unit):
... obj = байты .__ новый __ (cls, [значение])
... obj._value_ = значение
... obj.label = label
... obj.unit = unit
... вернуть объект
... PX = (0, 'P.X', 'km')
... PY = (1, 'P.Y', 'km')
... VX = (2, 'V.X', 'км / с')
... VY = (3, 'V.Y', 'км / с')
...

>>> print (Координата ['PY'])
Координата.PY

>>> print (Координата (3))
Координата.VY
 

Интересные примеры

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

Без значений

Во многих случаях использования все равно, каково фактическое значение перечисления. является. Есть несколько способов определить этот тип простого перечисления:

  • использовать экземпляры auto для значения

  • использовать экземпляры объекта в качестве значения

  • использовать описательную строку в качестве значения

  • использовать кортеж в качестве значения и пользовательский __new __ () для замены кортеж со значением int

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

Какой бы метод вы ни выбрали, вы должны предоставить repr () , который также скрывает (неважное) значение:

 >>> класс NoValue (Enum):
... def __repr __ (сам):
... return '<% s.% s>'% (self .__ class __.__ name__, self.name)
...
 
Использование
Авто

При использовании auto будет выглядеть так:

 >>> цвет класса (NoValue):
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> Цвет.ЗЕЛЕНЫЙ
<Цвет.ЗЕЛЕНЫЙ>
 
Использование объекта

Использование объекта будет выглядеть так:

 >>> цвет класса (NoValue):
... КРАСНЫЙ = объект ()
... ЗЕЛЕНЫЙ = объект ()
... СИНИЙ = объект ()
...
>>> Color.GREEN
<Цвет.ЗЕЛЕНЫЙ>
 
Использование описательной строки

Использование строки в качестве значения будет выглядеть так:

 >>> цвет класса (NoValue):
... КРАСНЫЙ = 'стоп'
... ЗЕЛЕНЫЙ = 'идти'
... СИНИЙ = 'слишком быстро!'
...
>>> Color.GREEN
<Цвет.ЗЕЛЕНЫЙ>
>>> Color.GREEN.value
'идти'
 
Использование кастомного
__new __ ()

Использование автоматической нумерации __new __ () будет выглядеть так:

 >>> класс AutoNumber (NoValue):
... def __new __ (cls):
... значение = len (cls .__ members__) + 1
... obj = объект .__ новый __ (cls)
... obj._value_ = значение
... вернуть объект
...
>>> Цвет класса (AutoNumber):
... КРАСНЫЙ = ()
... ЗЕЛЕНЫЙ = ()
... СИНИЙ = ()
...
>>> Color.GREEN
<Цвет.ЗЕЛЕНЫЙ>
>>> Color.GREEN.value
2
 

Чтобы сделать AutoNumber более универсальным, добавьте в подпись * args :

 >>> класс AutoNumber (NoValue):
... def __new __ (cls, * args): # это единственное изменение сверху
... значение = len (cls .__ members__) + 1
... obj = объект .__ новый __ (cls)
... obj._value_ = значение
... вернуть объект
...
 

Затем, унаследовав от AutoNumber , вы можете написать свой собственный __init__ для обработки любых дополнительных аргументов:

 >>> Образец класса (AutoNumber):
... def __init __ (self, pantone = 'unknown'):
... self.pantone = pantone
... AUBURN = '3497'
... SEA_GREEN = '1246'
... BLEACHED_CORAL = () # Новый цвет, кода Pantone пока нет!
...
>>> Образец.SEA_GREEN
<Образец.SEA_GREEN: 2>
>>> Свотчи.SEA_GREEN.pantone
'1246'
>>> Swatch.BLEACHED_CORAL.pantone
'неизвестный'
 

Примечание

Метод __new __ () , если он определен, используется во время создания Enum члены; затем он заменяется Enum __new __ () , который используется после создание класса для поиска существующих членов.

OrderedEnum

Упорядоченное перечисление, которое не основано на IntEnum и поэтому поддерживает нормальные инварианты Enum (например, несопоставимые с другими перечислений):

 >>> класс OrderedEnum (Enum):
... def __ge __ (себя, другое):
... если self .__ class__ другой .__ class__:
... вернуть self.value> = other.value
... вернуть NotImplemented
... def __gt __ (себя, другое):
... если self .__ class__ другой.__класс__:
... вернуть self.value> other.value
... вернуть NotImplemented
... def __le __ (себя, другое):
... если self .__ class__ другой .__ class__:
... вернуть self.value <= other.value
... вернуть NotImplemented
... def __lt __ (я, другое):
... если self .__ class__ другой .__ class__:
... вернуть self.value >> Класс Grade (OrderedEnum):
... А = 5
... B = 4
... C = 3
... D = 2
... F = 1
...
>>> Оценка.C <Оценка.A
Правда
 

DuplicateFreeEnum

Вызывает ошибку, если обнаруживается повторяющееся имя члена вместо создания псевдоним:

 >>> класс DuplicateFreeEnum (Enum):
... def __init __ (self, * args):
... cls = self .__ class__
... если есть (self.value == e.value для e в cls):
... a = self.name
... e = cls (self.value) .name
... поднять ValueError (
... "псевдонимы не разрешены в DuplicateFreeEnum:% r ->% r"
...% (а, д))
...
>>> Класс Color (DuplicateFreeEnum):
... КРАСНЫЙ = 1
... ЗЕЛЕНЫЙ = 2
... СИНИЙ = 3
... ГРЕНА = 2
...
Отслеживание (последний вызов последний):
...
ValueError: псевдонимы не разрешены в DuplicateFreeEnum: 'GRENE' -> 'GREEN'
 

Примечание

Это полезный пример создания подкласса Enum для добавления или изменения других поведения, а также запрещающие псевдонимы. Если единственное желаемое изменение - запрещая псевдонимы, вместо них можно использовать декоратор unique () .

Планета

Если определено значение __new __ () или __init __ () , то значение члена перечисления будет передано этим методам:

 >>> планета класса (Enum):
... МЕРКУРИЙ = (3.303e + 23, 2.4397e6)
... ВЕНЕРА = (4.869e + 24, 6.0518e6)
... ЗЕМЛЯ = (5.976e + 24, 6.37814e6)
... MARS = (6.421e + 23, 3.3972e6)
... ЮПИТЕР = (1.9e + 27, 7.1492e7)
... САТУРН = (5.688e + 26, 6.0268e7)
... УРАН = (8.686e + 25, 2.5559e7)
... НЕПТУН = (1.024e + 26, 2.4746e7)
... def __init __ (self, mass, radius):
... self.mass = масса # в килограммах
... self.radius = радиус # в метрах
...     @имущество
... def surface_gravity (self):
... # универсальная гравитационная постоянная (м3 кг-1 с-2)
... G = 6.67300E-11
... вернуть G * self.mass / (self.radius * self.radius)
...
>>> Planet.EARTH.value
(5.976e + 24, 6378140.0)
>>> Planet.EARTH.surface_gravity
9.802652743337129
 

TimePeriod

Пример использования атрибута _ignore_ :

 >>> from datetime import timedelta
>>> Период класса (timedelta, Enum):
... "разное время"
... _ignore_ = 'Период i'
... Период = vars ()
... для i в диапазоне (367):
... Период ['day_% d'% i] = i
...
>>> список (Точка) [: 2]
[, ]
>>> list (Точка) [- 2:]
[, ]
 

Чем отличаются перечисления?

Enums имеют настраиваемый метакласс, который влияет на многие аспекты обоих производных Enum. классы и их экземпляры (члены).

Enum Members (также известные как экземпляры)

Самое интересное в членах Enum - это то, что они одиночки. EnumMeta создает их все, пока создает Enum класс, а затем помещает пользовательский __new __ () на место, чтобы гарантировать что новые экземпляры никогда не создаются путем возврата только существующих экземпляры-члены.

отличных очков

Поддерживается
__dunder__ имен

__members__ - это упорядоченное сопоставление member_name : member Предметы.Доступно только в классе.

__new __ () , если указано, должен создавать и возвращать элементы перечисления; это также очень хорошая идея - правильно установить значение _value_ участника. Один раз все участники созданы, он больше не используется.

Поддерживается
_sunder_ имен
  • _name_ - имя участника

  • _value_ - значение члена; можно установить / изменить в __new__

  • _missing_ - функция поиска, используемая, когда значение не найдено; может быть переопределено

  • _ignore_ - список имен в виде списка или str , которые не будут преобразованы в участников и будут удалены из окончательного класс

  • _order_ - используется в коде Python 2/3 для обеспечения согласованности порядка элементов (атрибут класса, удален при создании класса)

  • _generate_next_value_ - используется функциональным API и auto , чтобы получить подходящее значение для члена перечисления; может быть переопределено

Новое в версии 3.6: _missing_ , _order_ , _generate_next_value_

Новое в версии 3.7: _ignore_

Чтобы обеспечить синхронизацию кода Python 2 / Python 3, атрибут _order_ может предоставляться. Он будет сверяться с фактическим порядком перечисления. и выдаст ошибку, если они не совпадают:

 >>> Цвет класса (Enum):
... _order_ = 'КРАСНЫЙ ЗЕЛЕНЫЙ СИНИЙ'
... КРАСНЫЙ = 1
... СИНИЙ = 3
... ЗЕЛЕНЫЙ = 2
...
Отслеживание (последний вызов последний):
...
TypeError: порядок элементов не соответствует _order_
 

Примечание

В коде Python 2 атрибут _order_ необходим как определение заказ теряется до того, как его можно будет записать.

_Private__names

Частные имена будут обычными атрибутами в Python 3.10, а не ошибкой. или член (в зависимости от того, заканчивается ли имя знаком подчеркивания). Используя эти имена в 3.9 будет выдано DeprecationWarning .

Enum тип элемента

Члены Enum являются экземплярами своего класса Enum и являются обычно используется как EnumClass. member . При определенных обстоятельствах они также можно получить доступ как EnumClass.member.member , но вы никогда не должны этого делать это, поскольку этот поиск может потерпеть неудачу или, что еще хуже, вернуть что-то помимо Enum член, которого вы ищете (это еще одна веская причина использовать имена участников в верхнем регистре):

 >>> класс FieldTypes (Enum):
... name = 0
... значение = 1
... размер = 2
...
>>> FieldTypes.value.size

>>> FieldTypes.size.value
2
 
Логическое значение
классов и членов Enum

Элементы Enum , которые смешаны с типами, отличными от Enum (например, int , str и т. Д.) Оцениваются согласно смешанному правила типа; в противном случае все участники оценивают как Истинно . Сделать ваш логическая оценка собственного Enum зависит от значения члена, добавьте следующее к ваш класс:

 def __bool __ (сам):
    return bool (self.значение)
 

Классы Enum всегда оцениваются как True .

Enum классы с методами

Если вы дадите своему подклассу Enum дополнительные методы, такие как Planet класс выше, эти методы будут отображаться в dir () члена, но не класса:

 >>> реж (Планета)
['ЗЕМЛЯ', 'ЮПИТЕР', 'МАРС', 'МЕРКУРИЙ', 'НЕПТУН', 'САТУРН', 'УРАН', 'ВЕНЕРА', '__class__', '__doc__', '__members__', '__module__']
>>> реж (Planet.ЗЕМЛЯ)
['__class__', '__doc__', '__module__', 'name', 'surface_gravity', 'value']
 
Объединение элементов
Флаг

Если комбинация членов Flag не названа, функция repr () будет включать все именованные флаги и все именованные комбинации флагов, которые находятся в значении:

 >>> Цвет класса (Флаг):
.
Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *