Акт о возврате товара образец: Образец акта возврата товара поставщику 2021

Акт о возврате товара образец: Образец акта возврата товара поставщику 2021

Содержание

Акт возврата денежных средств | Форма КМ-3

Если покупатель возвращает товар, оплаченный наличными, или если чек пробит ошибочно, заполняется форма (акт) КМ-3. Скачать бланк, образец заполнения, а также прочитать инструкцию по оформлению можно ниже.

Зарегистрируйтесь в онлайн-сервисе печати документов МойСклад, где вы совершенно бесплатно сможете:

  • Скачать интересующий вас бланк в формате Excel или Word
  • Заполнить и распечатать документ онлайн (это очень удобно)

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

Акт КМ-3: образец заполнения

Форма КМ-3 составляется в одном экземпляре комиссией, в которую входит заведующий отделом и кассир.

Утверждается документ руководителем.

Акт возврата денежных средств: скачать образец

Зарегистрируйтесь в онлайн-сервисе печати документов МойСклад, где вы совершенно бесплатно сможете:

  • Скачать интересующий вас образец в формате Excel или Word
  • Заполнить и распечатать документ онлайн (это очень удобно)

Начинать заполнение акта возврата денежных средств нужно с шапки. В ней укажите:

  • название компании, ее адрес и ИНН,
  • сведения о кассе: модель, номер производителя и регистрационный,
  • ФИО кассира, который оформлял возврат.

Далее заполняется табличная часть. В ней надо указать:

  • номер и сумму каждого чека, по которому был возврат,
  • должность и ФИО сотрудника, который разрешил вернуть деньги,
  • общую сумму возврата — цифрами и прописью.

Заполнять форму КМ-3 нужно в день возврата денег покупателю. Если Z-отчет за смену уже сняли, заполните расходный кассовый ордер.

КМ-3: бесплатно скачать бланк и образец

Зарегистрируйтесь в онлайн-сервисе печати документов МойСклад, где вы совершенно бесплатно сможете:

  • Скачать интересующий вас бланк в формате Excel или Word
  • Заполнить и распечатать документ онлайн (это очень удобно)

Заполнение формы КМ-3 при использовании онлайн-кассы

Используя онлайн-кассы, заполнять акт (форму КМ-3) при возврате денег покупателю необязательно. Достаточно информации, которая поступает в налоговую с ККТ.

Если используете онлайн-кассу, надо оформить чек с признаком «возврат прихода» на основании заявления покупателя. Кроме того, нужно заполнить РКО на сумму возврата.

Более 1 000 000 компаний уже печатают счета, накладные и другие документы в сервисе МойСклад
Начать использовать Далее — ответы на часто задаваемые вопросы о применении формы КМ-3.

Сколько надо хранить акт возврата денежных средств?

В архиве бухгалтерии форма КМ-3 хранится 5 лет.

Нужно ли заполнять бланк акта КМ-3, если мы уже установили онлайн-кассу?

Не нужно. Вам надо оформлять чек с признаком «возврат прихода» и РКО.

Надо ли оформлять форму КМ-3, если покупатель расплатился картой и хочет вернуть товар?

Нет. Если покупатель приобрел товар за наличные, а потом решил вернуть его, продавец должен оформить акт КМ-3. Образец заполнения здесь >>

Вам также могут пригодиться:

Расходный кассовый ордер

Заявление на возврат товара от покупателя

Другие формы документов

Акт возврата товара поставщику: образец, ситуации возврата, права

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

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

В каких случаях составляется документ о возврате

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

Основание для возврата может возникнуть в двух случаях

:

  1. Если купленная вещь является некачественной.
  2. Если вещь является качественной.

Возврат продукции плохого качества

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

Устанавливает характер качества продукции экспертиза.

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

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

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

При обнаружении недостатка приобретатель вправе:

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

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

Бракованной считается и вещь, информация о которой не была предоставлена.

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

Возврат или обмен качественной вещи

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

Невозвратное имущество, установленное Перечнем, не может быть возвращено.

К этому же списку относятся и продовольственные продукты.

Важно знать! Оформление возврата осуществляется только в четырнадцатидневный срок с момента совершения покупки!

Требования к возвращаемой продукции:

  1. Не должна быть в употреблении.
  2. Сохранены товарные качества и свойства.
  3. Сохранены пломбы и ярлыки.
  4. Имеется квитанция, подтверждающая оплату.
  5. Осталась упаковка.

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

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

Возвращение товара при совершении интернет-покупкок

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

В такой ситуации имущество направляется совместно с актом передачи.

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

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

Возврат поставленного имущества

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

При поставке продукции, возврат товара поставщику производится:

  • если поставленное имущество является некачественным;
  • если поставщик нарушил правила сдачи-приемки при поставке.

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

При поставке продукции сторонами составляется акт приема-передачи или универсальный акт передачи, его еще называют УПД.

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

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

Возврат качественного товара поставщику возможен если:

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

Возврат качественного товара поставщику при нарушении условии о количестве и комплектности, и рассматривается, как возврат некачественного товара поставщику.

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

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

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

Требования к составлению акта возврата

Законодательно каких-либо требований к документу передачи не имеется. Но предусмотрены существенные нюансы, которые следует соблюсти при составлении акта.

Бланк должен содержать:

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

Важно, чтобы бланк составлялся для каждой стороны.

Возврат оборудования поставщику может осуществляться на основании фактуры. Фактура на возврат товара поставщику подписывается двумя сторонами.

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

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

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

С актом передачи верните имущество продавцу, иначе он не будет подписан, и вы потеряете сроки получения денег за покупку или обмен продукции.

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

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

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

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

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

Иногда решение Роспотребнадзора является весомым доказательством нарушения ваших прав при совершении покупки. После отказа принять оборудование с подписанием акта в адрес продавца можно будет написать письмо о возврате товара с требованием завизировать акт и вернуть деньги.

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

Заключение

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

Счастливых покупок!

образец 2021 — ОМЕГА Групп

При обнаружении дефекта после совершенной покупки, каждый покупатель имеет право вернуть товар ненадлежащего качества в магазин. Это закреплено на законодательном уровне в Законе о Защите Прав потребителей. Место совершения покупки не имеет значения: будь то торговый центр, рынок или в интернет-магазин. Сделать это можно в течение 14 дней при соблюдении некоторых условий.

Причины возврата товара ненадлежащего качества

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

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

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

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

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

  1. Приборы личного пользования.
  2. Предметы гигиены.
  3. Ювелирные изделия.
  4. Детские мягкие игрушки.
  5. Перьевые и пуховые изделия.

Это далеко не весь перечень. С полным списком можно ознакомиться на сайте Комитета по Защите прав потребителя РФ.

Как вернуть товар ненадлежащего качества на гарантийном сроке

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

Необходимый перечень документов:

  • Заявление на возврат средств за некачественный товар.
  • Акт технической экспертизы.
  • Акт о возврате товара в магазин.
  • Акт о возврате денежных средств продавцом.
  • Паспорт.

Скачать образец заявления на возврат некачественного товара можно по ссылке.

Возврат товара по согласованию сторон

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

Необходимый перечень документов:

  1. Заявление на возврат некачественного товара.
  2. Претензия на возврат некачественного товара в произвольной форме с объяснениями причин возврата, изложенная в произвольной форме.
  3. Письменное согласование возврата или обмена.
  4. Расписка о произведенном обмене или возврате денежных средств.
  5. Акт о возврате товара в магазин.
  6. Акт о возврате денежных средств продавцом.
  7. Паспорт.

Принято считать, что продавцы неохотно возвращают деньги и не всегда есть возможность обмена. Это ошибочное мнение. Зная свои права, которые изложены в Законе о защите прав потребителя РФ, вы сможете отстоять их, соблюдая все правила купли-продажи. Сохраняйте чек об оплате в течение всего гарантийного срока, внимательно присмотритесь к товару в течение 14 дней, сохраняйте упаковку и прилагающую документацию. Самое главное, изделие не должно иметь следов пользования. При соблюдении этих несложных правил, вы всегда сможете себя подстраховать.

Образец заявления на возврат денег за некачественный товар

Образец претензии на возврат денег за некачественный товар

Категория: Образцы документовДата: 10.06.2020 г.

Акт возврата товара — поставщику образец, бланк, от покупателя, ненадлежащего качества, бракованного товара

Если необходимо вернуть товар продавцу (поставщику), важную роль играет правильное документальное сопровождение процедуры.

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

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

Покупатель товара, являющийся предпринимателем, обладает определенными правами субъекта юридической деятельности.

Так при приобретении некачественного товара он вправе требовать:

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

Если идентичная продукция у поставщика отсутствует либо дефекты являются неустранимыми, то покупатель имеет право на:

  • обмен некачественного товара на иную продукцию;
  • возврат стоимости покупки в полном объеме.

К причинам, по которым товар может быть возвращен, относятся:

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

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

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

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

Иногда торговое предприятие приобретает товары сезонные, которые в прочее время абсолютно не востребованы. В таком случае стороны заранее договариваются о возврате непроданной продукции.

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

Необходимые термины

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

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

Обязательно бланк документа включает в себя такие сведения как:

  • дата и место составления;
  • реквизиты сторон;
  • ссылка на договор поставки или иной документ, регулирующий поступление товара покупателю;
  • причина возврата товара;
  • порядок возврата;
  • процесс расчетов меж сторонами;
  • подписи сторон, печати.

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

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

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

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

Какова его роль

Возврат товара поставщику сопровождается документами, подтверждающими факт брака. При этом покупатель вправе предъявить продавцу претензии относительно имеющихся расхождений.

Оформляется претензия на основании акта формы ТОРГ-2. В нем фиксируется несоответствие качества и количества товаров условиям поставки.

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

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

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

То есть отсутствие акта возврата автоматически делает обратную передачу товара сделкой купли-продажи.

Законные основания

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

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

Что касается гражданского законодательства РФ, то в нем закреплено несколько оснований, позволяющих вернуть товар продавцу.

К таковым относится несоответствие по:

  • ассортименту;
  • качеству;
  • таре и упаковке;
  • комплектности.

Форма акта возврата утверждается организацией самостоятельно. Тем более что с 2013 года применение унифицированных форм стало не обязательным. Но нередко для оформления акта используется типовая форма ТОРГ-12 (товарная накладная).

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

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

При обнаружении недочетов товара или при других нарушений договора, получатель товара должен действовать на основании ст.483 ГК РФ, то есть отправить поставщику надлежащее уведомление.

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

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

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

При этом стороны вольны выбирать способ возвращения:

  • посредством акта возврата товара;
  • на основании возвратной товарной накладной;
  • путем передачи товара на основании самостоятельной сделки с составлением товарной накладной (целесообразно, когда оплата осуществлена покупателем в полном объеме).

Как заполнить

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

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

  • номер и дата документа;
  • реквизиты сторон;
  • суть основного договора;
  • причина возврата;
  • стоимость товара;
  • возможные неустойки, компенсации, штрафы;
  • подписи сторон.

Бракованного товара

Если по каким-то причинам принимается товар с браком. Например, доставка осуществляется подрядчиком продавца, и транспортная компания возврат не принимает.

В этой ситуации сразу же после приема товара по накладной ТОРГ-12, в присутствие представителя поставщика или транспортной компании оформляется акт о расхождениях по качеству.

Затем пишется и отправляется претензия в адрес поставщика. Акт о расхождениях составляется по форме ТОРГ-2, подтверждающей неликвидность продукции и выступающей основанием для составления претензии.

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

После того как поставщик рассмотрит претензию и даст согласие на ее удовлетворение, вновь составляется накладная ТОРГ-12. Для покупателя она будет возвратной, а для поставщика приходной.

То есть поставщик покупает ранее проданный товар и имеет место обратная реализация. В графе «Основание» формы ТОРГ-12 прописывается «Возврат некачественного товара».

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

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

При несоблюдении временных ограничений составляется акт фиксации нарушений сроков возврата товара потребителю.

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

Ненадлежащего качества

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

При этом составления акта возврата не требуется, достаточно внести коррективы в приходную накладную. Если поставщик готов немедленно забрать товар ненадлежащего качества, то из накладной ТОРГ-12 вычеркиваются возвращаемые позиции.

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

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

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

По договору комиссии

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

При этом возникают сложности с вычетом НДС – если одна сторона НДС не платит, то вторая сторона теряет средства, поскольку не может принимать НДС к вычету.

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

Возврат товара от комиссионера к комитенту оформляется, как и получение, то есть накладной по форме ТОРГ-12. В поле «Основание» возвратной накладной можно указать «Возврат по причине реализации».

Образец акта возврата товара поставщику от покупателя

Акт возврата товара покупателем поставщику составляется в простой письменной форме. Количество экземпляров не регламентировано, но каждая сторона должна получить один экземпляр акта в оригинале.

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

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

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

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

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

Что делать, если поставщик принять возврат товара согласен, но стороны не пришли к единому решению о правовых последствиях такой операции?

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

Включается ли возврат товара в акт сверки

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

Здесь все зависит от особенностей возврата. Так при возврате некачественного товара на момент поставки возвращаемый товар в акт сверки не попадает.

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

Другое дело, когда возврат товара осуществляется уже после его приема по причинам не связанным с качеством. В этом случае фактически имеет место обратная реализация, сопровождаемая составлением возвратной накладной ТОРГ-12.

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

Документ об отказе принять товар

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

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

Как заполнить акт передачи товара на реализацию узнайте из статьи: акт на товар.

Образец акта скрытых работ в строительстве, читайте здесь.

Перечень работ для актов скрытых работ в строительстве, смотрите здесь.

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

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

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

При необоснованном отказе продавца от принятия возврата на основании ст.514 ГК покупатель вправе по истечении разумного срока вернуть товар самостоятельно либо реализовать.

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

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

Взамен акта возврата может оформляться и иной документ. При отказе поставщика принять возврат товара, покупателю надлежит руководствоваться положениями ст.514 ГК.

Акт возврата товара образец

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

Скачать документ

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

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

Скачать документ

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

Бланк акта содержит

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

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

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

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

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

 

Акт возврата товара — образец составления документа

Купили вещь по размеру, но без примерки. Или мерили, но в магазине при тусклом освещении она казалась идеальной во всём. Знакомая история?

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

Второй вариант потребует больше сил и времени. Зато справедливость восторжествует. В помощь нам — закон «О защите прав потребителей».

Когда составляется документ о возврате?

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

Лишний товар в чеке тоже требует процедуры возврата.

Чаще всего акт возврата товара поставщику (акт возврата товара ненадлежащего качества) оформляется по причине покупки некачественного товара.

В течении 14-ти дней вещь можно либо обменять, либо вернуть за неё деньги.

Сдать обратно возможно и качественный товар, если не подошёл: цвет, модель, фасон, размер или другое (ст. 25 ФЗ «О защите прав потребителей», ст. 502 ГК РФ).

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

Это чётко регламентированный на законодательном уровне список, утверждённый Постановлением Правительства РФ.

Возврат товара из интернет-магазинов

Сейчас проще заказать всё нужное в интернет-магазине. Удобно и комфортно.

Всё доставляется до квартиры. Только рисков значительно больше.

Товар нельзя примерить, потрогать, а фотографии не всегда правильно передают цвет. Но и тут государство защитило нас.

Вернуть стоимость покупки, совершённой дистанционно, можно (Постановление Правительства РФ от 27.09. 2007 г. № 612). Только на претензию у Вас 7 дней.

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

Обязанности покупателя

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

Если чек не сохранился. Не важно, по какой причине. Законом предусмотрен и такой вариант (п. 5 ст. 18 ФЗ). Тогда к акту возврата прикрепляется письменное заявление покупателя или объяснительная записка кассира.

Процедура проведения возврата

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

Вместе с деньгами он получает свой экземпляр акта возврата товара.

Содержание акта

Единого образца такого документа не существует. Если у магазина нет готового бланка, акт пишется произвольно. В нём обязательно прописываются следующие пункты (для отношений «поставщик — магазин»):

  • дата и номер документа;
  • реквизиты сторон;
  • описание договора;
  • причины возврата;
  • стоимость товара, возможные неустойки, штрафы, компенсации;
  • подписи и печати обеих сторон.

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

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

Правила возврата билетов РЖД и суммы удержаний — тема этой статьи.

Образец акта

Типовой образец акта возврата товара

Образец акта на возврат товара поставщику

Имея образец акта и бланк, можно без труда составить документ о возврате товара.

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

Дорогие читатели, информация в статье могла устареть, воспользуйтесь бесплатной консультацией позвонив по телефонам: Москва +7 (499) 938-66-24, Санкт-Петербург +7 (812) 425-62-38, Регионы 8800-350-97-52


Акт МХ3 возврата материальных ценностей, принятых на хранение

Акт о возврате товарно-материальных ценностей, сданных на хранение (по форме МХ-3) — это документ первичной учетной документации, составляемый материально-ответственным лицом организации-хранителя по истечении срока хранения материальных ценностей при возврате их поклажедателю. Образец акта возврата ТМЦ, сданных на хранение МХ-3 входит в Альбом унифицированных форм первичной учетной документации по учету продукции, товарно-материальных ценностей в местах хранения, утвержденный Постановлением Госкомстата Российской федерации от 9 августа 1999 г. №66. Применение унифицированных форм первичной учетной документации регламентируется «Положением по ведению бухгалтерского учета и отчетности в Российской Федерации», утвержденным Министерством финансов Российской Федерации от 29 июля 1998 года N34н, а также Указаниями по применению и заполнению форм первичной учетной документации по учету продукции, товарно-материальных ценностей в местах хранения (Постановление Госкомстата РФ от 9 августа 1999 г. №66).

Акт возврата сданных на хранение материальных ценностей по форме МХ-3 помимо сведений о товарно-материальных ценностях на оборотной стороне содержит таблицу, являющуюся по сути актом сдачи-приемки работ и услуг. В графе 2 этой таблицы указываются услуги по хранению материальных ценностей, а также, при необходимости, такие работы как выгрузка, погрузка, переработка и т.п. Расчет стоимости выполненных организацией-хранителем работ и услуг, указанный в акте возврата, служит основанием для списания на себестоимость понесенных поклажедателем затрат. При этом акты МХ-1 (акт приема-передачи на хранение) и МХ-3 (акт возврата) не являются ценными бумагами, как складские свидетельства, а служат только для учета и отчетности.

Организация-хранитель, осуществляющая свою деятельность по договорам хранения, на основании актов МХ-1 и МХ-3 ведет журнал учета товарно-материальных ценностей, сданных на хранение (форма МХ-2).

Образец акта о возврате товарно-материальных ценностей, сданных на хранение (по форме МХ-3) является рекомендуемым и может видоизменяться для удобства размещения и обработки информации. В частности разрешается расширять или сужать графы и строки с учетом значности показателей, включать дополнительные строки, а также вкладные листы. Допускается также внесение в документ, в случае необходимости, дополнительных реквизитов. Однако изменение или удаление утвержденных Госкомстатом России реквизитов в форме запрещено. Согласно Указаниям по применению и заполнению форм первичной учетной документации по учету продукции, товарно-материальных ценностей в местах хранения акт возврата сданных на хранение материальных ценностей по форме МХ-3 должен быть составлен в двух экземплярах, один из которых остается в организации-хранителе, а второй — передается поклажедателю.

Заполнить бланк акта возврата МХ-3
Образец акта возврата МХ-3 — pdf
Образец акта возврата МХ-3 — gif

Вопросы и ответы по форме

Использование и передовые методы — Настоящий Python

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

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

В этом руководстве вы узнаете:

  • Как использовать Python return statement в ваших функциях
  • Как вернуть одиночных или множественных значений из ваших функций
  • Какие передовые практики соблюдать при использовании return statement

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

Бесплатный бонус: 5 мыслей о Python Mastery, бесплатный курс для разработчиков Python, который показывает вам план действий и образ мышления, который вам понадобится, чтобы вывести свои навыки Python на новый уровень.

Начало работы с функциями Python

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

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

Иногда это различие настолько велико, что вам нужно использовать конкретное ключевое слово для определения процедуры или подпрограммы и другое ключевое слово для определения функции. Например, язык программирования Visual Basic использует Sub и Function , чтобы различать их.

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

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

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

Несмотря на то, что в официальной документации указано, что функция «возвращает некоторое значение вызывающей стороне», вы скоро увидите, что функции могут возвращать любой объект Python в код вызывающей стороны.

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

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

Второй компонент функции — это блок кода или тело . Python определяет блоки кода, используя отступы вместо скобок, ключевые слова begin и end и т. Д. Итак, чтобы определить функцию в Python, вы можете использовать следующий синтаксис:

  def имя_функции (arg1, arg2, ..., argN):
    # Код функции находится здесь ...
    проходить
  

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

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

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

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

  имя_функции (аргумент1, аргумент2, ..., аргументN)
  

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

Чтобы ваши функции возвращали значение, вам нужно использовать оператор Python return . Это то, что вы рассмотрите с этого момента.

Понимание возврата Python

Заявление

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

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

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

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

Явный

возврат Заявления

Явный return Оператор немедленно завершает выполнение функции и отправляет возвращаемое значение обратно в вызывающий код.Чтобы добавить явный оператор return к функции Python, вам нужно использовать return , за которым следует необязательное возвращаемое значение:

>>>
  >>> def return_42 ():
... return 42 # Явный оператор возврата
...

>>> return_42 () # Код звонящего получает 42
42
  

Когда вы определяете return_42 () , вы добавляете явный оператор return ( return 42 ) в конце блока кода функции. 42 — это явное возвращаемое значение return_42 () . Это означает, что каждый раз, когда вы вызываете return_42 () , функция отправляет 42 обратно вызывающей стороне.

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

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

>>>
  >>> число = return_42 ()
>>> число
42

>>> return_42 () * 2
84

>>> return_42 () + 5
47
  

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

Обратите внимание, что вы можете использовать оператор return только внутри определения функции или метода. Если вы используете его где-нибудь еще, то получите SyntaxError :

>>>
  >>> возврат 42
  Файл "", строка 1
SyntaxError: 'return' вне функции
  

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

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

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

>>>
  >>> def get_even (числа):
... even_nums = [число вместо числа в числах, если не число% 2]
... вернуть even_nums
...

>>> get_even ([1, 2, 3, 4, 5, 6])
[2, 4, 6]
  

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

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

>>>
  >>> def get_even (числа):
... return [число вместо числа в числах, если не число% 2]
...

>>> get_even ([1, 2, 3, 4, 5, 6])
[2, 4, 6]
  

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

Примечание: Несмотря на то, что понимания списка построены с использованием для и (необязательно) if ключевых слов, они считаются выражениями, а не утверждениями. Вот почему вы можете использовать их в операторе return .

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

. >>>
  >>> def mean (пример):
... вернуть сумму (образец) / len (образец)
...

>>> среднее ([1, 2, 3, 4])
2,5
  

В mean () вы не используете локальную переменную для хранения результата вычисления. Вместо этого вы используете выражение непосредственно как возвращаемое значение. Python сначала оценивает выражение sum (sample) / len (sample) , а затем возвращает результат оценки, которым в данном случае является значение 2,5 .

Неявный

возврат Заявления

Функция Python всегда будет иметь возвращаемое значение.В Python нет понятия процедуры или рутины. Итак, если вы явно не используете возвращаемое значение в операторе return или полностью опускаете оператор return , тогда Python неявно вернет вам значение по умолчанию. Это возвращаемое значение по умолчанию всегда будет Нет .

Допустим, вы пишете функцию, которая добавляет 1 к числу x , но вы забываете предоставить оператор return . В этом случае вы получите неявный return оператор , который использует None в качестве возвращаемого значения:

>>>
  >>> def add_one (x):
... # Никакого возврата
... результат = x + 1
...

>>> значение = add_one (5)
>>> значение

>>> print (значение)
Никто
  

Если вы не предоставите явный оператор return с явным возвращаемым значением, тогда Python предоставит неявный оператор return , используя None в качестве возвращаемого значения. В приведенном выше примере add_one () добавляет 1 к x и сохраняет значение в result , но не возвращает result .Вот почему вы получаете значение = Нет вместо значения = 6 . Чтобы устранить проблему, вам нужно либо вернуть результат , либо напрямую вернуть x + 1 .

Пример функции, которая возвращает Нет : print () . Цель этой функции — распечатать объекты в файл текстового потока, который обычно является стандартным выводом (ваш экран). Таким образом, этой функции не требуется явный оператор return , потому что он не возвращает ничего полезного или значимого:

>>>
  >>> return_value = print ("Привет, мир")
Привет, мир

>>> print (return_value)
Никто
  

При вызове print () на экран выводится Hello, World .Так как это цель print () , функция не должна возвращать ничего полезного, поэтому вы получите None в качестве возвращаемого значения.

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

Возврат и печать

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

>>>
  >>> def print_greeting ():
... print ("Привет, мир")
...

>>> print_greeting ()
Привет, мир

>>> def return_greeting ():
... return "Hello, World"
...

>>> return_greeting ()
'Привет, мир'
  

Обе функции, похоже, делают одно и то же. В обоих случаях на экране отображается Hello, World . Есть только тонкое видимое различие — одинарные кавычки во втором примере.Но посмотрите, что произойдет, если вы вернете другой тип данных, скажем, объект int :

>>>
  >>> def print_42 ():
... печать (42)
...

>>> print_42 ()
42

>>> def return_42 ():
... возврат 42
...

>>> return_42 ()
42
  

Сейчас видимой разницы нет. В обоих случаях на экране отображается 42 . Такое поведение может сбивать с толку, если вы только начинаете работать с Python. Вы можете подумать, что возврат и печать значения — это эквивалентные действия.

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

  1def add (a, b):
 2 результат = a + b
 3 вернуть результат
 4
 5add (2, 2)
  

add () берет два числа, складывает их и возвращает результат. На , строка 5 , вы звоните добавить () , чтобы получить сумму 2 плюс 2 . Поскольку вы все еще изучаете разницу между возвратом и печатью значения, вы можете ожидать, что ваш скрипт выведет на экран 4 .Однако этого не происходит, и на экране ничего не отображается.

Попробуйте сами. Сохраните свой сценарий в файл с именем add.py и запустите его из командной строки следующим образом:

Если вы запустите add.py из командной строки, вы не увидите никаких результатов на экране. Это связано с тем, что при запуске сценария возвращаемые значения функций, которые вы вызываете в сценарии, не выводятся на экран, как в интерактивном сеансе.

Если вы хотите, чтобы ваш скрипт отображал результат вызова add () на вашем экране, вам нужно явно вызвать print () . Ознакомьтесь со следующим обновлением add.py :

  1def add (a, b):
 2 результат = a + b
 3 вернуть результат
 4
 5print (добавить (2, 2))
  

Теперь, когда вы запустите add.py , вы увидите на экране число 4 .

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

Возврат нескольких значений

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

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

Вот возможная реализация вашей функции:

  статистика импорта как st

def описать (образец):
    return st.mean (образец), st.median (образец), st.mode (образец)
  

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

После того, как вы закодировали describe () , вы можете воспользоваться мощной функцией Python, известной как итеративная распаковка, чтобы распаковать три меры в три отдельные переменные, или вы можете просто сохранить все в одной переменной:

>>>
  >>> sample = [10, 2, 4, 7, 9, 3, 9, 8, 6, 7]
>>> среднее, медиана, режим = описать (образец)

>>> означает
6.5

>>> медиана
7.0

>>> режим
7

>>> desc = описать (образец)
>>> desc
(6.5, 7.0, 7)

>>> тип (по убыванию)
<класс 'кортеж'>
  

Здесь вы распаковываете три возвращаемых значения describe () в переменные mean , median и mode . Обратите внимание, что в последнем примере вы сохраняете все значения в одной переменной desc , которая оказывается кортежем Python .

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

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

>>>
  >>> divmod (15, 3)
(5, 0)

>>> divmod (8, 3)
(2, 2)
  

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

Использование Python

return Заявление: передовой опыт

Итак, вы рассмотрели основы работы оператора Python return . Теперь вы знаете, как писать функции, возвращающие одно или несколько значений вызывающей стороне. Кроме того, вы узнали, что если вы не добавите явный оператор return с явным возвращаемым значением для данной функции, Python добавит его за вас.Это значение будет Нет .

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

Возврат

Нет Явно

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

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

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

  • Если ваша функция имеет несколько операторов return и возвращает None является допустимым вариантом, вам следует рассмотреть явное использование return None вместо того, чтобы полагаться на поведение Python по умолчанию.

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

Когда дело доходит до возврата Нет , вы можете использовать один из трех возможных подходов:

  1. Пропустите оператор return и полагайтесь на поведение по умолчанию, возвращающее None .
  2. Используйте пустой результат , возвращаемый без возвращаемого значения, который также возвращает Нет .
  3. Вернуть Нет явно.

Вот как это работает на практике:

>>>
  >>> def omit_return_stmt ():
... # Пропустите оператор возврата
...     проходить
...
>>> печать (omit_return_stmt ())
Никто

>>> def bare_return ():
... # Использовать чистый доход
...     возвращение
...
>>> печать (bare_return ())
Никто

>>> def return_none_explicitly ():
... # Явно не возвращать None
... return None
...
>>> print (return_none_explicitly ())
Никто
  

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

Запоминание возвращаемого значения

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

Этой проблемы можно избежать, написав оператор return сразу после заголовка функции.Затем вы можете сделать второй проход для записи тела функции. Вот шаблон, который вы можете использовать при написании функций Python:

  def template_func (аргументы):
    result = 0 # Инициализировать возвращаемое значение
    # Ваш код находится здесь ...
    return result # Явно вернуть результат
  

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

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

Избегайте сложных выражений

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

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

Рассмотрим следующую функцию, которая вычисляет дисперсию выборки числовых данных:

>>>
  >>> def variance (data, ddof = 0):
... среднее значение = сумма (данные) / len (данные)
... вернуть сумму ((x - среднее) ** 2 для x в данных) / (len (data) - ddof)
...

>>> дисперсия ([3, 4, 7, 5, 6, 2, 9, 4, 1, 3])
5,24
  

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

Взгляните на следующую альтернативную реализацию variance () :

>>>
  >>> def variance (data, ddof = 0):
... n = len (данные)
... среднее значение = сумма (данные) / n
... total_square_dev = sum ((x - среднее) ** 2 для x в данных)
... вернуть total_square_dev / (n - ddof)
...

>>> дисперсия ([3, 4, 7, 5, 6, 2, 9, 4, 1, 3])
5.24
  

Во второй реализации variance () дисперсия вычисляется в несколько этапов. Каждый шаг представлен временной переменной с понятным именем.

Временные переменные, такие как n , означают и total_square_dev , часто помогают при отладке кода. Если, например, что-то пойдет не так с одним из них, вы можете вызвать print () , чтобы узнать, что происходит, до того, как будет запущен оператор return .

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

Возвращаемые значения и изменение глобалов

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

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

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

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

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

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

>>>
  >>> counter = 0

>>> def increment ():
... глобальный счетчик
... counter + = 1
...

>>> инкремент ()
>>> счетчик
1
  

В этом примере вы сначала создаете глобальную переменную counter с начальным значением 0 .Внутри increment () вы используете оператор global , чтобы сообщить функции, что вы хотите изменить глобальную переменную. Последний оператор увеличивает счетчик на 1 .

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

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

>>>
  >>> counter = 0

>>> def приращение (var):
... вернуть var + 1
...

>>> инкремент (счетчик)
1

>>> счетчик
0

>>> # Явно присвоить новое значение счетчику
>>> счетчик = приращение (счетчик)
>>> счетчик
1
  

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

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

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

Использование

return с условными операторами Функции

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

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

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

Вот возможная реализация этой функции:

>>>
  >>> def my_abs (число):
... если число> 0:
... вернуть номер
... число elif <0:
... return -number
...

>>> my_abs (-15)
15

>>> my_abs (15)
15
  

my_abs () имеет два явных оператора return , каждый из которых заключен в собственный оператор if .Он также имеет неявный оператор return . Если номер оказывается 0 , то ни одно из условий не является истинным, и функция завершается без попадания в явный оператор return . Когда это произойдет, вы автоматически получите Нет .

Взгляните на следующий вызов my_abs () с использованием 0 в качестве аргумента:

>>>
  >>> print (my_abs (0))
Никто
  

Когда вы вызываете my_abs () , используя в качестве аргумента 0 , в результате вы получаете None .Это связано с тем, что поток выполнения доходит до конца функции, не доходя до какого-либо явного оператора return . К сожалению, абсолютное значение 0 равно 0 , а не Нет .

Чтобы решить эту проблему, вы можете добавить третий оператор return либо в новое предложение elif , либо в последнее предложение else :

>>>
  >>> def my_abs (число):
... если число> 0:
... вернуть номер
... elif number <0:
... return -number
...     еще:
... вернуть 0
...

>>> my_abs (0)
0

>>> my_abs (-15)
15

>>> my_abs (15)
15
  

Теперь my_abs () проверяет все возможные условия, число > 0 , число <0 и число == 0 . Цель этого примера - показать, что, когда вы используете условные операторы для предоставления нескольких операторов return , вам необходимо убедиться, что каждая возможная опция получает свой собственный оператор return .В противном случае в вашей функции будет скрытая ошибка.

Наконец, вы можете реализовать my_abs () более кратким, эффективным и питоническим способом, используя один оператор if :

>>>
  >>> def my_abs (число):
... если число <0:
... return -number
... вернуть номер
...

>>> my_abs (0)
0

>>> my_abs (-15)
15

>>> my_abs (15)
15
  

В этом случае ваша функция попадает в первый оператор return , если число <0 .Во всех остальных случаях, будь то number> 0 или number == 0 , он попадает во второй оператор return . С этой новой реализацией ваша функция выглядит намного лучше. Он более читабельный, лаконичный и эффективный.

Примечание: Существует удобная встроенная функция Python под названием abs () для вычисления абсолютного значения числа. Функция в приведенном выше примере предназначена только для иллюстрации обсуждаемого вопроса.

Если вы используете операторы if для предоставления нескольких операторов return , тогда вам не нужно предложение else для покрытия последнего условия.Просто добавьте оператор return в конце блока кода функции и на первом уровне отступа.

Возвращается

Верно или Ложно

Другой распространенный вариант использования комбинации , если и возвращают операторы , - это когда вы кодируете предикат или функцию с логическим значением. Эта функция возвращает либо True , либо False в соответствии с заданным условием.

Например, скажем, вам нужно написать функцию, которая принимает два целых числа, a и b , и возвращает True , если a делится на b .В противном случае функция должна вернуть False . Вот возможная реализация:

>>>
  >>> def is_divisible (a, b):
... если не% b:
... вернуть True
... вернуть False
...

>>> is_divisible (4, 2)
Правда

>>> is_divisible (7, 4)
Ложь
  

is_divisible () возвращает True , если остаток от деления a на b равен 0 . В противном случае возвращается Ложь .Обратите внимание, что в Python значение 0 является ложным, поэтому вам нужно использовать оператор , а не , чтобы отрицать значение истинности условия.

Иногда вы пишете функции-предикаты, которые включают в себя такие операторы, как следующие:

В этих случаях вы можете напрямую использовать логическое выражение в операторе return . Это возможно, потому что эти операторы возвращают либо True , либо False . Следуя этой идее, вот новая реализация is_divisible () :

. >>>
  >>> def is_divisible (a, b):
... вернуть не% b
...

>>> is_divisible (4, 2)
Правда

>>> is_divisible (7, 4)
Ложь
  

Если a делится на b , то a% b возвращает 0 , что в Python является ложным. Итак, чтобы вернуть True , вам нужно использовать оператор , а не .

Примечание. Python следует набору правил для определения истинностного значения объекта.

Например, ложными считаются следующие объекты:

  • Константы, такие как Нет и Ложь
  • Числовые типы с нулевым значением, например 0 , 0.0 , 0j , Десятичное (0) и Дробь (0, 1)
  • Пустые последовательности и коллекции, например "" , () , [] , {} , set () и range (0)
  • Объекты, реализующие __bool __ () с возвращаемым значением False или __len __ () с возвращаемым значением 0

Любой другой объект будет считаться правдивым.

С другой стороны, если вы попытаетесь использовать условия, которые включают логические операторы, такие как или , и , как вы видели раньше, тогда ваши функции предиката не будут работать правильно.Это потому, что эти операторы ведут себя по-разному. Они возвращают один из операндов в условии, а не True или False :

>>>
  >>> 0 и 1
0
>>> 1 и 2
2

>>> 1 или 2
1
>>> 0 или 1
1
  

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

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

>>>
  >>> def both_true (a, b):
... вернуть a и b
...
>>> both_true (1, 2)
2
  

Поскольку и возвращают операнды вместо True или False , ваша функция работает некорректно. Есть как минимум три возможности решить эту проблему:

  1. Явный оператор if
  2. Условное выражение (тернарный оператор)
  3. Встроенная функция Python bool ()

Если вы используете первый подход, то вы можете записать both_true () следующим образом:

>>>
  >>> def both_true (a, b):
... если a и b:
... вернуть True
... вернуть False
...

>>> both_true (1, 2)
Правда

>>> both_true (1, 0)
Ложь
  

Оператор if проверяет, являются ли оба a и b правдой. Если это так, то both_true () возвращает True . В противном случае возвращается Ложь .

Если, с другой стороны, вы используете условное выражение Python или тернарный оператор, то вы можете написать свою функцию-предикат следующим образом:

>>>
  >>> def both_true (a, b):
... вернуть True, если a и b иначе False
...
>>> both_true (1, 2)
Правда

>>> both_true (1, 0)
Ложь
  

Здесь вы используете условное выражение, чтобы предоставить возвращаемое значение для both_true () . Условное выражение оценивается как True , если оба значения a и b истинны. В противном случае окончательный результат: Ложь .

Наконец, если вы используете bool () , вы можете закодировать both_true () следующим образом:

>>>
  >>> def both_true (a, b):
... вернуть bool (a и b)
...

>>> both_true (1, 2)
Правда

>>> both_true (1, 0)
Ложь
  

bool () возвращает True , если a и b истинны, и False в противном случае. Вам решать, какой подход использовать для решения этой проблемы. Однако второе решение кажется более читаемым. Что вы думаете?

Короткозамыкающие петли

Оператор return внутри цикла выполняет какое-то короткое замыкание .Это прерывает выполнение цикла и немедленно возвращает функцию. Чтобы лучше понять это поведение, вы можете написать функцию, которая имитирует any () . Эта встроенная функция принимает итерацию и возвращает True , если хотя бы один из ее элементов является истинным.

Чтобы эмулировать any () , вы можете закодировать функцию, подобную следующей:

>>>
  >>> def my_any (повторяемый):
... для элемента в итерации:
... если элемент:
...             # Короткое замыкание
... return True
... вернуть False

>>> my_any ([0, 0, 1, 0, 0])
Правда

>>> my_any ([0, 0, 0, 0, 0])
Ложь
  

Если любой элемент в итерабельном истинен, то поток выполнения входит в блок if . Оператор return прерывает цикл и немедленно возвращает значение True . Если значение в итерабельном не является истинным, тогда my_any () возвращает False .

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

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

Распознавание мертвого кода

Как только функция встречает оператор return , она завершается без выполнения какого-либо последующего кода. Следовательно, код, который появляется после оператора return функции, обычно называется мертвым кодом . Интерпретатор Python полностью игнорирует мертвый код при запуске ваших функций. Таким образом, использование такого кода в функции бесполезно и сбивает с толку.

Рассмотрим следующую функцию, которая добавляет код после своего оператора return :

>>>
  >>> def dead_code ():
... возврат 42
... # Мертвый код
... print ("Привет, мир")
...

>>> dead_code ()
42
  

Оператор print ("Hello, World") в этом примере никогда не будет выполняться, потому что этот оператор появляется после оператора return функции. Выявление мертвого кода и его удаление - хорошая практика, которую вы можете применить для написания лучших функций.

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

>>>
  >>> def no_dead_code (условие):
... если условие:
... возврат 42
... print ("Привет, мир")
...

>>> no_dead_code (Истина)
42
>>> no_dead_code (Ложь)
Привет, мир
  

Даже несмотря на то, что вызов print () происходит после оператора return , это не мертвый код.Когда условие оценивается как False , запускается вызов print () , и на ваш экран выводится Hello, World .

Возврат нескольких именованных объектов

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

Инициализатор namedtuple принимает несколько аргументов. Однако, чтобы начать использовать namedtuple в своем коде, вам просто нужно знать о первых двух:

  1. typename содержит имя кортежного класса, который вы создаете. Это должна быть строка.
  2. field_names содержит имена полей или атрибутов кортежного класса.Это может быть последовательность строк, например ["x", "y"] , или одна строка, каждое имя которой разделено пробелами или запятыми, например "x y" или "x, y" .

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

  статистика импорта как st
из коллекции импортировать namedtuple

def описать (образец):
    Desc = namedtuple ("Desc", ["средний", "средний", "режим"])
    return Desc (
        ул.среднее (образец),
        st.median (образец),
        st.mode (образец),
    )
  

Внутри describe () вы создаете именованный кортеж с именем Desc . Этот объект может иметь именованные атрибуты, к которым вы можете получить доступ, используя точечную нотацию или операцию индексирования. В этом примере этими атрибутами являются «среднее значение» , «среднее значение» и «режим» .

Вы можете создать объект Desc и использовать его в качестве возвращаемого значения.Для этого вам нужно создать экземпляр Desc , как если бы вы делали это с любым классом Python. Обратите внимание, что вам необходимо указать конкретное значение для каждого именованного атрибута, как вы это делали в операторе return .

Вот как теперь работает describe () :

>>>
  >>> sample = [10, 2, 4, 7, 9, 3, 9, 8, 6, 7]
>>> stat_desc = описать (образец)

>>> stat_desc
Desc (среднее значение = 5,7, медиана = 6,0, режим = 6)

>>> # Получить среднее значение по имени его атрибута
>>> stat_desc.иметь в виду
5,7

>>> # Получение медианы по ее индексу
>>> stat_desc [1]
6.0

>>> # Распаковать значения в три переменные
>>> среднее, медиана, режим = описать (образец)

>>> означает
5,7

>>> режим
6
  

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

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

Функции возврата: закрытие

В Python функции - это объекты первого класса. Первоклассный объект - это объект, который может быть назначен переменной, передан в качестве аргумента функции или использован в качестве возвращаемого значения в функции. Таким образом, вы можете использовать объект функции в качестве возвращаемого значения в любом операторе return .

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

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

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

  def by_factor (коэффициент, число):
    коэффициент возврата * число
  

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

Следующая реализация by_factor () использует замыкание для сохранения значения , фактор между вызовами:

>>>
  >>> def by_factor (коэффициент):
... def умножить (число):
... коэффициент возврата * число
... вернуть умножить
...

>>> двойной = по_фактору (2)
>>> двойной (3)
6
>>> двойной (4)
8

>>> тройной = по_фактору (3)
>>> тройной (3)
9
>>> тройной (4)
12
  

Внутри by_factor () вы определяете внутреннюю функцию с именем multiply () и возвращаете ее, не вызывая ее.Возвращаемый вами функциональный объект - это замыкание, которое сохраняет информацию о состоянии , фактор . Другими словами, он запоминает значение , коэффициент между вызовами. Вот почему double запоминает, что коэффициент был равен 2 , а triple запоминает, что коэффициент был равен 3 .

Обратите внимание, что вы можете свободно повторно использовать double и triple , потому что они не забывают информацию о своем состоянии.

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

>>>
  >>> def by_factor (коэффициент):
... вернуть лямбда-число: коэффициент * число
...

>>> двойной = по_фактору (2)
>>> двойной (3)
6
>>> двойной (4)
8
  

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

Функции приема и возврата: декораторы

Другой способ использования оператора return для возврата объектов функции - это написать функции-декораторы. Функция декоратора принимает объект функции в качестве аргумента и возвращает объект функции. Декоратор каким-то образом обрабатывает декорированную функцию и возвращает ее или заменяет другой функцией или вызываемым объектом.

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

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

>>>
  >>> импортное время

>>> def my_timer (func):
... def _timer (* args, ** kwargs):
... start = time.time ()
... результат = func (* args, ** kwargs)
... конец = time.time ()
... print (f "Время выполнения: {end - start}")
... вернуть результат
... вернуть _timer
...

>>> @my_timer
... def delayed_mean (образец):
... время. сон (1)
... вернуть сумму (образец) / len (образец)
...

>>> delayed_mean ([10, 2, 4, 7, 9, 3, 9, 8, 6, 7])
Срок исполнения: 1.0011096000671387
6.5
  

Синтаксис @my_timer над заголовком delayed_mean () эквивалентен выражению delayed_mean = my_timer (delayed_mean) .В этом случае можно сказать, что my_timer () украшает delayed_mean () .

Python запускает функции декоратора, как только вы импортируете или запускаете модуль или скрипт. Итак, когда вы вызываете delayed_mean () , вы действительно вызываете возвращаемое значение my_timer () , которое является объектом функции _timer . Вызов декорированного delayed_mean () вернет среднее значение выборки, а также будет измерять время выполнения исходного delayed_mean () .

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

Другими распространенными примерами декораторов в Python являются classmethod () , staticmethod () и property () .Если вы хотите глубже погрузиться в декораторы Python, взгляните на Primer on Python Decorators. Вы также можете проверить Python Decorators 101.

Возврат определяемых пользователем объектов: заводской шаблон

Оператор Python return также может возвращать пользовательские объекты. Другими словами, вы можете использовать свои собственные настраиваемые объекты в качестве возвращаемого значения в функции. Типичным вариантом использования этой возможности является фабричный шаблон.

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

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

  класс Круг:
    def __init __ (self, radius):
        себя.radius = радиус
    # Реализация класса ...

класс Square:
    def __init __ (я, сторона):
        self.side = сторона
    # Реализация класса ...
  

Если у вас есть класс для каждой формы, вы можете написать функцию, которая принимает имя формы в виде строки и необязательный список аргументов ( * args ) и аргументов ключевого слова ( ** kwargs ) для создания и инициализировать фигуры на лету:

  def shape_factory (shape_name, * args, ** kwargs):
    shape = {"circle": круг, "square": квадрат}
    вернуть формы [shape_name] (* args, ** kwargs)
  

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

>>>
  >>> circle = shape_factory ("круг", радиус = 20)
>>> тип (круг)
<класс '__main __. Circle'>
>>> circle.radius
20

>>> square = shape_factory ("квадрат", сторона = 10)
>>> тип (квадрат)
<класс '__main __. Square'>
>>> square.side
10
  

Если вы вызовете shape_factory () с именем требуемой формы в виде строки, вы получите новый экземпляр формы, который соответствует shape_name , которое вы только что передали на фабрику.

Использование

возврат в попытка наконец Блоки

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

>>>
  >>> def func (значение):
...     пытаться:
... вернуть float (значение)
... кроме ValueError:
... вернуть str (значение)
...     наконец:
... print ("Запустите это перед возвратом")
...

>>> func (9)
Запустите это перед возвращением
9.0

>>> func ("один")
Запустите это перед возвращением
'один'
  

Когда вы вызываете func () , вы получаете значение , преобразованное в число с плавающей запятой или строковый объект. Перед этим ваша функция запускает предложение finally и выводит сообщение на ваш экран.Какой бы код вы ни добавили в предложение finally , он будет выполнен до того, как функция выполнит свой оператор return .

Использование

return в функциях генератора

Функция Python с оператором yield в теле является функцией генератора . Когда вы вызываете функцию генератора, она возвращает итератор генератора. Итак, можно сказать, что функция генератора - это генератор фабрики .

Вы можете использовать оператор return внутри функции генератора, чтобы указать, что генератор готов.Оператор return заставит генератор поднять StopIteration . Возвращаемое значение будет передано в качестве аргумента инициализатору StopIteration и будет присвоено его атрибуту .value .

Вот генератор, который по запросу возвращает 1 и 2 , а затем возвращает 3 :

. >>>
  >>> def gen ():
... выход 1
... yield 2
... вернуть 3
...

>>> g = gen ()
>>> г
<генератор объекта в 0x7f4ff4853c10>

>>> следующий (g)
1
>>> следующий (g)
2

>>> следующий (g)
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
    следующий (г)
StopIteration: 3
  

gen () возвращает объект-генератор, который по запросу дает 1 и 2 .Чтобы получить каждое число из объекта-генератора, вы можете использовать next () , которая является встроенной функцией, которая извлекает следующий элемент из генератора Python.

Первые два вызова next () возвращают 1 и 2 соответственно. В третьем вызове генератор истощен, и вы получаете StopIteration . Обратите внимание, что возвращаемое значение функции генератора ( 3 ) становится атрибутом .value объекта StopIteration .

Заключение

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

Из этого руководства вы узнали, как:

  • Эффективно используйте оператор Python return в ваших функциях
  • Вернуть одиночных или множественных значений из ваших функций в код вызывающего абонента
  • Применяйте передовые практики при использовании отчета о возврате

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

Заявление возврата

Python - AskPython

  • Оператор возврата Python используется в функции для возврата чего-либо в вызывающую программу.
  • Мы можем использовать оператор return только внутри функции.
  • В Python каждая функция что-то возвращает. Если операторов возврата нет, возвращается Нет .
  • Если оператор return содержит выражение, оно сначала вычисляется, а затем возвращается значение.
  • Оператор return завершает выполнение функции.
  • Функция может иметь несколько операторов возврата. Когда любой из них выполняется, функция завершается.
  • Функция может возвращать несколько типов значений.
  • Функция Python может возвращать несколько значений в одном операторе возврата.

Пример оператора return Python

Давайте посмотрим на простой пример сложения двух чисел и возврата суммы вызывающему.

 def add (x, y):
    итого = x + y
    общая сумма возврата
 

Мы можем оптимизировать функцию, указав выражение в операторе возврата.

 def add (x, y):
    вернуть x + y
 

Каждая функция что-то возвращает

Давайте посмотрим, что возвращается, когда функция не имеет оператора возврата.

 >>> def foo ():
...     проходить
...
>>>
>>> print (foo ())
Никто
>>>
 
Python Return Нет

Что происходит, когда в операторе return ничего нет?

Если оператор return не имеет значения, функция возвращает None .

 >>> def return_none ():
...     возвращение
...
>>> печать (return_none ())
Никто
>>>
 

Функции Python могут иметь несколько операторов возврата

 def type_of_int (i):
    если я% 2 == 0:
        вернуть 'даже'
    еще:
        вернуть "нечетное"
 

Функция Python может возвращать значения нескольких типов.

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

Давайте посмотрим на пример, в котором функция возвращает несколько типов значений.

 def get_demo_data (object_type):
    если 'str' == object_type:
        вернуть "тест"
    elif 'tuple' == тип_объекта:
        возврат (1, 2, 3)
    elif 'list' == тип_объекта:
        return [1, 2, 3]
    elif 'dict' == тип_объекта:
        return {"1": 1, "2": 2, "3": 3}
    еще:
        return None
 

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

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

 def return_multiple_values ​​():
    возврат 1, 2, 3


печать (return_multiple_values ​​())
print (тип (return_multiple_values ​​()))
 

Выход:

 (1, 2, 3)
<класс 'кортеж'>
 
Python возвращает несколько значений

Оператор возврата Python с блоком finally

Когда оператор return выполняется внутри блока try-except, сначала выполняется код блока finally перед возвратом значения вызывающей стороне.

 def привет ():
    пытаться:
        верни "привет попробуй"
    наконец:
        print ('наконец блок')


def hello_new ():
    пытаться:
        поднять TypeError
    кроме TypeError как te:
        вернуть "привет, кроме"
    наконец:
        print ('наконец блок')


печать (привет ())
печать (hello_new ())
 

Выход:

 окончательно блок
привет попробуй
наконец заблокировать
привет кроме
 

Если в блоке finally есть оператор return, то предыдущий оператор return игнорируется и возвращается значение из блока finally.

 def привет ():
    пытаться:
        верни "привет попробуй"
    наконец:
        print ('наконец блок')
        верни "привет от наконец"


печать (привет ())
 

Выход :

 окончательная блокировка
привет от наконец
 

Ссылки:

MySQL: Заявление RETURN


В этом руководстве MySQL объясняется, как использовать оператор RETURN в MySQL с синтаксисом и примерами.

Описание

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

Синтаксис

Синтаксис оператора RETURN в MySQL:

 ВОЗВРАТ результат; 

Параметры или аргументы

результат
Результат, который должна вернуть функция.

Примечание

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

Пример

Давайте посмотрим на пример, показывающий, как использовать оператор RETURN в MySQL:

 DELIMITER //

СОЗДАТЬ ФУНКЦИЮ CalcIncome (start_value INT)
ВОЗВРАЩЕНИЕ INT

НАЧИНАТЬ

   ОБЪЯВИТЬ доход INT;

   УСТАНОВИТЬ доход = 0;

   label1: LOOP
     УСТАНОВИТЬ доход = доход + начальное_значение;
     ЕСЛИ доход <3000 ТО
       ITERATE label1;
     КОНЕЦ ЕСЛИ;
     LEAVE label1;
   END LOOP label1;

   ВОЗВРАТНЫЙ доход;

КОНЕЦ; //

DELIMITER; 

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

Вы также могли использовать оператор RETURN для завершения цикла с именем label1. Например:

 DELIMITER //

СОЗДАТЬ ФУНКЦИЮ CalcIncome (start_value INT)
ВОЗВРАЩЕНИЕ INT

НАЧИНАТЬ

   ОБЪЯВИТЬ доход INT;

   УСТАНОВИТЬ доход = 0;

   label1: LOOP
     УСТАНОВИТЬ доход = доход + начальное_значение;
     ЕСЛИ доход <3000 ТО
       ITERATE label1;
     КОНЕЦ ЕСЛИ;
     ВОЗВРАТНЫЙ доход;
   END LOOP label1;

   RETURN start_value;

КОНЕЦ; //

DELIMITER; 

В этом примере RETURN мы дважды используем оператор RETURN.

Первый оператор RETURN находится внутри оператора LOOP, и при его обнаружении выйдет из LOOP, выйдет из функции и вернет значение, хранящееся в переменной с именем доход .

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

В этом примере мы использовали оператор RETURN для создания 2 точек выхода в функции.

Узнайте все о Python. Заявление о возврате

Язык программирования Python включает в себя множество функций, методов, библиотек, которые очень полезны для программистов, пользователей Python и т. Д.Таким образом, оператор возврата Python является очень полезной функцией в программировании на Python. Обычно это полезно для проверки значений, возвращаемых функцией. Другими словами, оператор return Python полезен для закрытия выполнения функции вызова. И он возвращает результат или значение обратно вызывающей стороне. Операторы после операторов возврата не могут выполняться. В случае, если оператор return не содержит никакого выражения, специальное значение возвращается как «None».

Синтаксис для этого может быть таким, как показано ниже.

 def fun (): 

операторов

.

.

return [выражение]

Пример оператора return Python

Мы можем выполнять определенные операции внутри функции и возвращать результат вызывающей стороне с помощью оператора return.

Пример (синтаксис) оператора возврата Python следующий.

 def add (x, y): 

result = x + y

return result

output = add (5, 4)

print ('Вывод функции add (5, 4) равен { output} ')

Давайте подробно обсудим следующие вещи в этом блоге об операторе return Python;

  • Использование оператора возврата Python в функциях
  • Возврат одного или нескольких значений из функций
  • Лучшие практики использования оператора возврата Python

Использование оператора возврата Python в функциях

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

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

Получите практические знания о заявлении возврата Python с практическим опытом с советами экспертов через онлайн-курс Python на Onlineitguru.

Иногда это различие настолько конкретное, что пользователям необходимо использовать определенное ключевое слово для объяснения процедуры или / или другое ключевое слово для описания функции. Например, язык кодирования VB использует Sub и Function для разделения между ними.

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

Python return Заявление: вызов функции

Обычно функция принимает аргументы, выполняет некоторые действия и возвращает значение в качестве результата. Это значение, возвращаемое функцией вызывающей стороне, обычно называется возвращаемым значением функции. Более того, все функции Python в операторе возврата python включают возвращаемое значение, явное или неявное.

Чтобы объяснить «функцию» в Python, пользователи могут использовать следующий синтаксис, например:

 def имя_функции (arg1, arg2, ..., argN): 

# Здесь находится код функции ...

Pass

Когда пользователь кодирует функцию Python, ему необходимо объяснить заголовок с помощью ключевого слова def , имени функции и списка аргументов в круглых скобках (). Затем пользователям нужно описать блок кода функции, и он начнет отступ вправо.

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

Явный оператор возврата

Явный оператор return в Python return Statement сразу же удаляет производительность функции и отправляет возвращаемое значение обратно в вызывающий код. Чтобы добавить явный оператор возврата к функции Python, пользователь должен использовать return, за которым следует необязательное возвращаемое значение:

 >>> def return_42 (): 

... return 42

...

>>> return_42 ()

42

Например,

Когда пользователь описывает return_42 (), он добавляет «явный оператор возврата» в конец блока кода функции. Значение 42 в операторе является явным возвращаемым значением return_42 (). Это означает, что каждый раз, когда пользователь вызывает return_42 (), функция возвращает 42 вызывающей стороне.

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

 >>> num = return_42 () 

>>> num

42

>>> return_42 () * 2

84

>>> return_42 () + 5

47

Поскольку код return_42 () возвращает числовое значение, пользователь может использовать это значение как математическое выражение. Более того, он полезен, как и любой другой тип выражения, в котором значение имеет логическое значение.Таким образом, вызывающий код может воспользоваться возвращаемым значением функции.

Заявление неявного возврата

Выражение функции Python всегда будет включать возвращаемое значение. Более того, в Python нет концепции какой-либо процедуры или практики. Итак, если пользователь явно не использует возвращаемое значение в операторе возврата Python. В противном случае он полностью исключает оператор return, тогда Python неявно вернет значение по умолчанию для пользователя. Кроме того, это возвращаемое значение по умолчанию всегда будет выражаться как «Нет».

Например:

Пользователь пишет функцию, которая добавляет 1 к числу N, но забывает предоставить оператор возврата. В этом случае пользователь получит неявный оператор возврата, который использует возвращаемое значение «None».

Синтаксис для того же следующий:

В случае, если пользователь не предоставляет «явный оператор возврата» с четким возвращаемым значением. Затем Python предоставляет неявный оператор return, используя в качестве вывода «None».

5
 def add_one (x): 

# Нет оператора возврата вообще

result = x + 1

value = add_one (5)

value

print (value)

6 Оператор возврата Python несколько значений

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

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

 статистика импорта как st 

def описать (образец):

вернуть st.mean (образец), st.median (образец), st.mode (образец)

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

Python return Заявление: тип возврата «кортеж»
 >>> sample = [10, 2, 4, 7, 9, 3, 7, 8, 6, 8] 

>>> mean , median, mode = describe (sample)

>>> mean

6.5

>>> median

Здесь пользователь распаковывает три возвращаемых значения выражения description () в среднее значение трех переменных. , медиана и мода.Здесь он преобразует возвращаемые значения в полезный способ. Обратите внимание, что в последнем примере пользователь сохранил все значения в одной переменной «desc». Эта переменная оказывается кортежем Python.

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

|| {"title": "Мастер в Python", "subTitle": "Сертификационный тренинг по Python от ITGURU", "btnTitle": "Подробнее", "url": "https://onlineitguru.com/python -online-course "," boxType ":" demo "," videoId ":" Qtdzdhw6JOk "} ||

Возврат нескольких значений с помощью «Отображения списка»

«Отображение списка» создает последний объект списка, содержание которого определяется списком выражений.Когда предоставляется список выражений, разделенных запятыми, его элементы оцениваются слева направо и помещаются в объект списка по порядку. Тип возврата - это список, который выражается следующим образом.

 def calc (p, q): 

sum = p + q

diff = pq

mul = p * q

div = p / q

return [sum, dif, mul, div ]

print (calc (5,4))

#Output: [9, 1, 20, 1.25]

Операторы «Возврат» и «Печать» в функции

В этом операторе оператор возврата Python завершает вызов функции и возвращает значение вызывающей стороне.

Оператор печати полезен только для печати значения. Пользователи не могут присвоить этот результат другой переменной или явно передать результат другой функции.

Например: присвоение возвращаемого значения переменной, а также передача его в качестве аргумента другой функции.Это описывает приведенный ниже синтаксис.

 def add (p, q): 

r1 = p + q

return r1

def sub (x, y):

r2 = xy

return r2

# Пользователь может разрешить возвращаемое значение переменной

r3 = add (3,4)

print (r3) #Output: 7

# Пользователи также могут передавать возвращаемое значение другим функциям.

print (sub (r3,5)) # Вывод: 2

Функция оператора печати

Выражение приведено ниже в форме синтаксиса.

 def add (p, q): 

r1 = p + q

print (r1)

add (3,4) # Выход: 7

# Пользователь не может разрешить возвращаемое значение переменной

r3 = add (3,4)

print (r3) #Output: None

Python return Statement: Best Practices

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

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

Отсутствует явный возврат

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

Существуют условия, при которых пользователи могут добавить явное возвращаемое значение как «Нет» к вашим функциям. Однако в других ситуациях пользователи могут полагаться на поведение Python по умолчанию.

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

Кроме того, предположим, что функция имеет несколько операторов возврата. И если возврат «None» является допустимым вариантом, пользователям следует рассмотреть возможность использования возврата «None».Это вместо того, чтобы полагаться на действие Python по умолчанию в заявлении Python return.

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

Когда дело доходит до возврата «None» в качестве значения, пользователь может использовать один из трех возможных подходов, а именно:

  • Пропустить или удалить оператор return и основываться на поведении Python по умолчанию, возвращающем «null» ценить.
  • Используйте пустой возврат без возвращаемого значения, которое также возвращает None / Null в результате.
  • Возврат None или нулевое значение очень четко.

Вот как это работает на практике:

Синтаксис
 >>> def omit_return_stmt (): 

... # Пропустить оператор возврата

... pass

...

>>> print (omit_return_stmt ())

Нет

>>> def bare_return ():

... # Использовать чистый возврат

... return

...

>>> print (bare_return ())

None

>>> def return_none_explicitly ():

... # Вернуть None явно

... return None

...

> >> print (return_none_explicitly ())

Нет

Возвращать «Нет» явно или нет - это личное решение пользователя. Тем не менее, пользователи должны заметить, что в некоторых случаях явное возвращение значения «None» может избежать проблем с управляемостью.Это особенно верно в случае разработчиков, которые пришли из других языков программирования. Эти языки ведут себя не так, как Python.

Вызов возвращаемого значения

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

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

|| {"title": "Мастер в Python", "subTitle": "Сертификационный тренинг по Python от ITGURU", "btnTitle": "Подробнее", "url": "https://onlineitguru.com/python -online-course "," boxType ":" reg "} ||

Избегание сложных выражений

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

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

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

Использование операторов возврата с «условными»

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

Общий способ кодирования функций с несколькими операторами возврата - это использование условных операторов.Это позволяет пользователям предоставлять несколько операторов возврата в зависимости от результатов оценки некоторых условий.

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

Подведение итогов

Таким образом, используя оператор возврата Python , пользователи могут проверить возвращаемое значение или вывод функции.Наряду с этим, они могут легко его выполнить. Мы подошли к завершению темы в заявлении Python return и его обзоре. Я пытался объяснить вещи ясно и просто. И я надеюсь, что вы получили общее представление об операторах возврата Python и их использовании. Чтобы получить больше информации о языке Python, пройдите онлайн-обучение Python . Это может помочь вам достичь ваших карьерных целей, обладая экспертными навыками.

Оператор возврата Python - JournalDev

Оператор возврата Python используется для возврата значений из функции.Мы можем использовать оператор return только в функции. Его нельзя использовать вне функции Python.

Функция Python без оператора возврата

Каждая функция в Python что-то возвращает. Если функция не имеет никакого оператора возврата, она возвращает None .

 
def print_something (s):
    print ('Печать ::', s)


output = print_something ('Привет')

print (функция f'A без оператора return возвращает {output} ')
  

Вывод:

Функция Python без оператора возврата

Пример оператора возврата Python

Мы можем выполнить некоторую операцию в функции и вернуть результат вызывающей стороне с помощью оператора return.

 
def add (x, y):
    результат = x + y
    вернуть результат


вывод = добавить (5, 4)
print (f'Выход функции add (5, 4) равен {output} ')
  

Вывод:

Пример возврата Python

Оператор возврата Python с выражением

Мы можем иметь выражения также в операторе возврата. В этом случае выражение оценивается и возвращается результат.

 
def add (x, y):
    вернуть x + y


вывод = добавить (5, 4)
print (f'Выход функции add (5, 4) равен {output} ')
  

Вывод:

Заявление о возврате Python с выражением

Python return boolean

Рассмотрим пример, в котором мы возвращаем логическое значение аргумента функции.Мы будем использовать функцию bool (), чтобы получить логическое значение объекта.

 
def bool_value (x):
    return bool (x)


print (f'Булево значение, возвращаемое функцией bool_value (False), равно {bool_value (False)} ')
print (f'Булево значение, возвращаемое функцией bool_value (True), равно {bool_value (True)} ')
print (f'Булево значение, возвращаемое функцией bool_value ("Python"), равно {bool_value ("Python")} ')
  

Вывод:

Python Return Boolean

Python return string

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

 
def str_value (s):
    return str (s)


print (значение f'String, возвращаемое str_value (False), равно {str_value (False)} ')
print (значение f'String, возвращаемое str_value (True), равно {str_value (True)} ')
print (значение f'String, возвращаемое str_value (10), равно {str_value (10)} ')
  

Вывод:

Строка возврата Python

Кортеж возврата Python

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

 
def create_tuple (* args):
    my_list = []
    для аргументов в аргументах:
        my_list.append (аргумент * 10)
    вернуть кортеж (my_list)


t = create_tuple (1, 2, 3)
print (f'Tuple, возвращаемый create_tuple (1,2,3), равен {t} ')
  

Вывод:

Кортеж возврата функции Python

Дополнительная литература : Python * args и ** kwargs

Функция Python, возвращающая другую функцию

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

 
def get_cuboid_volume (h):
    объем деф (л, б):
        вернуть л * б * ч

    объем возврата


volume_height_10 = get_cuboid_volume (10)
cuboid_volume = volume_height_10 (5, 4)
print (f'Cuboid (5, 4, 10) volume равен {cuboid_volume} ')

cuboid_volume = volume_height_10 (2, 4)
print (f'Cuboid (2, 4, 10) объем равен {cuboid_volume} ')
  

Вывод:

Функция возврата Python

Функция Python, возвращающая внешнюю функцию

Мы также можем вернуть функцию, которая определена вне функции, с помощью оператора return.

 
def external (x):
    возврат x * 10


def my_func ():
    вернуть внешний


output_function = my_func ()
печать (тип (функция_вывода))

output = output_function (5)
print (f'Output is {output} ')
  

Вывод:

Функция Python Возврат Внешняя функция

Python возвращает несколько значений

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

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

 
def multiply_by_five (* аргументы):
    для аргументов в аргументах:
        yield arg * 5


а = multiply_by_five (4, 5, 6, 8)

печать (а)
# отображение значений
для я в:
    печать (я)
  

Вывод:

Возврат Python против доходности

Сводка

Оператор возврата python используется для возврата вывода из функции. Мы узнали, что мы также можем вернуть функцию из другой функции.Кроме того, выражения оцениваются, а затем функция возвращает результат.

Вы можете получить полный скрипт Python и другие примеры Python в нашем репозитории GitHub.

7. Простые операторы - документация Python 3.10.0

Простая инструкция состоит из одной логической строки. Несколько простых операторы могут находиться в одной строке, разделенной точкой с запятой. Синтаксис для простые инструкции:

  simple_stmt  :: =  expression_stmt 
                 |  assert_stmt 
                 |  assignment_stmt 
                 |  augmented_assignment_stmt 
                 |  annotated_assignment_stmt 
                 |  pass_stmt 
                 |  del_stmt 
                 |  return_stmt 
                 |  yield_stmt 
                 |  raise_stmt 
                 |  break_stmt 
                 |  continue_stmt 
                 |  import_stmt 
                 |  future_stmt 
                 |  global_stmt 
                 |  nonlocal_stmt 
 

7.1. Выражения

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

  выражение_стмт  :: =  звездное_выражение 
 

Оператор выражения оценивает список выражений (который может быть выражение).

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

7.2. Заявления о присвоении

Операторы присваивания используются для (пере) привязки имен к значениям и для изменения атрибуты или элементы изменяемых объектов:

  assignment_stmt  :: = ( target_list  "=") + ( starred_expression  |  yield_expression )
  target_list  :: =  target  (","  target ) * [","]
  цель  :: =  идентификатор 
                     | "(" [ target_list ] ")"
                     | "[" [ target_list ] "]"
                     |  attributeref 
                     |  подписка 
                     |  нарезка 
                     | «*»  цель 
 

(См. Раздел Основные параметры для определения синтаксиса для attributeref , подписка и нарезка .)

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

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

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

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

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

    • Если целевой список содержит одну цель со звездочкой, называется «Помеченная» цель: объект должен быть итерируемым, по крайней мере, с таким же количеством элементов. поскольку в целевом списке есть цели, минус один. Первые позиции iterable назначаются слева направо целям перед отмеченными звездочкой цель. Последние элементы итерации назначаются целям после отмеченная звездой цель. Список оставшихся в итерируемом элементе затем назначен цели, отмеченной звездочкой (список может быть пустым).

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

Присвоение объекта единственной цели рекурсивно определяется следующим образом.

  • Если целью является идентификатор (имя):

    • Если имя не встречается в глобальном или нелокальном в текущем блоке кода: имя привязано к объекту в текущее локальное пространство имен.

    • В противном случае: имя привязано к объекту в глобальном пространстве имен или внешнее пространство имен определяется нелокальным соответственно.

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

  • Если целью является ссылка на атрибут: основное выражение в ссылка оценивается.В результате должен получиться объект с назначаемыми атрибутами; если это не так, возникает ошибка TypeError . Тогда этот объект попросили присвоить присвоенный объект данному атрибуту; если это не может выполнить задание, возникает исключение (обычно, но не обязательно Ошибка атрибута ).

    Примечание. Если объект является экземпляром класса и ссылка на атрибут встречается на обе стороны оператора присваивания, выражение в правой части, a.x может получить доступ либо атрибут экземпляра, либо (если атрибут экземпляра не существует) класс атрибут.Левая цель a.x всегда устанавливается как атрибут экземпляра, создавая его при необходимости. Таким образом, два появления a.x не обязательно ссылаются на один и тот же атрибут: если выражение в правой части относится к class, левая сторона создает новый атрибут экземпляра как цель присвоение:

     класс Cls:
        x = 3 # переменная класса
    inst = Cls ()
    inst.x = inst.x + 1 # записывает inst.x как 4, оставляя Cls.x как 3
     

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

  • Если целью является подписка: основное выражение в ссылке: оценен. Он должен давать либо изменяемый объект последовательности (например, список) или объект отображения (например, словарь). Затем нижний индекс выражается так: оценен.

    Если первичным является изменяемый объект последовательности (например, список), нижний индекс должен давать целое число. Если он отрицательный, длина последовательности добавляется к Это. Результирующее значение должно быть неотрицательным целым числом меньше, чем длины последовательности, и последовательность просят назначить назначенный объект его элемент с этим индексом.Если индекс вне допустимого диапазона, IndexError будет поднят (присвоение последовательности с индексами не может добавлять новые элементы в список).

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

    Для пользовательских объектов метод __setitem __ () вызывается с соответствующие аргументы.

  • Если целью является срез: основным выражением в ссылке является оценен. Он должен дать изменяемый объект последовательности (например, список). В назначенный объект должен быть объектом последовательности того же типа. Далее нижний и выражения верхней границы оцениваются, если они присутствуют; значения по умолчанию равны нулю, а длина последовательности. Границы должны быть целыми числами.Если какая-либо граница отрицательная, к ней добавляется длина последовательности. В результирующие границы обрезаются, чтобы они находились между нулем и длиной последовательности, включительно. Наконец, объекту последовательности предлагается заменить срез на элементы заданной последовательности. Длина среза может быть разной. от длины назначенной последовательности, тем самым изменяя длину целевая последовательность, если это позволяет целевая последовательность.

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

Хотя определение присвоения подразумевает, что левая и правая части являются «одновременными» (например, a, b = b, a меняет местами две переменные), перекрывает в пределах набора назначенных переменные идут слева направо, что иногда приводит к путанице. Например, следующая программа печатает [0, 2] :

 х = [0, 1]
я = 0
i, x [i] = 1, 2 # i обновляется, затем x [i] обновляется
печать (х)
 

См. Также

PEP 3132 - Extended Iterable Unpacking

Спецификация функции * target . =" | "| ="

(См. Раздел "Основные" для определения синтаксиса последних трех символы.)

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

Расширенное выражение присваивания, такое как x + = 1 , можно переписать как x = x + 1 для достижения аналогичного, но не совсем равного эффекта. В расширенном версия, x оценивается только один раз.Также, по возможности, фактическая операция выполняется на месте , что означает, что вместо создания нового объекта и присваивая это цели, вместо этого модифицируется старый объект.

В отличие от обычных заданий, расширенные задания оценивают левую часть до , оценивая правую сторону. Например, a [i] + = f (x) сначала ищет a [i] , затем оценивает f (x) и выполняет сложение, и наконец, он записывает результат обратно в a [i] .

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

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

7.2.2. Аннотированные операторы присваивания

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

  annotated_assignment_stmt  :: =  augtarget  ":"  выражение 
                               ["=" ( звездчатое_выражение  |  yield_expression )]
 

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

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

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

Если имя аннотировано в области действия функции, то это имя является локальным для этот объем. Аннотации никогда не оцениваются и не сохраняются в областях видимости функций.

Если правая сторона присутствует, аннотированный присваивание выполняет фактическое присваивание перед оценкой аннотаций (где применимо). Если правая часть отсутствует в выражении target, то интерпретатор оценивает цель, кроме последнего __setitem __ () или __setattr __ () вызов.

См. Также

PEP 526 - Синтаксис для аннотаций переменных

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

PEP 484 - Подсказки типов

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

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

7.3.

утверждение утверждение Операторы

Assert - удобный способ вставки утверждений отладки в программа:

  assert_stmt  :: = "assert"  выражение  [","  выражение ]
 

Простая форма assert expression эквивалентна

, если __debug__:
    если не выражение: поднять AssertionError
 

Расширенная форма, assert выражение1, выражение2 , эквивалентно

, если __debug__:
    если не выражение1: поднять ошибку AssertionError (выражение2)
 

Эти эквиваленты предполагают, что __debug__ и AssertionError относятся к встроенные переменные с этими именами.В текущей реализации встроенная переменная __debug__ - True при нормальных обстоятельствах, Ложь при запросе оптимизации (параметр командной строки -O ). Электрический ток генератор кода не генерирует код для утверждения утверждения, когда оптимизация запрашивается во время компиляции. Обратите внимание, что указывать источник необязательно. код для выражения, которое не удалось в сообщении об ошибке; это будет отображаться как часть трассировки стека.

Назначение __debug__ незаконно.Значение встроенной переменной определяется при запуске интерпретатора.

7,4.

проездной выписка
  pass_stmt  :: = "пройти"
 

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

 def f (arg): передать # функцию, которая (пока) ничего не делает

class C: передать # класс без методов (пока)
 

7.5. Выписка

del
  del_stmt  :: = "del"  target_list 
 

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

При удалении целевого списка рекурсивно удаляются все целевые объекты слева направо.

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

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

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

7,6.

возврат выписка
  return_stmt  :: = "return" [ список_выражений ]
 

return может встречаться только синтаксически вложенным в определение функции, не в определении вложенного класса.

Если список выражений присутствует, он оценивается, иначе Не заменяется .

return оставляет текущий вызов функции со списком выражений (или Нет ) в качестве возвращаемого значения.

При возврате передает управление из оператора try с , наконец, , что , наконец, , выполняется до действительно оставив функцию.

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

В функции асинхронного генератора пустой оператор return указывает, что асинхронный генератор готов и вызовет StopAsyncIteration , который нужно поднять. Непустой возврат оператор является синтаксической ошибкой в ​​функции асинхронного генератора.

7,7. Отчет

yield
  yield_stmt  :: =  yield_expression 
 

Оператор yield семантически эквивалентен yield выражение.В операторе yield можно опустить круглые скобки что в противном случае потребовалось бы в эквивалентном выражении yield утверждение. Например, операторы доходности

 yield 
доход от 
 

эквивалентны операторам выражения yield

 (yield )
(доход от )
 

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

Для получения полной информации о семантике yield см. Раздел выражений доходности.

7,8. Операция повышения

  raise_stmt  :: = "raise" [ выражение  ["из"  выражение ]]
 

Если никаких выражений нет, raise повторно вызывает последнее исключение который был активен в текущей области.Если в текущем области, возникает исключение RuntimeError , указывающее, что это ошибка.

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

Тип исключения - это класс экземпляра исключения, значение - это сам экземпляр.

Объект трассировки обычно создается автоматически при возникновении исключения. и прикреплен к нему как атрибут __traceback__ , который доступен для записи. Вы можете создать исключение и установить собственную трассировку за один шаг, используя with_traceback () метод исключения (который возвращает то же исключение экземпляр, с его трассировкой, установленной для его аргумента), например:

 возбудить исключение ("произошло foo"). With_traceback (tracebackobj)
 

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

 >>> попробуйте:
... печать (1/0)
... кроме Exception as exc:
... поднять RuntimeError ("Произошло что-то плохое") из exc
...
Отслеживание (последний вызов последний):
  Файл "", строка 2, в 
ZeroDivisionError: деление на ноль

Вышеупомянутое исключение явилось прямой причиной следующего исключения:

Отслеживание (последний вызов последний):
  Файл "", строка 4, в 
RuntimeError: Произошло что-то плохое
 

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

 >>> попробуйте:
... печать (1/0)
... Кроме:
... поднять RuntimeError ("Произошло что-то плохое")
...
Отслеживание (последний вызов последний):
  Файл "", строка 2, в 
ZeroDivisionError: деление на ноль

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

Отслеживание (последний вызов последний):
  Файл "", строка 4, в 
RuntimeError: Произошло что-то плохое
 

Цепочку исключений можно явно подавить, указав None в из пункта :

 >>> попробуйте:
... печать (1/0)
... Кроме:
... поднять RuntimeError ("Что-то плохое случилось") из None
...
Отслеживание (последний вызов последний):
  Файл "", строка 4, в 
RuntimeError: Произошло что-то плохое
 

Дополнительную информацию об исключениях можно найти в разделе Исключения, а информация об обработке исключений находится в разделе Оператор try.

Изменено в версии 3.3: Нет теперь разрешено как Y в поднять X с Y .

Новое в версии 3.3: Атрибут __suppress_context__ для подавления автоматического отображения контекст исключения.

7.9.

перерыв выписка
  break_stmt  :: = "перерыв"
 

break может встречаться только синтаксически вложенным в для или , а цикл , но не вложенный в определение функции или класса в этот цикл.

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

Если цикл для завершается разрывом , управление циклом target сохраняет свое текущее значение.

Когда break передает управление из оператора try с , наконец, , что , наконец, , выполняется до действительно выходит из петли.

7.10.

продолжить ведомость
  continue_stmt  :: = "продолжить"
 

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

Когда continue передает управление из оператора try с , наконец, , что , наконец, , выполняется до действительно начало следующего цикла цикла.

7.11.

импорт выписка
  import_stmt  :: = "import"  module  ["as"  идентификатор ] (","  module  ["as"  идентификатор ]) *
                     | "from"  relative_module  "import"  идентификатор  ["as"  идентификатор ]
                     ("," Идентификатор   ["как" идентификатор  ]) *
                     | "from"  relative_module  "import" "("  идентификатор  ["как"  идентификатор ]
                     ("," Идентификатор   ["как" идентификатор  ]) * [","] ")"
                     | "из"  relative_module  "импорт" "*"
  модуль  :: = ( идентификатор  ".") *  идентификатор 
  relative_module  :: = "." *  module  | "." +
 

Основной оператор импорта (№ из пункта ) выполняется в двух шаги:

  1. найти модуль, при необходимости загрузить и инициализировать

  2. определяет имя или имена в локальном пространстве имен для области, в которой появляется оператор import .

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

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

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

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

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

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

Форма из использует немного более сложный процесс:

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

  2. для каждого из идентификаторов, указанных в пунктах import :

    1. проверьте, есть ли у импортированного модуля атрибут с таким именем

    2. , если нет, попробуйте импортировать подмодуль с этим именем, а затем еще раз проверьте импортированный модуль для этого атрибута

    3. , если атрибут не найден, возникает ImportError .

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

Примеры:

 import foo # foo импортировано и привязано локально
import foo.bar.baz # foo.bar.baz импортировано, foo привязано локально
импортировать foo.bar.baz как fbb # foo.bar.baz импортировать и привязать как fbb
from foo.bar import baz # foo.bar.baz импортирован и привязан как baz
from foo import attr # foo import и foo.attr привязан как attr
 

Если список идентификаторов заменить звездочкой ( '*' ), все общедоступные имена, определенные в модуле, привязаны к локальному пространству имен для области где встречается оператор import .

Общедоступные имена , определенные модулем, определяются путем проверки пространство имен для переменной с именем __all__ ; если определено, это должна быть последовательность строк, которые являются именами, определенными или импортированными этим модулем. Имена данные в __все__ считаются общедоступными и обязаны существовать.Если __all__ не определено, набор публичных имен включает все найденные имена в пространстве имен модуля, которые не начинаются с символа подчеркивания ( '_' ). __all__ должен содержать весь публичный API. Это предназначено чтобы избежать случайного экспорта элементов, не являющихся частью API (например, модули библиотеки, которые были импортированы и использовались внутри модуля).

Форма импорта с подстановочными знаками - из импорта модуля * - разрешена только в уровень модуля.Попытка использовать его в определениях классов или функций приведет к вызвать SyntaxError .

При указании импортируемого модуля необязательно указывать абсолютный имя модуля. Когда модуль или пакет содержится в другом package можно сделать относительный импорт в том же самом верхнем пакете без упоминания имени пакета. Используя ведущие точки в указанный модуль или пакет после из вы можете указать, насколько высоко пройти вверх по текущей иерархии пакетов без указания точных имен.Один ведущая точка означает текущий пакет, в котором модуль, выполняющий импорт существуют. Две точки означают повышение на один уровень пакета. Три точки - это два уровня вверх и т. Д. Итак, если вы запустите из. импорт мода из модуля в пакете pkg тогда вы в конечном итоге импортируете pkg.mod . Если вы запустите из ..subpkg2 import mod из pkg.subpkg1 вы импортируете pkg.subpkg2.mod . Спецификация относительного импорта содержится в раздел «Относительный импорт пакетов».

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

Вызывает событие аудита import с аргументами module , filename , sys.path , sys.meta_path , sys.path_hooks .

7.11.1. Заявления о будущем

Оператор future - это указание компилятору, что конкретный модуль должен быть скомпилирован с использованием синтаксиса или семантики, которые будут доступны в указан будущий выпуск Python, в котором функция станет стандартной.

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

  future_stmt  :: = "from" "__future__" "import"  feature  ["as"  идентификатор ]
                 (","  признак  ["как"  идентификатор ]) *
                 | "from" "__future__" "import" "("  особенность  ["как"  идентификатор ]
                 ("," Функция   ["как" идентификатор  ]) * [","] ")"
  функция  :: =  идентификатор 
 

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

Единственная функция, которая требует использования оператора future, - это аннотаций (см. PEP 563 ).

Все исторические особенности, задействованные в отчете о будущем, по-прежнему распознаются на Python 3. Список включает absolute_import , раздел , генераторы , generator_stop , unicode_literals , print_function , nested_scopes и with_statement .Они есть все избыточны, потому что они всегда включены и хранятся только в обратная совместимость.

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

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

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

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

Обратите внимание, что в выписке нет ничего особенного:

 import __future__ [как имя]
 

Это не заявление о будущем; это обычный оператор импорта без особая семантика или синтаксические ограничения.

Код, скомпилированный вызовами встроенных функций exec () и compile () которые происходят в модуле M , содержащем оператор future, по умолчанию, используйте новый синтаксис или семантику, связанную с оператором future.Это может управляться необязательными аргументами для compile () - см. документацию этой функции для получения подробной информации.

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

См. Также

PEP 236 - Назад в __future__

Первоначальное предложение механизма __future__.

7.12. Заявление

global
  global_stmt  :: = "global"  идентификатор  (","  идентификатор ) *
 

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

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

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

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

Примечание программиста: global - это директива для синтаксического анализатора. Это применяется только к коду, который анализируется одновременно с глобальным оператором . В частности, глобальный оператор , содержащийся в строке или коде объект, предоставленный встроенной функции exec () , не влияет на код блок , содержащий вызов функции, а код, содержащийся в такой строке, не зависит от глобальных операторов в коде, содержащем функцию вызов.То же самое относится к функциям eval () и compile () .

7,13. Нелокальный отчет

  nonlocal_stmt  :: = "нелокальный"  идентификатор  (","  идентификатор ) *
 

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

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

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

См. Также

PEP 3104 - Доступ к именам во внешних областях

Спецификация для нелокального оператора .

Python Return: пошаговое руководство

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

Найди свой матч на тренировочном лагере