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 * n 6) |
リスト演算子 |
||
LSL | Python | |
リストaとリストbの結合 | a + b | a + b |
リストaをn回繰り返す | (なし)7) | a * n 8) |
変数の初期化
Python のポイント
- 型の宣言は不要
- 行末のセミコロンも不要(初期化に限らずあらゆる行末においてセミコロンは付けない)
- 配列(リスト)は、多次元構造をとることが可能 例)
array = [[1, 2], [3, 4], [5, 6]]
- 連想配列(ディクショナリ)もあるが、ココでは扱わない
if による条件分岐処理
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行コメントは
#
for によるループ処理
例1) 0〜4の5回ループ
例2) 1〜5の5回ループ
例3) リストの要素数だけループ
LSL
list a = [1, 2, 3, 4, 5]; integer i; for (i=0; i<llGetListLength(a); i++){ if (llList2Integer(a, i) == 3){ llSay(0, "OK"); } }
Python
a = [1, 2, 3, 4, 5] for value in a: if value == 3: print("OK")
例4) リストの各要素を2倍する
LSL
list a = [1, 2, 3, 4, 5]; list b = []; integer i; for (i=0; i<llGetListLength(a); i++){ b += [llList2Integer(a, i) * 2]; }
Python
a = [1, 2, 3, 4, 5] b = [value * 2 for value in a]
Python のポイント
if
と同様、中括弧で区切らずコロンを用いる- ループ処理の中身はインデントを下げて書く
- 例4 は「リスト内包式」「リスト内包表記」などと呼ばれている簡略表記法を用いた書き方。ググれば様々な例がヒットして幸せになれる。