Python 入門 2

モジュール

Python ではモジュールをインポート(import)することによって、 必要な機能を使うことができるようになります。
自分で作成した Python スクリプトをモジュールとして読み込むこともできます。

主なモジュール

標準で Python に付属するモジュールだけでも数十種類ありますが、 よく使用するものを挙げておきます。

maya
Maya のモジュール
time
時刻の処理
calender
日付の処理
sys
システムパラメータの操作
os
ファイル・プロセスなど OS 関係の操作
math
数学関数
random
乱数
urllib
インターネット上のデータ取得

モジュールのインポート方法

リスト

リストは MEL の配列に相当するもので、 どんなオブジェクトも要素として代入できるので、 MEL の配列に比べて自由度の高い使い方が可能です。

タプル

タプルはリストと似ていますが、 要素を後から変更できないところが違います。

辞書 (ディクショナリ)

辞書はインデックスではなく、キーによって要素にアクセスします。
辞書に順番はありません。

使用例

パーティクル で作成した MEL スクリプトを Python スクリプトに変換してみましょう。

  1. 以下の関数を 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)
    
  2. File → Open Script で makeParticle1.mel を読み込みます。
  3. Script Editor のタブを Python にして、以下のコマンドを実行します。
    makeParticle1()
    [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)])

練習

練習課題

参考


Prev
Home | Contents
Mail