Python備忘録2 文字列の扱い、リスト・辞書の展開追記

    ■辞書の展開 追記

     前回の記事でlist型の前に*を入れると配列を展開した状態でMayaのコマンドに渡せると言いました。
     こんな感じですね。
    import maya.cmds
    pos = mc.pointPosition( 'pCube1.vtx[0]', w=True )
    mc.setAttr( 'pCube1', *pos )


     ところが、同じような事をmoveコマンドでやると怒られるようです。
    import maya.cmds
    pos = mc.pointPosition( 'pCube1.vtx[0]', w=True )
    mc.move( *pos, 'pCube1.translate', rpr=True )
    # Error: SyntaxError: line 3 of (  File "", line 4): only named arguments may follow *expression (, line 4) # 
     よく考えてみると当たり前なんですが、これはmoveコマンドが最初に4つ以上の配列[xpos, ypos, zpos, nodename1...]をとるからなんですね。
     なので変数posにノードの名前を追加してから実行するといけるようになりました。
    import maya.cmds
    pos = mc.pointPosition( 'pCube1.vtx[0]', w=True )
    pos.append( 'pCube1' )
    mc.move( *pos, rpr=True )
    

     同じような処理に見えても内部の書式は全然違う事が多々ありるので、場合場合によって変えていくしかなさそうです。
     因みに例えばxformコマンドでピボットの位置を変える場合も位置座標を表す3つの値を渡しますが、こちらはリストの展開不要です。
    import maya.cmds
    pos = mc.pointPosition( 'pCube1.vtx[0]', w=True )
    mc.xform( 'pCube1', ws=True, piv=pos )


    ■文字オブジェクトのフォーマット

     文字列の中に%sとかを入れて、その後ろに% 配列とやると%sとかを後ろの配列で置換してくれる便利なフォーマット機能についての小ネタメモ。
    >>>a = 'Eske'
    >>>b = 'Yoshinob'
    >>>print '苗字は%s、名前は%sです。' % (a, b)
    苗字はEske、名前はYoshinobです。
     これは文字オブジェクト(要はstrオブジェクトなど)の中に%~があって、且つそのオブジェクトに後ろに" % 配列"があれば成立します。
     と言うことは変数に文字列を入れても、その変数は文字オブジェクトなので
    >>>a = 'Eske'
    >>>b = 'Yoshinob'
    >>>c = '苗字は%s、名前は%sです。'
    >>>print c % (a, b)
    苗字はEske、名前はYoshinobです。
     と言う事ができると言う事です。
     条件によって%~付きの文字列オブジェクトを変数として作成し、後で呼び出すときに%~の部分を置換する・・・なんて事ができます。
    >>>def introduceMe( language ):
    >>>    if language == 'JP':
    ...        basicExpr = u'苗字は%s、名前は%sです。'
    ...    else:
    ...        basicExpr = 'My last name is %s, and my first name is %s'
    ...    ln, fn = 'Eske', 'Yoshinob'
    ...    print basicExpr % (ln, fn)
    >>>
    >>>introduceMe( 'JP' )
    苗字はEske、名前はYoshinobです。
    >>>
    >>>introduceMe( 'US' )
    My last name is Eske, and my first name is Yoshinob


     これは便利!
    スポンサーサイト

    コメントの投稿

    非公開コメント

    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR