{"id":82,"date":"2016-11-21T01:45:18","date_gmt":"2016-11-21T01:45:18","guid":{"rendered":"http:\/\/python.wp.w3.pt\/?p=82"},"modified":"2016-11-22T00:58:39","modified_gmt":"2016-11-22T00:58:39","slug":"expressoes-e-curiosidades","status":"publish","type":"post","link":"http:\/\/python.w3.pt\/?p=82","title":{"rendered":"Express\u00f5es e curiosidades"},"content":{"rendered":"<p>Come\u00e7o pela curiosidade. E digo curiosidade, porque penso que \u00e9 a primeira linguagem de programa\u00e7\u00e3o onde vejo esta constru\u00e7\u00e3o. H\u00e1 outras linguagens pelas quais nunca incursei, como o Ruby, ou incursei pouco, como o Perl, que talvez permitam este tipo de constru\u00e7\u00f5es, mas nunca vi. A sintaxe seguinte permite criar uma lista de valores que \u00e9 um subconjunto de uma progress\u00e3o aritm\u00e9tica.<\/p>\n<pre>&gt;&gt;&gt; a = 42\r\n&gt;&gt;&gt; b = list(a + i for i in range(10))\r\n&gt;&gt;&gt; b\r\n[42, 43, 44, 45, 46, 47, 48, 49, 50, 51]\r\n<\/pre>\n<p>Ou ainda:<\/p>\n<pre>&gt;&gt;&gt; list(map(lambda x: 2*x, (a + i for i in range(10))))\r\n[84, 86, 88, 90, 92, 94, 96, 98, 100, 102]\r\n<\/pre>\n<p>Passemos \u00e0s express\u00f5es. Nas express\u00f5es aritm\u00e9ticas, as convers\u00f5es s\u00e3o feitas sempre para cima, antes de operar. &#8220;Para cima&#8221; significa, que entre dois operandos de tipos diferentes, a convers\u00e3o \u00e9 feita para o tipo &#8220;maior&#8221;, sendo a sequ\u00eancia crescente a seguinte: int, long, float, complex. Os booleanos s\u00e3o inteiros. A unidade imagin\u00e1ria \u00e9 o <strong>j<\/strong>.<\/p>\n<pre>&gt;&gt;&gt; 5+True\r\n6\r\n&gt;&gt;&gt; True + (2.5+3j)\r\n(3.5+3j)\r\n<\/pre>\n<p>Segundo o <a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html\">manual do Python<\/a>, as express\u00f5es podem ser as seguintes, sendo algumas delas apresentadas em sintaxe <a href=\"https:\/\/en.wikipedia.org\/wiki\/Backus%E2%80%93Naur_form\">BNF<\/a>:<\/p>\n<ul>\n<li>Convers\u00f5es aritm\u00e9ticas\n<ul>\n<li>\u00c1tomos<\/li>\n<li>Identificadores<\/li>\n<li>Literais<\/li>\n<li>Lista entre par\u00eantesis<\/li>\n<li>Listas<\/li>\n<li>Conjuntos e dicion\u00e1rios<\/li>\n<li>Express\u00f5es geradoras<\/li>\n<li>Convers\u00f5es de strings<\/li>\n<li>Express\u00f5es &#8220;yield&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>Opera\u00e7\u00f5es prim\u00e1rias\n<pre>primary ::=  atom | attributeref | subscription | slicing | call<\/pre>\n<ul>\n<li>Refer\u00eancias a atributos<\/li>\n<li>Indexa\u00e7\u00e3o<\/li>\n<li>Cortes<\/li>\n<li>Chamadas<\/li>\n<\/ul>\n<\/li>\n<li>Pot\u00eancia\n<pre>power ::=  primary [\"**\" u_expr]<\/pre>\n<\/li>\n<li>Opera\u00e7\u00f5es un\u00e1rias\n<pre>u_expr ::=  power | \"-\" u_expr | \"+\" u_expr | \"~\" u_expr<\/pre>\n<\/li>\n<li>Opera\u00e7\u00f5es aritm\u00e9ticas\n<pre>m_expr ::=  u_expr | m_expr \"*\" u_expr | m_expr \"\/\/\" u_expr | m_expr \"\/\" u_expr\r\n            | m_expr \"%\" u_expr\r\na_expr ::=  m_expr | a_expr \"+\" m_expr | a_expr \"-\" m_expr<\/pre>\n<\/li>\n<li>Opera\u00e7\u00f5es de deslocamento\n<pre>shift_expr ::=  a_expr | shift_expr ( \"<<\" | \">>\" ) a_expr<\/pre>\n<\/li>\n<li>Opera\u00e7\u00f5es bit a bit\n<pre>and_expr ::=  shift_expr | and_expr \"&\" shift_expr\r\nxor_expr ::=  and_expr | xor_expr \"^\" and_expr\r\nor_expr  ::=  xor_expr | or_expr \"|\" xor_expr<\/pre>\n<\/li>\n<li>Compara\u00e7\u00f5es\n<pre>comparison    ::=  or_expr ( comp_operator or_expr )*\r\ncomp_operator ::=  \"<\" | \">\" | \"==\" | \">=\" | \"<=\" | \"<>\" | \"!=\"\r\n                   | \"is\" [\"not\"] | [\"not\"] \"in\"<\/pre>\n<\/li>\n<li>Opera\u00e7\u00f5es booleanas\n<pre>or_test  ::=  and_test | or_test \"or\" and_test\r\nand_test ::=  not_test | and_test \"and\" not_test\r\nnot_test ::=  comparison | \"not\" not_test<\/pre>\n<\/li>\n<li>Express\u00f5es condicionais\n<pre>conditional_expression ::=  or_test [\"if\" or_test \"else\" expression]\r\nexpression             ::=  conditional_expression | lambda_expr<\/pre>\n<\/li>\n<li>Lambdas\n<pre>lambda_expr     ::=  \"lambda\" [parameter_list]: expression<\/pre>\n<\/li>\n<li>Express\u00f5es com listas\n<pre>expression_list ::=  expression ( \",\" expression )* [\",\"]<\/pre>\n<\/li>\n<\/ul>\n<p>A tabela de preced\u00eancias dos operadores, do mais fraco para o mais forte, \u00e9 a seguinte:<\/p>\n<style>\ntd,th {padding:1px;font-family:courier,monospace;}<br \/>a.nlnk {text-decoration:none;box-shadow: 0 0 0 0 transparent;}<br \/>a.nlnk:hover {text-decoration:underline;}\nth {text-align:center;}<\/style>\n<div style=\"font-size: 0.8em;\">\n<table border=\"1\">\n<colgroup>\n<col width=\"42%\" \/>\n<col width=\"58%\" \/>\n<\/colgroup>\n<thead valign=\"bottom\">\n<tr>\n<th>Operator<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody valign=\"top\">\n<tr>\n<td><a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#lambda\">lambda<\/a><\/td>\n<td>Lambda expression<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/docs.python.org\/2\/reference\/compound_stmts.html#if\">if<\/a> &#8211; <a href=\"https:\/\/docs.python.org\/2\/reference\/compound_stmts.html#else\">else<\/a><\/td>\n<td>Conditional expression<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#or\">or<\/a><\/td>\n<td>Boolean OR<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#and\">and<\/a><\/td>\n<td>Boolean AND<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#not\">not<\/a> x<\/td>\n<td>Boolean NOT<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#in\">in<\/a>, <a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#not-in\">not in<\/a>,<br \/>\n<a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#is\">is<\/a>, <a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#is-not\">is not<\/a>, &lt;,<br \/>\n&lt;=, &gt;, &gt;=, &lt;&gt;, !=, ==<\/td>\n<td>Comparisons, including membership<br \/>\ntests and identity tests<\/td>\n<\/tr>\n<tr>\n<td>|<\/td>\n<td>Bitwise OR<\/td>\n<\/tr>\n<tr>\n<td>^<\/td>\n<td>Bitwise XOR<\/td>\n<\/tr>\n<tr>\n<td>&amp;<\/td>\n<td>Bitwise AND<\/td>\n<\/tr>\n<tr>\n<td>&lt;&lt;, &gt;&gt;<\/td>\n<td>Shifts<\/td>\n<\/tr>\n<tr>\n<td>+, &#8211;<\/td>\n<td>Addition and subtraction<\/td>\n<\/tr>\n<tr>\n<td>*, \/, \/\/, %<\/td>\n<td>Multiplication, division, remainder<br \/>\n<a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#id27\" id=\"id18\">[8]<\/a><\/td>\n<\/tr>\n<tr>\n<td>+x, -x, ~x<\/td>\n<td>Positive, negative, bitwise NOT<\/td>\n<\/tr>\n<tr>\n<td>**<\/td>\n<td>Exponentiation <a href=\"https:\/\/docs.python.org\/2\/reference\/expressions.html#id28\" id=\"id19\">[9]<\/a><\/td>\n<\/tr>\n<tr>\n<td>x[index], x[index:index],<br \/>\nx(arguments&#8230;), x.attribute<\/td>\n<td>Subscription, slicing,<br \/>\ncall, attribute reference<\/td>\n<\/tr>\n<tr>\n<td>(expressions&#8230;),<br \/>\n[expressions&#8230;],<br \/>\n{key: value&#8230;},<br \/>\n`expressions&#8230;`<\/td>\n<td>Binding or tuple display,<br \/>\nlist display,<br \/>\ndictionary display,<br \/>\nstring conversion<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Come\u00e7o pela curiosidade. E digo curiosidade, porque penso que \u00e9 a primeira linguagem de programa\u00e7\u00e3o onde vejo esta constru\u00e7\u00e3o. H\u00e1 outras linguagens pelas quais nunca incursei, como o Ruby, ou incursei pouco, como o Perl, que talvez permitam este tipo de constru\u00e7\u00f5es, mas nunca vi. A sintaxe seguinte permite criar uma lista de valores que &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/python.w3.pt\/?p=82\" class=\"more-link\">Continuar a ler <span class=\"screen-reader-text\">&#8220;Express\u00f5es e curiosidades&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/82"}],"collection":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=82"}],"version-history":[{"count":14,"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/82\/revisions"}],"predecessor-version":[{"id":100,"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/82\/revisions\/100"}],"wp:attachment":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=82"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=82"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=82"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}