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<len(array)): print(array[i]) i+=1 输出结果 "Lua" "Python" "Lua" "Python"
二、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 ]]