Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<enter>import sublime, sublime_plugin
class EvalCommand(sublime_plugin.TextCommand):
def run(self, edit):
for region in self.view.sel():
if not region.empty():
s = self.view.substr(region)
self.view.replace(edit, region, str(eval(s)))
[
...
,{
"keys": ["ctrl+shift+c"], "command": "eval", "args": {}
}
]import sublime_plugin
import ast, operator as op
# supported operators
operators = {ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul,
ast.Div: op.truediv, ast.Pow: op.pow, ast.BitXor: op.xor}
def eval_expr(expr):
return eval_(ast.parse(expr).body[0].value)
def eval_(node):
if isinstance(node, ast.Num):
return node.n
if isinstance(node, ast.operator):
return operators[type(node)]
if isinstance(node, ast.BinOp):
return eval_(node.op)(eval_(node.left), eval_(node.right))
raise TypeError(node)
class EvalCommand(sublime_plugin.TextCommand):
def run(self, edit):
for r, s in [(r, self.view.substr(r)) for r in self.view.sel() if not r.empty()]:
self.view.replace(edit, r, str(eval_expr(s)))
"Hello!" * 50. Поэтому вот вариант получше:import sublime_plugin
ns = {}
ns.update(vars(__import__('math')).copy())
ns['__builtins__'] = None
class EvalCommand(sublime_plugin.TextCommand):
def run(self, edit):
for r, s in [(r, self.view.substr(r)) for r in self.view.sel() if not r.empty()]:
self.view.replace(edit, r, str(eval(s, ns)))
_12546|82
82 |----
_434 |153
410
_246
246
0
Вычисление арифметических выражений в текстовом редакторе