■
以前から気になっていたfunctoolsを調べてみようと思います。
間違っていたら遠慮なく教えてください!
●functool
http://www.doughellmann.com/PyMOTW-ja/functools/
http://www.python.jp/doc/nightly/library/functools.html
import functools
fp = functools.partial
partialってなんだ〜ということでピックアップ!
from functools import partial
basetwo = partial(int, base=2)
basetwo.__doc__ = 'Convert base 2 string to an int.'
basetwo('10010')
18
from functools import partial
functoolsのpartialをインポートします。
basetwo = partial(int, base=2)
partialという関数でint型の基礎数が2のオブジェクトをbasetwoに代入します。
basetwo.__doc__ = 'Convert base 2 string to an int.'
basetwoのドキュメントつまり説明のようなもの__doc__に'Convert base 2 string to an int.'を代入します。
basetwo('10010')
18
functools.partialを使ってMAYAでUIを作成した場合、以下のようにコントロール(以下の文ではbuttonになります。)によくコマンドを設定し、
文字列で関数を指定してあげることがよくあります。
cmds.window()
cmds.button( l='test', c='test()' )
cmds.showWindow()
この場合文字列で関数を示すだけなので、メモリ使用した後開放されます。
しかし、関数の場所をきちんと定義してあげないとエラーになったりします。
でも後々便利な点があったり、書き方次第で改善されるようです。
import functools
fp = functools.partial
cmds.window()
cmds.button( l='test', c=fp(self.test) )
cmds.showWindow()
コマンドをfunctools.partialで定義すると直接関数をつかむので正確な場所まで定義しなくてもスクリプトが通るようになります。
その度にメモリがその情報を持っているのでUIなり関数なり。。。使用しているものが消えない限りメモリは開放しないようです
なので、何万回とか実行する場合は気をつけないといけないみたいです。
でも、何万回とか実行するとか同じUIをずっと使い続けたりすることはあまりないと思うので気にしなくてもいいそうです。
関数の場所が変わってもある程度は気にしなくても通るので、かなり便利ですね。
また、ついでに__doc__について調べてみました。
__doc__は変数の説明、ヘルプを宣言することができます。
説明を設定している関数に__doc__をつけるとその関数の説明が見ることが出来ます。
例
import maya.cmds as cmds
def test():
'''aaaaaa'''
test.__doc__# Result: aaaaaa #
よく見かける上の文はこうゆう事をやっていたんですね〜。