TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 5264|回复: 3
打印 上一主题 下一主题

[其他代码] 整行效果的寫法 [复制链接]

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2012-8-28 17:16:51 |显示全部楼层 |倒序浏览
游風要的例子 填完坑 差點忘了
預覽見ass    test.ass (13.31 KB, 下载次数: 2855)

不是怎麼建議這麼寫 效果也相對很有局限性
如果想實現同樣的效果 還是建議分字算距離
不過作為文字列操作的方法 倒是可以借鑒一下
一般來說這種自由度比較高的寫法 用user函數來寫
不過自從囧過滑頭鬼ED後,我發現main其實更方便
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _KTF
  4.     global _TXTF
  5.     global _SKF
  6.     _KTF          = GetVal(val_KarTime)
  7.     _TXTF         = GetVal(val_Text)
  8.     _SKF          = GetVal(val_KarTimeDiff)

  9. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):

  10.     ASS_BUF  = []                # 保存ASS特效

  11.     if _j== 0:
  12.         EFT =  ''.join( '{\\r'+t(_SKF[_i][k]*10,_SKF[_i][k]*10+15,fsc(180,180))+t(_SKF[_i][k]*10+100,(_SKF[_i][k]+_KTF[_i][k])*10,fsc(100,100))+ '}'+_TXTF[_i][k]  for k in range(_n))
  13.         ass_main(ASS_BUF, SubL(_BT, _ET),an(2)+pos(640,360)+fad(150,150),EFT)

  14.     return (ASS_BUF,None)
复制代码
1

查看全部评分

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2013-9-18 22:18:03 |显示全部楼层
yyxxlc 发表于 2013-9-18 20:14
sai大!我想问下~为什么不可以写成:我试了下把循环放在上面,但是输出来的结果的确不太正常,今天我几乎翻 ...

放前面放後面本質上沒什麽區別 只是我懶。。。
另外文本好長 我也懶得讀(w
總之for寫前面的話 我一般是這麼寫
  1.         EFT = ''
  2.         for k in range(_n):
  3.             EFT +=  '{\\r'+t(_SKF[_i][k]*10,_SKF[_i][k]*10+15,fsc(180,180))+t(_SKF[_i][k]*10+100,(_SKF[_i][k]+_KTF[_i][k])*10,fsc(100,100))+ '}'+_TXTF[_i][k]
  4.         ass_main(ASS_BUF, SubL(_BT, _ET),an(2)+pos(640,360)+fad(150,150),EFT)
复制代码
感覺沒什麼好深究只是一個寫法
找了一篇關於這個的 可以參考
http://descriptor.blogspot.jp/2008/11/python-idiom-join.html

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2013-9-18 22:47:28 |显示全部楼层
那轉一下吧
原文:http://descriptor.blogspot.jp/2008/11/python-idiom-join.html


如果要將一個 list 中的所有字串接起來 ,一般的做法是
  1. items = ['red', 'blue', 'green', 'yellow']

  2. result = ''
  3. for s in items:
  4.     result += s
复制代码
Python 提供了一個更有效率的解法
  1. result = ''.join(items)
复制代码


如果字串中間要用逗號跟空白做分隔時,只要改成
  1. result = ', '.join(items)
复制代码

單括號內的字串就是隔開 items 元素的分隔物, 所以如果單括號內是空的,就表示沒有分隔物。
底下介紹上述技巧的應用
  1. colors = ['red', 'blue', 'green', 'yellow']
  2. print 'Choose', ', '.join(colors[:-1]), 'or', colors[-1]
复制代码

會傳回一個 list 包含 colors 內的所有元素除了最後一個, 而 colors[-1] 代表 colors 的最後一個元素。
所以執行上面的程式碼會顯示
  1. Choose red, blue, green or yellow
复制代码

假設在把字串接起來之前,想要對字串做一些處理, 比方說轉成大寫,一般的想法是
  1. items = ''
  2. for c in colors:
  3.      items += c.upper()
复制代码

有了 join 之後,也是一行就可完成
  1. items = ''.join(c.upper() for c in colors)
复制代码

眼尖的人會發現上面一行還用了 list comprehensions

PS. Python 的創造者 Guido van Rossum 寫過一篇 最佳化軼事 內容與字串相關,值得一讀。





Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

地板
发表于 2013-9-18 23:13:00 |显示全部楼层
yyxxlc 发表于 2013-9-18 22:51
sai大 果然是天使!  谢谢啦  中秋快乐~兔美君会一直保佑您的!

兎美君是誰?
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-4 00:03

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH