Python 入門 2
モジュール
Python ではモジュールをインポート(import)することによって、
必要な機能を使うことができるようになります。
自分で作成した Python スクリプトをモジュールとして読み込むこともできます。
主なモジュール
標準で Python に付属するモジュールだけでも数十種類ありますが、
よく使用するものを挙げておきます。
- maya
- Maya のモジュール
- time
- 時刻の処理
- calender
- 日付の処理
- sys
- システムパラメータの操作
- os
- ファイル・プロセスなど OS 関係の操作
- math
- 数学関数
- random
- 乱数
- urllib
- インターネット上のデータ取得
モジュールのインポート方法
- import モジュール名
import random
random.uniform(-5, 5)
- from モジュール名 import 関数名・変数名
from を使用すると、モジュール内の関数・変数を使用するときにモジュール名を省略できます。
from random import uniform
uniform(-5, 5)
- import モジュール名 as 別名
モジュール名を別名に置き換えて実行することができます。
import maya.cmds as mc
mc.sphere()
リスト
リストは MEL の配列に相当するもので、
どんなオブジェクトも要素として代入できるので、
MEL の配列に比べて自由度の高い使い方が可能です。
- リストの初期化
list1 = [1, 2, 3]
list1 = range(1, 3)
- リストに要素を追加
list1.append(4)
list1 = list1 + [5, 6]
list1 += [7, 8]
list1.extend([9, 10])
- インデックス
list1[3] # 4
list1[1:3] # [2, 3]
list1[1:9:2] # [2, 4, 6, 8]
list1[:-3] # [1, 2, 3, 4, 5, 6, 7]
- リストに要素を削除
del list1[2] # [1, 2, 4, 5, 6, 7, 8, 9, 10]
- リストの要素数
len(list1) # 9
- リストの内包表記
簡単にリストを初期化する方法です。
list = [n for n in range(5)] # [1, 2, 3, 4, 5]
これは、以下のスクリプトと同じです。
list = []
for n in range(5):
list.append(n)
タプル
タプルはリストと似ていますが、
要素を後から変更できないところが違います。
- タプルの初期化
t1 = (1, 2, 3)
リストをタプルに変換する方法
list2 = [1, 2, 3]
t1 = tuple(list2)
要素がひとつだけのタプルを作成
t3 = (7,)
- タプルに要素を追加
t2 = t1 + (4, 5, 6)
- インデックス
t1[3]
t1[1:3]
t1[1:5:2]
t1[:-2]
- タプルの要素数
len(t2)
辞書 (ディクショナリ)
辞書はインデックスではなく、キーによって要素にアクセスします。
辞書に順番はありません。
- 辞書の初期化
d = {'x':1, 'y':2, 'z':3}
または
k = ['x', 'y', 'z']
v = [1, 2, 3]
d = dict(zip(k, v))
- 辞書に要素を追加
d.update({'w':4})
- インデックス
d['x']
d.keys() # ['x', 'y', 'z', 'w']
d.values() # [1, 2, 3, 4]
- 辞書に要素を削除
del d['z']
- 辞書の要素数
len(d)
使用例
パーティクル で作成した
MEL スクリプトを Python スクリプトに変換してみましょう。
- 以下の関数を makeParticle1.py と言う名前でファイルに書き込みます。
import random
import maya
def makeParticle1():
points = []
for i in range(10):
x = random.uniform(-5, 5)
y = random.uniform(-5, 5)
z = random.uniform(-5, 5)
points.append((x, y, z))
maya.cmds.particle(p=points)
- で makeParticle1.mel を読み込みます。
- のタブを Python にして、以下のコマンドを実行します。
makeParticle1()
上図はわかりやすくするためにパーティクルの Particle Render Type アトリビュートを Spheres に変えて表示しています。
そのためには、パーティクルのアトリビュートエディタを開いて、Render Attributes → Paticle Render Type を Spheres に変更します。
スクリプトの解説
import random
- 乱数のモジュールをインポートして、
乱数関係の関数を使用できるようにします。
import maya
- Maya モジュールをインポートします。
def makeParticle1():
- makeParticle1
という関数の定義です。
points = []
- 空のリストを作成して、変数 points に代入します。
for i in range(10):
- 以下のコマンドを 10 回繰り返し実行します。
range(10)
はリスト
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
を返すので、この
for
文は以下と同じです。
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
x = random.uniform(-5, 5)
- -5 から 5 までの乱数を作成して、変数 x に代入します。
y = random.uniform(-5, 5)
- -5 から 5 までの乱数を作成して、変数 y に代入します。
z = random.uniform(-5, 5)
- -5 から 5 までの乱数を作成して、変数 z に代入します。
points.append((x, y, z))
- リスト points にタプル (x, y, z) を要素として追加します。
maya.cmds.particle(p=points)
- リスト points に並んでいるタプルを座標値としてパーティクルを作成します。
リスト内包表記の使用例
上の makeParticle1 をリスト内包表記を使用して作成し直すと、
以下のように関数の中身を 1 行で作ることができます。
from random import uniform
from maya.cmds import particle
def makeParticle1():
particle(p=[(uniform(-5, 5), uniform(-5, 5), uniform(-5, 5)) for i in range(10)])
さらに、内包表記の中で内包表記を使用すると、
もう少し短くなります。
from random import uniform
from maya.cmds import particle
def makeParticle1():
particle(p=[[uniform(-5, 5) for j in range(3)] for i in range(10)])
練習
- 上の makeParticle1.py を参考にして makeParticle2.py を作り、発生させるパーティクルの個数と、発生させるパーティクルの座標値の範囲(X、Y、Z)も変えることができるようにしてください。
(関数の名前と引数)
makeParticle2(個数, X 方向の範囲, Y 方向の範囲, Z 方向の範囲)
(使用例)
makeParticle2(30, 5.0, 10.0, 15.0)
30 個のパーティクルがX 座標が -5.0 から 5.0、 Y座標が -10.0 から 10.0、Z 座標が -15.0 から 15.0 までの範囲で作られます。
上図はわかりやすくするためにパーティクルの Particle Render Type アトリビュートを Spheresに変えて表示しています。
- さらにmakeParticle2.py を参考にして makeParticle3.py を作り、発生させるパーティクルのレンダリングタイプ(Particle Render Type アトリビュート)を変えることができるようにしてみましょう。
(関数の名前と引数)
makeParticle3(個数, X 方向の範囲, Y 方向の範囲, Z 方向の範囲, レンダリングタイプ)
(使用例)
makeParticle3(20, 7.0, 10.0, 13.0, 7)
20 個のパーティクルが
X 座標が -7.0 から 7.0、
Y 座標が -10.0 から 10.0、
Z 座標が -13.0 から 13.0 までの範囲で、
レンダリングタイプは Blobby surface ( 7 ) で作られます。
(ヒント)
レンダリングタイプを変更するにはパーティクルの particleRenderType アトリビュートを変更します。
アトリビュートを変更する Python コマンドは maya.cmds.setAttr() です。
maya.cmds.particle() の後で以下のコマンドを実行します。
maya.cmds.setAttr(".particleRenderType", レンダリングタイプの変数)
以下の表は particleRenderType アトリビュートのとる値を表しています。
particleRenderType | shape |
0 | MultiPoint |
1 | MultiStreak |
2 | Numeric |
3 | Points |
4 | Spheres |
5 | Sprites |
6 | Streak |
7 | Blobby Surface |
8 | Cloud |
9 | Tube |
練習課題
参考
Prev
Home | Contents
Mail