lua、python对比学习
一、基本数据类型:
lua: nil(空)、boolean(false和nil为假)、number(数值)、string(字符串)、table(表)、function(方法)、thread (线程)、userdata
python: None(空)、boolean(false和None为假)、number(数值)、string(字符串)、list(列表)、tuple(元表)、dictionary(字典)、def(函数)、thread (线程)
string操作:
lua:
str = “Hello” .. “World!”
print (str) # 输出完整字符串
print (string.sub(str,1,1)) # 输出字符串中的第一个字符
print (string.sub(str,3,5)) # 输出字符串中第三个至第五个之间的字符串
print (string.sub(str,3,-1)) # 输出从第三个字符开始的字符串
print (str .. "TEST") # 输出连接的字符串
print (string.find(str,"el")) # 输出第一个满足项起始下标
print (string.format("the value is:%d",4)) # 字符串格式化输出
输出结果
Hello World!
H
llo
llo World!
Hello World!TEST
2 3
the value is:4
python:
str = “Hello” + “World!”
print (str) # 输出完整字符串
print (str[0]) # 输出字符串中的第一个字符
print (str[2:5]) # 输出字符串中第三个至第六个之间的字符串
print (str[2:]) # 输出从第三个字符开始的字符串
print (str * 2) # 输出字符串两次
print (str + "TEST") # 输出连接的字符串
print ("He" in str) # 查询是否包含某字符
print ("the value is:%d" %(4)) #字符串格式化输出
输出结果
Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST
True
the value is:4
集合操作:
lua: 下标从1开始
array = {"Lua", "Python"}
for i= 0, #array do
print(array[i])
end
--for循环 ipairs对于集合下标要求必须从1开始递增并且中间值不可为nil
--pairs 输出结果是随机的即不是按照集合顺序输出,但没有ipairs的限制
for _, v in ipairs(array) do
print(v)
end
输出结果
"Lua"
"Python"
"Lua"
"Python"
python: 下标从0开始
array = ["Lua", "Python"]
for i in range(len(array)):
print(array[i])
i = 0
while (i
二、lua注意事项:
1、lua函数第一层结构中,return语句之后不能再有别的代码。
function func()
return "H"
local data = "Hello"
end
2、goto语句的跳转目的,不能写到逻辑判断语句块中。
function func()
local i = 1
goto continue
if i == 2 then
::continue::
print("true")
else
print("false")
end
end
3、table之间的赋值为引用,即只是将地址进行引用,而不是申请新的内存空间。
function func()
local tab1 = {1, 2, 3}
local tab2 = tab1
table.remove(tab2)
for i = 1, #tab1 do
print(tab1[i])
end
print("_______________")
for i = 1, #tab1 do
print(tab2[i])
end
end
func()
--[[
1
2
_______________
1
2
]]
4、在使用and或or时,尽可能加括号。
function func()
local i = 1
print(i and 10 or 5 + 1)
print((i and 10 or 5) + 1)
i = nil
print(i and 10 or 5 + 1)
print((i and 10 or 5) + 1)
end
func()
--[[
10
11
6
6
]]
5、for语句,下标不是连续的不要使用ipairs。ipairs遇见nil就返回。
function func()
local tab = {1, 2, 3, nil, a = 5, 6}
for i = 1, #tab do
print(tab[i])
end
print()
for k, v in ipairs(tab) do
print(k, v)
end
print()
for k, v in pairs(tab) do
print(k, v)
end
end
func()
--[[
1
2
3
nil
6
1 1
2 2
3 3
1 1
2 2
3 3
5 6
a 5
]]