Python と LSL の比較

このページの目的

  • SecondLife ユーザに最も馴染みが深い LSL と比較することで、Python 導入のハードルを低めること

対象

  • Python は未経験だが最低限の LSL は書ける、読める人
  • Blender Python をはじめたい人
代数演算子
LSL Python
加算 a + b a + b
減算 a - b a - b
乗算 a * b a * b
除算 a / b a / b
除算の余り a % b a % b
べき乗($a^b$ (なし)1) a ** b
切り捨て除算 (なし)2) a // b

比較演算子
LSL Python
aとbが等しい a == b a == b
a is b
aとbが異なる a != b a != b
a <> b
a is not b
aはbより大きい a > b a > b
aはbより小さい a < b a < b
aはb以上 a >= b a >= b
aはb以下 a <= b a <= b

代入演算子
LSL Python
aにbを代入する a = b a = b
a = a + b の省略形 a += b a += b
a = a - b の省略形 a -= b a -= b
a = a * b の省略形 a *= b a *= b
a = a / b の省略形 a /= b a /= b
a = a % b の省略形 a %= b a %= b
インクリメント a++ (なし)3)
デクリメント a-- (なし)4)

ブール演算子
LSL Python
aかつb a && b a and b
aまたはb a || b a or b
論理否定(aではない) !a not a

ビット演算子 » 参考(LSL のビット演算について)
LSL Python
ビット反転 ~a ~a
理論積(AND) a & b a & b
理論和(OR) a | b a | b
排他的理論和(XOR) a ^ b a ^ b
左シフト a << b a << b
右シフト a >> b a >> b

文字列演算子
LSL Python
文字列aと文字列bの連結 a + b a + b
文字列aをn回繰り返す (なし)5) a * n6)

リスト演算子
LSL Python
リストaとリストbの結合 a + b a + b
リストaをn回繰り返す (なし)7) a * n8)

LSL

integer a = 1;
float b = 1.0;
string c = "abc";
list d = ["a", "b", "c"];

Python

a = 1
b = 1.0
c = "abc"
d = ["a", "b", "c"]

Python のポイント

  • 型の宣言は不要
  • 行末のセミコロンも不要(初期化に限らずあらゆる行末においてセミコロンは付けない)
  • 配列(リスト)は、多次元構造をとることが可能 例)array = [[1, 2], [3, 4], [5, 6]]
  • 連想配列(ディクショナリ)もあるが、ココでは扱わない

LSL

if (a == b){
    //a == b
}
else if (a < b){
    //a < b
}
else{
    //a > b
}

Python

if a == b:
    #a == b
elif a < b:
    #a < b
else:
    #a > b
 
 
 

Python のポイント

  • else if とは書かず elif と書く
  • 中括弧で区切らずコロンを用いる
  • if / elif / else の中身はインデントを下げて書く
  • 1行コメントは #

LSL

Python

例1) 0〜4の5回ループ

integer i;
for (i=0; i<5; i++){
    llSay(0, (string)i);
}
for i in range(5):
    print(i)
 
 

例2) 1〜5の5回ループ

integer i;
for (i=1; i<6; i++){
    llSay(0, (string)i);
}
for i in range(1, 6):
    print(i)
 
 

例3) リストの要素数だけループ

list a = [1, 2, 3, 4, 5];
integer i;
for (i=0; i<llGetListLength(a); i++){
    if (llList2Integer(a, i) == 3){
        llSay(0, "OK");
    }
}
a = [1, 2, 3, 4, 5]
for value in a:
    if value == 3:
        print("OK")
 
 
 

例4) リストの各要素を2倍する

list a = [1, 2, 3, 4, 5];
list b = [];
integer i;
for (i=0; i<llGetListLength(a); i++){
    b += [llList2Integer(a, i) * 2];
}
a = [1, 2, 3, 4, 5]
b = [value * 2 for value in a]
 
 
 
 

Python のポイント

  • if と同様、中括弧で区切らずコロンを用いる
  • ループ処理の中身はインデントを下げて書く
  • 例4 は「リスト内包式」「リスト内包表記」などと呼ばれている簡略表記法を用いた書き方。ググれば様々な例がヒットして幸せになれる。
1) llPow() を利用。a ^ b はXORビット演算子であることに注意
2) (integer)(a / b) で対応
3) a += 1 で対応
4) a -= 1 で対応
5) , 7) for でまわして対応
6) a = “hello” ならば、a * 3hellohellohello を返す
8) a = [1, 2, 3] ならば、a * 3[1, 2, 3, 1, 2, 3, 1, 2, 3] を返す