Python version: 3.7 Lua version: 5.3
I want to know more about FEATURES!
- The latest version includes the use of 'operator overloading', and 'properties' in classes
- Type comparisons have been added
- Try/except blocks have been added
- String functions have been added (find, split, join, replace, basic slices (no step yet) rudimentary format (no typing, e.g. {.2f})
- The string functions required a large change to the overall code to include luas : operator. Classes etc have been changed substantially under the hood, but the user should not be able to notice the change.
- Assigning static methods to variables and calling them is not permitted, only call static methods directly
- Assigning nested classes to variables and initializing them is not permitted, only initialize nested classes from within the main class directly.
usage: python-lua [-h] [--show-ast] [--only-lua-init] [--no-lua-init] [IF]
Python to lua translator.
positional arguments:
IF A python script filename to translate it.
optional arguments:
-h, --help show this help message and exit
--show-ast Print python ast tree before code.
--only-lua-init Print only lua initialization code.
--no-lua-init Print lua code without lua init code.
For example: python3 __main__py tests/iterlist.py
from pythonlua.translator import Translator
...
translator = Translator()
lua_code = translator.translate(python_code)
For example see runtests.py
.
This translator defines some python functions in lua (len
, range
, enumerate
, list
, dict
and other).
For list and dict it also defines most methods like append()
for list
and items()
for dict
.
You can find this definitions in the file pythonlua/luainit.lua.
Also this definitions will be in the output, when you run translator as a standalone application.
For example
local string_meta = getmetatable("")
string_meta.__add = function(v1, v2)
if type(v1) == "string" and type(v2) == "string" then
return v1 .. v2
end
return v1 + v2
end
local str = tostring
local int = tonumber
local function len(t)
return #t
end
local function range(from, to, step)
assert(from ~= nil)
if to == nil then
to = from
from = 1
end
if step == nil then
step = to > from and 1 or -1
end
local i = from
return function()
ret = i
if (step > 0 and i > to) or (step < 0 and i < to) then
return nil
end
i = i + step
return ret
end
end
local function list(t)
local methods = {}
methods.append = function(value)
table.insert(t, value)
end
local iterator_index = nil
setmetatable(t, {
__index = function(self, index)
if type(index) == "number" and index < 0 then
return rawget(t, #t + index + 1)
end
return methods[index]
end,
__call = function(self, _, idx)
if idx == nil and iterator_index ~= nil then
iterator_index = nil
end
local v = nil
iterator_index, v = next(t, iterator_index)
return v
end,
})
return t
end
function dict(t)
local methods = {}
methods.items = function()
return pairs(t)
end
local key_index = nil
setmetatable(t, {
__index = methods,
__call = function(self, _, idx)
if idx == nil and key_index ~= nil then
key_index = nil
end
key_index, _ = next(t, key_index)
return key_index
end,
})
return t
end
function enumerate(t, start)
start = start or 1
local i, v = next(t, nil)
return function()
local index, value = i, v
i, v = next(t, i)
if index == nil then
return nil
end
return index + start - 1, value
end
end
local a, b, c = 1, 2, 3
print(a, b, c)
a, b = nil, nil
print(a, b, c)
c = nil
print(a, b, c)
Open
Python code:
foo.bar.baz.one.two.three("Hello, world!")
Lua code:
foo.bar.baz.one.two:three(("Hello, world!"))
Output:
Open
Python code:
class Animal:
PLANET = "Earth"
def __init__(self, name):
self.name = name
def say_hello(self):
print("Hello, my name is: " + self.name + "!")
@staticmethod
def statichello(msg):
print(msg+" from staticmethod")
class Dog(Animal):
def say_hello(self):
print("Hello, my name is: " + self.name + "!")
self.bark()
def bark(self):
print("Bark! Bark! Bark!")
sparky = Animal("Sparky")
barky = Dog("Barky")
sparky.say_hello()
barky.say_hello()
barky.bark()
print("Animal.PLANET = ", Animal.PLANET)
print("sparky.PLANET = ", sparky.PLANET)
print("barky.PLANET = ", barky.PLANET)
Animal.PLANET = "Mars"
print("Animal.PLANET = ", Animal.PLANET)
print("sparky.PLANET = ", sparky.PLANET)
Animal.statichello("Hello")
Dog.statichello("Hello")
Lua code:
Animal = class(function(Animal)
Animal.PLANET = ("Earth")
function Animal.__init__(self, name)
self.name = name
end
function Animal.say_hello(self)
print(((("Hello, my name is: ") + self.name) + ("!")))
end
Animal.statichello = staticmethod(function(msg)
print((msg + (" from staticmethod")))
end)
return Animal
end, "Animal", {}, {}, {})
Dog = class(function(Dog)
function Dog.say_hello(self)
print(((("Hello, my name is: ") + self.name) + ("!")))
self:bark()
end
function Dog.bark(self)
print(("Bark! Bark! Bark!"))
end
return Dog
end, "Dog", {Animal}, {}, {})
sparky = Animal(("Sparky"))
barky = Dog(("Barky"))
sparky:say_hello()
barky:say_hello()
barky:bark()
print(("Animal.PLANET = "), Animal.PLANET)
print(("sparky.PLANET = "), sparky.PLANET)
print(("barky.PLANET = "), barky.PLANET)
Animal.PLANET = ("Mars")
print(("Animal.PLANET = "), Animal.PLANET)
print(("sparky.PLANET = "), sparky.PLANET)
Animal:statichello(("Hello"))
Dog:statichello(("Hello"))
Output:
Hello, my name is: Sparky! Hello, my name is: Barky! Bark! Bark! Bark! Bark! Bark! Bark! Animal.PLANET = Earth sparky.PLANET = Earth barky.PLANET = Earth Animal.PLANET = Mars sparky.PLANET = Mars Hello from staticmethod Hello from staticmethod
Open
Python code:
class example:
def __init__(self, v):
self.value = v
def __add__(self, other):
return example(self.value+other.value)
def __sub__(self, other):
return example(self.value-other.value)
def __mul__(self, other):
return example(self.value*other.value)
def __truediv__(self, other):
return example(self.value/other.value)
def __lt__(self, other):
return self.value < other.value
def __str__(self):
return str(self.value)
def __contains__(self, item):
if isinstance(item, str):
return True
return False
@property
def prop(self):
return self.value
@prop.setter
def prop(self,new):
if new > 5:
self.value = new
class A:
obj = None
def __new__(cls, *args, **kwargs):
if not cls.obj:
cls.obj = object.__new__(cls)
return cls.obj
def __init__(self):
print('init')
a = example(5)
b = example(6)
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a.prop)
a.prop = 4
print(a.prop)
a.prop = 6
print(a.prop)
if "string" in a:
print("yes")
if 1 in a:
print("no")
a = A()
b = A()
print(a==b)
Lua code:
example = class(function(example)
function example.__init__(self, v)
self.value = v
end
function example.__add__(self, other)
return example((self.value + other.value))
end
function example.__sub__(self, other)
return example((self.value - other.value))
end
function example.__mul__(self, other)
return example((self.value * other.value))
end
function example.__truediv__(self, other)
return example((self.value / other.value))
end
function example.__lt__(self, other)
return (self.value < other.value)
end
function example.__str__(self)
return str(self.value)
end
function example.__contains__(self, item)
if isinstance(item, str) then
return true
end
return false
end
example.prop = property(function(self)
return self.value
end)
example.prop = example.prop:setter(function(self, new)
if (new > 5) then
self.value = new
end
end)
return example
end, "example", {}, {__add = "__add__", __sub = "__sub__", __mul = "__mul__", __div = "__truediv__", __lt = "__lt__", __tostring = "__str__", __in = "__contains__"}, {prop = "example.prop"})
A = class(function(A)
A.obj = nil
function A.__new__(cls, ...)
local args = list {...}
if not cls.obj then
cls.obj = object:__new__(cls)
end
return cls.obj
end
function A.__init__(self)
print(("init"))
end
return A
end, "A", {}, {}, {})
a = example(5)
b = example(6)
print((a + b))
print((a - b))
print((a * b))
print((a / b))
print(a.prop)
a.prop = 4
print(a.prop)
a.prop = 6
print(a.prop)
if (operator_in(("string"), a)) then
print(("yes"))
end
if (operator_in(1, a)) then
print(("no"))
end
a = A()
b = A()
print((a == b))
Output:
11 -1 30 0.83333333333333 5 5 6 yes init init true
Open
Python code:
"""Documentation comments test"""
class Animal:
"""Class-level docstring"""
pass
def foo():
"""Function-level docstring"""
pass
name = "John " + "Parrish"
print(name)
print("Hello!")
Lua code:
--[[ Documentation comments test ]]
Animal = class(function(Animal)
--[[ Class-level docstring ]]
return Animal
end, "Animal", {}, {}, {})
function foo()
--[[ Function-level docstring ]]
end
name = (("John ") + ("Parrish"))
print(name)
print(("Hello!"))
Output:
John Parrish Hello!
Open
Python code:
a = [i * j for i in range(5) for j in range(3) if i * j % 2 == 0 and i > 0 and j > 0]
for item in a:
print(item)
lst = ["a","b","c","d","e"]
b = {lst[i]: i ** 2 for i in range(5)}
for k in lst:
print(k,b[k])
Lua code:
a = (function() local result = list {} for i in range(5) do for j in range(3) do if (((math.fmod((i * j), 2)) == 0) and (i > 0) and (j > 0)) then result:append((i * j)) end end end return result end)()
for item in a do
print(item)
::loop_label_1::
end
lst = list {("a"), ("b"), ("c"), ("d"), ("e")}
b = (function() local result = dict {} for i in range(5) do result[lst[i]] = (i ^ 2) end return result end)()
for k in lst do
print(k, b[k])
::loop_label_2::
end
Output:
2 2 4 6 4 8 a 0.0 b 1.0 c 4.0 d 9.0 e 16.0
Open
Python code:
for i in range(10):
if i == 5:
continue
for j in range(10):
if j == 7:
continue
print(i, " * ", j, " = ", i * j)
Lua code:
for i in range(10) do
if (i == 5) then
goto loop_label_3
end
for j in range(10) do
if (j == 7) then
goto loop_label_4
end
print(i, (" * "), j, (" = "), (i * j))
::loop_label_4::
end
::loop_label_3::
end
Output:
0 * 0 = 0 0 * 1 = 0 0 * 2 = 0 0 * 3 = 0 0 * 4 = 0 0 * 5 = 0 0 * 6 = 0 0 * 8 = 0 0 * 9 = 0 1 * 0 = 0 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 8 = 8 1 * 9 = 9 2 * 0 = 0 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 8 = 16 2 * 9 = 18 3 * 0 = 0 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 8 = 24 3 * 9 = 27 4 * 0 = 0 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 8 = 32 4 * 9 = 36 6 * 0 = 0 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 6 * 8 = 48 6 * 9 = 54 7 * 0 = 0 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 8 = 56 7 * 9 = 63 8 * 0 = 0 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 8 = 64 8 * 9 = 72 9 * 0 = 0 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 8 = 72 9 * 9 = 81
Open
Python code:
def strong(old_fun):
def wrapper(*args):
s = "<strong>" + old_fun(*args) + "</strong>"
return s
return wrapper
def italic(old_fun):
def wrapper(*args):
s = "<em>" + old_fun(*args) + "</em>"
return s
return wrapper
@italic
@strong
def hello(name):
return "Hello, " + name + "!"
print(hello("John"))
Lua code:
function strong(old_fun)
local function wrapper(...)
local args = list {...}
local s = ((("<strong>") + old_fun(unpack(args))) + ("</strong>"))
return s
end
return wrapper
end
function italic(old_fun)
local function wrapper(...)
local args = list {...}
local s = ((("<em>") + old_fun(unpack(args))) + ("</em>"))
return s
end
return wrapper
end
hello = italic(strong(function(name)
return ((("Hello, ") + name) + ("!"))
end))
print(hello(("John")))
Output:
Hello, John!
Open
Python code:
def hello(name, age=20, nickname="", *args):
print("Hello, my name is " + name + " and I'm " + str(age))
print("My nickname is " + nickname)
hello("John", 12, "antikiller")
hello("Josh", 45)
hello("Jane")
Lua code:
function hello(name, age, nickname, ...)
age = age or 20
nickname = nickname or ("")
local args = list {...}
print((((("Hello, my name is ") + name) + (" and I'm ")) + str(age)))
print((("My nickname is ") + nickname))
end
hello(("John"), 12, ("antikiller"))
hello(("Josh"), 45)
hello(("Jane"))
Output:
Hello, my name is John and I'm 12 My nickname is antikiller Hello, my name is Josh and I'm 45 My nickname is Hello, my name is Jane and I'm 20 My nickname is
Open
Python code:
a, b, c = 1, 2, 3
print(a, b, c)
del a, b
print(a, b, c)
del c
print(a, b, c)
Lua code:
a, b, c = 1, 2, 3
print(a, b, c)
a, b = nil, nil
print(a, b, c)
c = nil
print(a, b, c)
Output:
1 2 3 nil nil 3 nil nil nil
Open
Python code:
def factorial(value):
return 1 if value == 0 else value * factorial(value - 1)
print(factorial(5))
print(factorial(10))
print(factorial(3))
print(factorial(0))
Lua code:
function factorial(value)
return (function() if (value == 0) then return 1 end return (value * factorial((value - 1))) end)()
end
print(factorial(5))
print(factorial(10))
print(factorial(3))
print(factorial(0))
Output:
120 3628800 6 1
Open
Python code:
for i in range(10):
print(i)
k = [1, 2, 3]
print(len(k))
Lua code:
for i in range(10) do
print(i)
::loop_label_5::
end
k = list {1, 2, 3}
print(len(k))
Output:
0 1 2 3 4 5 6 7 8 9 3
Open
Python code:
foo = 42
def bar():
global foo
foo = 34
print("foo = ", foo)
bar()
print("foo = ", foo)
Lua code:
foo = 42
function bar()
foo = 34
end
print(("foo = "), foo)
bar()
print(("foo = "), foo)
Output:
foo = 42 foo = 34
Open
Python code:
a = 45
b = 0
if a > 5 and b < 34:
print("a > 5")
if a >= 45:
print("a >= 45")
else:
print("a < 45")
elif a < 5:
print("a < 5")
else:
print("a == 5")
if a == 45:
print("a == 45")
x = 100
if 50 < x < 150:
print("50 < x < 150")
else:
print("Something wrong.")
Lua code:
a = 45
b = 0
if ((a > 5) and (b < 34)) then
print(("a > 5"))
if (a >= 45) then
print(("a >= 45"))
else
print(("a < 45"))
end
elseif (a < 5) then
print(("a < 5"))
else
print(("a == 5"))
end
if (a == 45) then
print(("a == 45"))
end
x = 100
if (50 < x and x < 150) then
print(("50 < x < 150"))
else
print(("Something wrong."))
end
Output:
a > 5 a >= 45 a == 45 50 < x < 150
Open
Python code:
import foo.bar
import bar as bar_ex
Lua code:
local bar = require("foo.bar")
local bar_ex = require("bar")
Output:
Open
Python code:
a = [1, 2, 3, 4]
b = {
"name": "John",
"age": 42,
}
c = "Hello, world!"
if 2 < 3:
print("2 < 3")
print(1 in a)
print(2 in a)
print(5 in a)
print("name" in b)
print("surname" in b)
print("Hell" in c)
print("world" in c)
print("Foo" in c)
print("Hells" not in c)
Lua code:
a = list {1, 2, 3, 4}
b = dict {[("name")] = ("John"), [("age")] = 42}
c = ("Hello, world!")
if (2 < 3) then
print(("2 < 3"))
end
print((operator_in(1, a)))
print((operator_in(2, a)))
print((operator_in(5, a)))
print((operator_in(("name"), b)))
print((operator_in(("surname"), b)))
print((operator_in(("Hell"), c)))
print((operator_in(("world"), c)))
print((operator_in(("Foo"), c)))
print((not operator_in(("Hells"), c)))
Output:
2 < 3 true true false true false true true false true
Open
Python code:
class A:
pass
class B(A):
pass
a=A()
b=B()
print(isinstance(a,A))
print(isinstance(a,B))
print(isinstance(b,A))
print(isinstance(b,B))
Lua code:
A = class(function(A)
return A
end, "A", {}, {}, {})
B = class(function(B)
return B
end, "B", {A}, {}, {})
a = A()
b = B()
print(isinstance(a, A))
print(isinstance(a, B))
print(isinstance(b, A))
print(isinstance(b, B))
Output:
true false true true
Open
Python code:
book = {
"title": "Harry Potter and the philosopher's stone",
"author": "J. K. Rowling",
"year": 1997,
}
k = 0
for i in book:
k += 1
if k > 1:
break
for i in book:
pass
Lua code:
book = dict {[("title")] = ("Harry Potter and the philosopher's stone"), [("author")] = ("J. K. Rowling"), [("year")] = 1997}
k = 0
for i in book do
k = (k + 1)
if (k > 1) then
break
end
::loop_label_6::
end
for i in book do
::loop_label_7::
end
Output:
Open
Python code:
a = [1, 4, 8, 16, 52, 34, 78, 342]
k = 0
strange_sum = 0
for i in a:
k += 1
if k > 3:
break
print("Current i is: ", i)
strange_sum += i
print("After break: ")
for i in a:
print("Current i is: ", i)
strange_sum += i
print("Some strange sum is: ", strange_sum)
Lua code:
a = list {1, 4, 8, 16, 52, 34, 78, 342}
k = 0
strange_sum = 0
for i in a do
k = (k + 1)
if (k > 3) then
break
end
print(("Current i is: "), i)
strange_sum = (strange_sum + i)
::loop_label_8::
end
print(("After break: "))
for i in a do
print(("Current i is: "), i)
strange_sum = (strange_sum + i)
::loop_label_9::
end
print(("Some strange sum is: "), strange_sum)
Output:
Current i is: 1 Current i is: 4 Current i is: 8 After break: Current i is: 1 Current i is: 4 Current i is: 8 Current i is: 16 Current i is: 52 Current i is: 34 Current i is: 78 Current i is: 342 Some strange sum is: 548
Open
Python code:
sqr = lambda x: x * x
print(sqr(2))
print(sqr(8))
Lua code:
sqr = function(x) return (x * x) end
print(sqr(2))
print(sqr(8))
Output:
4 64
Open
Python code:
a = [1, 2, 5]
b = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
c = {
"firstname": "John",
"lastname": "Doe",
"age": 42,
"children": [
{
"name": "Sara",
"age": 4,
},
],
}
print(a[1])
print(b[0][1])
print(c["firstname"], c["lastname"])
ch = c["children"][0]
print(ch["name"], ch["age"])
Lua code:
a = list {1, 2, 5}
b = list {list {1, 2, 3}, list {4, 5, 6}, list {7, 8, 9}}
c = dict {[("firstname")] = ("John"), [("lastname")] = ("Doe"), [("age")] = 42, [("children")] = list {dict {[("name")] = ("Sara"), [("age")] = 4}}}
print(a[1])
print(b[0][1])
print(c[("firstname")], c[("lastname")])
ch = c[("children")][0]
print(ch[("name")], ch[("age")])
Output:
2 2 John Doe Sara 4
Open
Python code:
i = 10
j = 5
while i > 0:
print(i)
i = i - 1
test = 3434
test = 56
def fact(n):
return 1 if n == 0 else n * fact(n - 1)
class Foo:
def __init__(self):
self.cls_var = 45
localvar = 56
Lua code:
i = 10
j = 5
while (i > 0) do
print(i)
i = (i - 1)
local test = 3434
::loop_label_10::
end
test = 56
function fact(n)
return (function() if (n == 0) then return 1 end return (n * fact((n - 1))) end)()
end
Foo = class(function(Foo)
function Foo.__init__(self)
self.cls_var = 45
local localvar = 56
end
return Foo
end, "Foo", {}, {}, {})
Output:
10 9 8 7 6 5 4 3 2 1
Open
Python code:
def get_summ(a, b):
return a + b
print(get_summ(3, 5))
"""[[luacode]]
local c = 45
print(c)
"""
"""[[luacode=tests\\luacode.lua]]"""
Lua code:
function get_summ(a, b)
return (a + b)
end
print(get_summ(3, 5))
local c = 45
print(c)
print('luacode imported')
Output:
8 45 luacode imported
Open
Python code:
class Foo:
class Bar:
def __init__(self):
print("__init__ from Bar")
def __init__(self):
print("__init__ from Foo")
Foo.Bar()
Foo()
Foo.Bar()
Lua code:
Foo = class(function(Foo)
Foo.Bar = class(function(Bar)
function Bar.__init__(self)
print(("__init__ from Bar"))
end
return Bar
end, "Bar", {}, {}, {})
function Foo.__init__(self)
print(("__init__ from Foo"))
Foo.Bar()
end
return Foo
end, "Foo", {}, {}, {})
Foo()
Foo:Bar()
Output:
init from Foo init from Bar init from Bar
Open
Python code:
print(5 + 3)
print(18 - 2)
print(5 * 5)
print(64 / 2)
print(11 ** 2)
print(11 // 2)
print(11 / 2)
print(((5 + 34) ** 2 / 53) * (24 - 6 * 3))
Lua code:
print((5 + 3))
print((18 - 2))
print((5 * 5))
print((64 / 2))
print((11 ^ 2))
print((math.floor(11 / 2)))
print((11 / 2))
print(((((5 + 34) ^ 2) / 53) * (24 - (6 * 3))))
Output:
8 16 25 32.0 121.0 5 5.5 172.18867924528
Open
Python code:
print("test" + "ing")
print("test{}".format("ing2"))
str = "ab{}cb{}"
print(str.replace("b","d"))
print(str.find("c"))
print(str.format("asdf","asdf2"))
print(str[1:5])
print("()".join(str.split("{}")))
print("""a
multiline
string
""")
Lua code:
print((("test") + ("ing")))
print(("test{}"):format(("ing2")))
str = ("ab{}cb{}")
print(str:replace(("b"), ("d")))
print(str:find(("c")))
print(str:format(("asdf"), ("asdf2")))
print(str[slice(1,5,nil)])
print(("()"):join(str:split(("{}"))))
print(([[a
multiline
string
]]))
Output:
testing testing2 ad{}cd{} 4 abasdfcbasdf2 b{}c ab()cb() a multiline string
Open
Python code:
try:
print('test')
xpcall()
print('still going')
except:
print('Error in function')
print('running')
Lua code:
xpcall(function()
print(("test"))
xpcall()
print(("still going"))
end, function(Error)
print(("Error in function"))
end)
print(("running"))
Output:
test Error in function running
Open
Python code:
class A:
pass
a = A()
if isinstance(a,A) and type(a) is A:
print("class typing works")
b = 5.5
if isinstance(b,float): # or int, since both convert to number in lua
print("number typing works")
c = "my string"
if isinstance(c,str):
print("string typing works")
d = []
if type(d) is list and isinstance(d,list):
print("list type works")
e = {}
if type(e) is dict and isinstance(e,dict):
print("dict type works")
if type(d) is dict or type(e) is list:
print("not good")
Lua code:
A = class(function(A)
return A
end, "A", {}, {}, {})
a = A()
if (isinstance(a, A) and (type(a) == A)) then
print(("class typing works"))
end
b = 5.5
if isinstance(b, float) then
print(("number typing works"))
end
c = ("my string")
if isinstance(c, str) then
print(("string typing works"))
end
d = list {}
if ((type(d) == list) and isinstance(d, list)) then
print(("list type works"))
end
e = dict {}
if ((type(e) == dict) and isinstance(e, dict)) then
print(("dict type works"))
end
if ((type(d) == dict) or (type(e) == list)) then
print(("not good"))
end
Output:
class typing works number typing works string typing works list type works dict type works
Open
Python code:
a = 45
a = -a
b = +a
c = ~a
test = True
nt = not test
print(a, b, c)
print(test, nt)
Lua code:
a = 45
a = -a
b = a
c = bit32.bnot(a)
test = true
nt = not test
print(a, b, c)
print(test, nt)
Output:
-45 -45 44 true false
Open
Python code:
def foo():
pass
def varargs(name, *args):
print("Name is: ", name)
print(*args)
varargs("first", 1, 3, 6, 4, 7)
varargs("second", "hello", "python", "world")
Lua code:
function foo()
end
function varargs(name, ...)
local args = list {...}
print(("Name is: "), name)
print(unpack(args))
end
varargs(("first"), 1, 3, 6, 4, 7)
varargs(("second"), ("hello"), ("python"), ("world"))
Output:
Name is: first 1 3 6 4 7 Name is: second hello python world
Open
Python code:
a = 45
b = 100
a, b = b, a
c = a * b
d = c / (1 + 1)
print(a)
print(b)
print(c)
print(d)
Lua code:
a = 45
b = 100
a, b = b, a
c = (a * b)
d = (c / (1 + 1))
print(a)
print(b)
print(c)
print(d)
Output:
100 45 4500 2250.0
Open
Python code:
i = 10
while i > 0:
print(i)
i -= 1
Lua code:
i = 10
while (i > 0) do
print(i)
i = (i - 1)
::loop_label_11::
end
Output:
10 9 8 7 6 5 4 3 2 1
Open
Python code:
with open("output") as output_file:
output_file.write(input_file.read())
Lua code:
do
local output_file = open(("output"))
output_file:write(input_file:read())
end
Output: