@@ -1387,7 +1387,6 @@ <h2 id="operator"><a href="#operator" name="operator">#</a>Operator</h2>
1387
1387
last_el = op.methodcaller(< span class ="hljs-string "> 'pop'</ span > )(<list>)
1388
1388
</ code > </ pre >
1389
1389
< h2 id ="eval "> < a href ="#eval " name ="eval "> #</ a > Eval</ h2 >
1390
- < h3 id ="basic "> Basic</ h3 >
1391
1390
< pre > < code class ="python language-python hljs "> < span class ="hljs-meta "> >>> </ span > < span class ="hljs-keyword "> from</ span > ast < span class ="hljs-keyword "> import</ span > literal_eval
1392
1391
< span class ="hljs-meta "> >>> </ span > literal_eval(< span class ="hljs-string "> '1 + 2'</ span > )
1393
1392
< span class ="hljs-number "> 3</ span >
@@ -1396,47 +1395,6 @@ <h3 id="basic">Basic</h3>
1396
1395
< span class ="hljs-meta "> >>> </ span > literal_eval(< span class ="hljs-string "> 'abs(1)'</ span > )
1397
1396
ValueError: malformed node < span class ="hljs-keyword "> or</ span > string
1398
1397
</ code > </ pre >
1399
- < h3 id ="usingabstractsyntaxtrees "> Using Abstract Syntax Trees</ h3 >
1400
- < pre > < code class ="python language-python hljs "> < span class ="hljs-keyword "> import</ span > ast
1401
- < span class ="hljs-keyword "> from</ span > ast < span class ="hljs-keyword "> import</ span > Num, BinOp, UnaryOp
1402
- < span class ="hljs-keyword "> import</ span > operator < span class ="hljs-keyword "> as</ span > op
1403
-
1404
- LEGAL_OPERATORS = {ast.Add: op.add, < span class ="hljs-comment "> # <el> + <el></ span >
1405
- ast.Sub: op.sub, < span class ="hljs-comment "> # <el> - <el></ span >
1406
- ast.Mult: op.mul, < span class ="hljs-comment "> # <el> * <el></ span >
1407
- ast.Div: op.truediv, < span class ="hljs-comment "> # <el> / <el></ span >
1408
- ast.Pow: op.pow, < span class ="hljs-comment "> # <el> ** <el></ span >
1409
- ast.BitXor: op.xor, < span class ="hljs-comment "> # <el> ^ <el></ span >
1410
- ast.USub: op.neg} < span class ="hljs-comment "> # - <el></ span >
1411
-
1412
- < span class ="hljs-function "> < span class ="hljs-keyword "> def</ span > < span class ="hljs-title "> evaluate</ span > < span class ="hljs-params "> (expression)</ span > :</ span >
1413
- root = ast.parse(expression, mode=< span class ="hljs-string "> 'eval'</ span > )
1414
- < span class ="hljs-keyword "> return</ span > eval_node(root.body)
1415
-
1416
- < span class ="hljs-function "> < span class ="hljs-keyword "> def</ span > < span class ="hljs-title "> eval_node</ span > < span class ="hljs-params "> (node)</ span > :</ span >
1417
- node_type = type(node)
1418
- < span class ="hljs-keyword "> if</ span > node_type == Num:
1419
- < span class ="hljs-keyword "> return</ span > node.n
1420
- < span class ="hljs-keyword "> if</ span > node_type < span class ="hljs-keyword "> not</ span > < span class ="hljs-keyword "> in</ span > [BinOp, UnaryOp]:
1421
- < span class ="hljs-keyword "> raise</ span > TypeError(node)
1422
- operator_type = type(node.op)
1423
- < span class ="hljs-keyword "> if</ span > operator_type < span class ="hljs-keyword "> not</ span > < span class ="hljs-keyword "> in</ span > LEGAL_OPERATORS:
1424
- < span class ="hljs-keyword "> raise</ span > TypeError(< span class ="hljs-string "> f'Illegal operator < span class ="hljs-subst "> {node.op}</ span > '</ span > )
1425
- operator = LEGAL_OPERATORS[operator_type]
1426
- < span class ="hljs-keyword "> if</ span > node_type == BinOp:
1427
- left, right = eval_node(node.left), eval_node(node.right)
1428
- < span class ="hljs-keyword "> return</ span > operator(left, right)
1429
- < span class ="hljs-keyword "> elif</ span > node_type == UnaryOp:
1430
- operand = eval_node(node.operand)
1431
- < span class ="hljs-keyword "> return</ span > operator(operand)
1432
- </ code > </ pre >
1433
- < pre > < code class ="python language-python hljs "> < span class ="hljs-meta "> >>> </ span > evaluate(< span class ="hljs-string "> '2 ^ 6'</ span > )
1434
- < span class ="hljs-number "> 4</ span >
1435
- < span class ="hljs-meta "> >>> </ span > evaluate(< span class ="hljs-string "> '2 ** 6'</ span > )
1436
- < span class ="hljs-number "> 64</ span >
1437
- < span class ="hljs-meta "> >>> </ span > evaluate(< span class ="hljs-string "> '1 + 2 * 3 ** (4 ^ 5) / (6 + -7)'</ span > )
1438
- < span class ="hljs-number "> -5.0</ span >
1439
- </ code > </ pre >
1440
1398
< h2 id ="coroutine "> < a href ="#coroutine " name ="coroutine "> #</ a > Coroutine</ h2 >
1441
1399
< ul >
1442
1400
< li > < strong > Similar to generator, but generator pulls data through the pipe with iteration, while coroutine pushes data into the pipeline with send().</ strong > </ li >
@@ -1626,7 +1584,7 @@ <h4 id="test">Test:</h4>
1626
1584
[< span class ="hljs-string "> 'arsenal f.c.'</ span > , < span class ="hljs-number "> 2.44</ span > , < span class ="hljs-number "> 3.29</ span > ]
1627
1585
</ code > </ pre >
1628
1586
< h2 id ="profile "> < a href ="#profile " name ="profile "> #</ a > Profile</ h2 >
1629
- < h3 id ="basic-1 "> Basic</ h3 >
1587
+ < h3 id ="basic "> Basic</ h3 >
1630
1588
< pre > < code class ="python language-python hljs "> < span class ="hljs-keyword "> from</ span > time < span class ="hljs-keyword "> import</ span > time
1631
1589
start_time = time() < span class ="hljs-comment "> # Seconds since Epoch.</ span >
1632
1590
...
0 commit comments