SOFTIMAGEとMAYAで使用するPythonスクリプト超入門②~番外編~※改訂版
今回は配列を見ていきましょう。
そもそもPythonでは配列に種類があり、それが下記の、
「list」
「tuple」
「dict」
の3つがあるみたいです。
それぞれ違う意味があるので、
一つ一つみていきましょう。
「list」とは
→あらゆるオブジェクトを複数要素を持つことが出来る
シーケンス型のオブジェクト
要はなんでも格納できる(多種との混合も可能)配列って事なんですかね?
コマンド的には下記のイメージ。
list = [u"晴れ", u"曇", u"雨",] Application.Logmessage(u"今日は"+list[0]) Application.Logmessage(u"今日は"+list[1]) Application.Logmessage(u"今日は"+list[2]) # INFO : 今日は晴れ # INFO : 今日は雲 # INFO : 今日は雨
こんな感じ。
要素を[ ]中の数で、インデックスで管理するんです。
わかりやすいですね!
続いて
「tuple」とは
→list型と似てるが、メソッドが用意されていない為、要素に対して変更を行い。
要素内の記述には[ ]ではなく、( )で記述する。
・これは使う意味あるんかな?メモリ的な利点があるのかな?
スクリプトレベルでは使わないかも。。。。
一応コマンド
tuple = (u"晴れ", u"曇", u"雨") Application.Logmessage(u"今日は"+tuple[0]) Application.Logmessage(u"今日は"+tuple[1]) Application.Logmessage(u"今日は"+tuple[2]) # INFO : 今日は晴れ # INFO : 今日は雲 # INFO : 今日は雨
ほとんどlistと変わらんぞ。。
あとはこれらの要素に対して、変更が行えない点があるとの事。
まぁ中々使わないかも。。
ちなみに!
修正してて知った事が↓
Python賢い!!
最後に
「dict」とは
→こちらもlist型と似てるが、各要素には順序が無い(インデックスが無い)。なので、各要素には別に
キーと呼ばれる識別子が割り振られ、それを指定することで要素を取り出せる。
・要は配列の取得の仕方が違うって事ですね。これ色々と用途ありそうですね。
dict = {"hare":u"晴れ", "kumori":u"曇り", "ame":u"雨"} Application.Logmessage(u"今日は"+dict["hare"]) Application.Logmessage(u"今日は"+dict["kumori"]) Application.Logmessage(u"今日は"+dict["ame"]) # INFO : 今日は晴れ # INFO : 今日は雲 # INFO : 今日は雨
Listより汎用性が高い気がします。
あと管理もし易い?かもですね。
ってな感じで、Pythonの配列の簡単な説明をしてみました。
イメージ的にはこんな感じw
この配列、はじめに要素を列挙できますが、もちろん途中でも要素を追加できます。(tupleは除く)
コマンド的にはこんな感じ↓
list = [u"晴れ", u"曇", u"雨",] Application.Logmessage(u"今日は"+list[0]) Application.Logmessage(u"今日は"+list[1]) Application.Logmessage(u"今日は"+list[2]) list.append(u"雪") Application.Logmessage(u"今日は"+list[3]) Application.Logmessage(str(list).decode("unicode-escape")) # INFO : 今日は晴れ # INFO : 今日は曇 # INFO : 今日は雨 # INFO : 今日は雪 # INFO : [u'晴れ', u'曇', u'雨', u'雪']
.append(u"雪")
で要素を追加しているわけです。
「Application.Logmessage(str(list).decode("unicode-escape"))
で配列の中身をデコードし、日本語で配列の中身を表示しています。
そうしないと、恐らく
「# INFO : [u'\u6674\u308c', u'\u66c7', u'\u96e8', u'\u96ea']」
こんな感じに、文字コード化していると思います。
これをまたUnicodeにデコードしてるわけです。
他にも要素の追加方法はありますが、今回は単純にこれだけ。
ちなみにJscriptだと、
var tenki = new Array("晴れ","曇り","雨"); Logmessage("今日の天気は"+tenki[0]); Logmessage("今日の天気は"+tenki[1]); Logmessage("今日の天気は"+tenki[2]); tenki.push("雪"); Logmessage("今日の天気は"+tenki[3]);
jscriptだと、「new Array」を使用します。
概要的にはほとんど変わりないかと思いますが、
「.append」が「.push」になったりとメソッドが全然違いますので、ご注意ください。
では最後に超簡単な実例を。↓
ヌル三つ選んで、一つ一つリネームするだけのスクリプトです。
ほんとうに少しだけ、応用です!!
oSel = Application.Getvalue("Selectionlist") Application.Logmessage(oSel) list = [] for i in oSel: Application.Logmessage(u"これを配列に追加 "+str(i)+u" します") list.append(str(i)) Application.Logmessage(list[0]) Application.Logmessage(list[1]) Application.Logmessage(list[2]) Application.DeselectAll() Application.SetValue(list[0]+".Name", "First", "") Application.SetValue(list[1]+".Name", "Second", "") Application.SetValue(list[2]+".Name", "Therd", "")
単純に選択したモノをForで回して、配列へ追加してます。
その後、配列の1つ目2つ目3つ目の名前を変更しています。
続いてMAYA編
これも文法的に同じなので、コードの紹介だけ。
説明は上文を閲覧ください。
まずは「list」から。
list = [u"晴れ", u"曇", u"雨",] print(u"今日は"+list[0]) print(u"今日は"+list[1]) print(u"今日は"+list[2])
全く同じですね。
続いて「tuple」
tuple = (u"晴れ", u"曇", u"雨") print(u"今日は"+tuple[0]) print(u"今日は"+tuple[1]) print(u"今日は"+tuple[2])
続いて「dict」
dict = {"hare":u"晴れ", "kumori":u"曇り", "ame":u"雨"} print(u"今日は"+dict["hare"]) print(u"今日は"+dict["kumori"]) print(u"今日は"+dict["ame"]) やっぱ同じですね。 ではSI編と同じく、要素の追加について↓ >|python| list = [u"晴れ", u"曇", u"雨",] print(u"今日は"+list[0]) print(u"今日は"+list[1]) print(u"今日は"+list[2]) list.append(u"雪") print(u"今日は"+list[3]) print(str(list).decode("unicode-escape"))
はい。これでも同じです。
続いて、この配列に要素を列挙
コマンド的にはこんな感じ↓
続いて、サンプル
オブジェクトを三つ選んで、一つ一つリネームするだけのスクリプトです。
これはSI編とはかなり違いますね。
import maya.cmds as mc Sel = mc.ls(sl = True) print Sel list = [] for i in Sel: print(u"これを配列に追加 "+str(i)+u" します") list.append(str(i)) mc.select(deselect = True) print(list[0]+".Name", "First", "") print(list[1]+".Name", "Second", "") print(list[2]+".Name", "Therd", "")
Python文法自体は一緒ですが、MAYAコマンドを扱うところが
完全に違いますが、これは前回からの続きでみると、
あまり難しいことは行ってませんね。
まぁ配列はここまで。。