免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 17811 | 回复: 12
打印 上一主题 下一主题

字符串中的变量问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-28 15:53 |只看该作者 |倒序浏览
var1="abc"
var2="def"

想要实现类似
var = '''
this is var1 $var1,
this is var2 $var2
'''

这个在python中如何写比较好看?

论坛徽章:
0
2 [报告]
发表于 2010-06-28 16:29 |只看该作者
var = '''
this is var1 %s,
this is var2 %s
''' % (var1, var2)

论坛徽章:
0
3 [报告]
发表于 2010-06-28 16:49 |只看该作者
本帖最后由 iamkey9 于 2010-06-28 16:54 编辑

回复 2# t6760915


    谢谢,这个如果varX 多了以后读起来比较麻烦,python中有没有类似shell 中的eval?


btw:

找到一个非标准的:

http://blog.leaanthony.com/?p=85

#!/usr/bin/python

import re, sys

p = re.compile(”\|[\w]+\|”)

def S(text):
result = text
a = p.findall(text)
for i in a:
result = result.replace(i, str(sys._getframe(1).f_locals[i[1:-1]]))
return result

a = 3
b = 4.3
c = “string”

print S(”integer: |a|, float: |b|, string: |c|”)

论坛徽章:
0
4 [报告]
发表于 2010-06-28 18:15 |只看该作者
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'

论坛徽章:
0
5 [报告]
发表于 2010-06-28 19:16 |只看该作者
回复  t6760915


    谢谢,这个如果varX 多了以后读起来比较麻烦,python中有没有类似shell 中的eval ...
iamkey9 发表于 2010-06-28 16:49


费这个劲。
  1. var1="abc"
  2. var2="def"
  3. var = ('this is var1 %s' % var1,
  4.            'this is var2 %s' % var2  )
  5. print var
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-06-29 09:12 |只看该作者
我感觉你这些变量输入太多的话你可以把他们放在一个字典里面,采用这样的方法生成结果。
  1. >>> dict = {}
  2. >>> dict['key1'] = 'val1'
  3. >>> dict['key2'] = 'val2'
  4. >>> dict['key3'] = 'val3'
  5. >>> list = sorted(dict.items(), key=lambda x:x[0], reverse=False)
  6. >>> list = ['this is %s %s' % (i[0],i[1]) for i in list]
  7. >>> result = ',\n'.join(list)
  8. >>> print result
  9. this is key1 val1,
  10. this is key2 val2,
  11. this is key3 val3
  12. >>>
复制代码

论坛徽章:
0
7 [报告]
发表于 2010-06-29 09:33 |只看该作者
回复 6# t6760915
不用那么费劲,字符串格式化就可以.varX多了不好看清楚,放在列表或者元组里写成多行就行了.

var1="abc"
var2="def"
var = ('this is var1 %s' % var1,
          'this is var2 %s' % var2 )

print  '\n'.join(var)

论坛徽章:
0
8 [报告]
发表于 2010-06-29 15:04 |只看该作者
本帖最后由 iamkey9 于 2010-06-29 15:05 编辑
回复  t6760915
不用那么费劲,字符串格式化就可以.varX多了不好看清楚,放在列表或者元组里写成多行就行了 ...
luffy.deng 发表于 2010-06-29 09:33



谢谢, 这个很接近我要的了, 说说我的具体需求:

譬如在python中要写个 简单的SQL去执行,shell中,大概可以写成

"
SELECT abc FROM $tablename
WHERE $field1 = $var1 AND $field2 = $var2
"
eval一下就可以了 ,可读性比较好,但是在python中,就没有这么直观,最早想到的是用 + 把字符串起来,但是很难看,所以才有想法要找个简单一点的。

论坛徽章:
0
9 [报告]
发表于 2010-06-29 16:08 |只看该作者
回复 8# iamkey9
我能想到的是写成这样,但是也很难看.
var = ('SELECT abc FROM',tablename ,
           'WHERE ',field1, '=', var1,'AND', field2, '=' ,var2 )
print '   '.join(var)

论坛徽章:
0
10 [报告]
发表于 2010-06-29 16:21 |只看该作者
  1. >>> req="SELECT abc FROM {tablename} WHERE {field1} = {var1!r} AND {field2} = {var2}"
  2. >>> req.format(tablename='Table1',field1='Name',var1='Tom',field2='Age',var2='18')
  3. "SELECT abc FROM Table1 WHERE Name = 'Tom' AND Age = 18"
复制代码
单纯为了可读性么。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP