2017年03月17日

modo10.2v1のスクリプトについて調べてみた その67

引き続き「TD SDK」について調べてみたい。

今回も「modo.util.makeQuickCommand()」ファンクション内の「CmdMyCustomCommand」クラスの「basic_Execute()」メソッドの続きだ。

 def basic_Execute(self, msg, flags):
     kwargs = {}

     if self._argumentList is not None:

         if not all([self.dyna_IsSet(i) for i in range(self._numArgs)]):
             raise ValueError('Missing argument')

         for i, pair in enumerate(self._argumentList.iteritems()):
             name, defaultValue = pair
             if isinstance(defaultValue, basestring):
                 value = self.dyna_String(i, defaultValue)
                 kwargs[name] = value
             elif isinstance(defaultValue, (int, long)):
                 value = self.dyna_Int(i, defaultValue)
                 kwargs[name] = value

     func(**kwargs)

前回までのところでデフォルト値を使ってパラメータの種類を文字列か整数か識別してmodoから渡されたValue値から値を取り出して、パラメータ名をキーに「kwargs」の辞書に値を辞書登録した。

そして最後にその辞書オブジェクトに「**」を付けてユーザー定義のファンクションに渡して実行させる。

 func(**kwargs)

これがPythonのオモシロ機能のようで、このように辞書オブジェクトに「**」を付けてファンクションに渡すと、キーを引数名として値を渡すことが出来る。

例えばこんなプログラムを作って実行してみると、

def foo(a,b):
	print 'a=',a,' b=',b

foo(10,20)

dic={'a':200,'b':500}
foo(**dic)

ちゃんとパラメータが渡されている事が確認できる。

# Result: 
a= 10  b= 20
a= 200  b= 500

さらにファンクションの定義の時に引数名の前に「*」と「**」を付けると、可変引数のファンクションが簡単に作れる。「*」を付けたものは引数名を指定しないで値を渡す場合に使えて、渡した値は順にタプルに入る。「**」を付けたものは引数名を指定して値を渡す時に使えて、引数名をキーとした辞書になって渡される。

def foo(*vals,**vars):
	print vals
	print vars

foo(0,100,50,a=10,b=20)

これが実行結果。

# Result: 
(0, 100, 50)
{'a': 10, 'b': 20}

それではまた次回。

modo10ブログ目次



take_z_ultima at 11:30│Comments(0)TrackBack(0)modo | CG

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

Archives