[Python 语法] 询问在 String 中关于 % 的用法(找不到相关文档)

2016 年 1 月 25 日
 terence4444
请问以下的用法相关文档可以在哪里找到?我想知道是否关于 % 还有其它用法。

string1 = 'string replace %s'
string2 = 'abcdefg'
string3 = string1 % string2
>> string3 == 'string replace abcdefg'

谢谢
5109 次点击
所在节点    Python
36 条回复
zk8802
2016 年 1 月 25 日
terence4444
2016 年 1 月 25 日
@zk8802 感谢,连页面 tag 都打好了,太贴心 :)
ethego
2016 年 1 月 25 日
建议使用 format 方法,%什么的估计只有写 c 的转 python 才会用。"{0}, {1}{2}".format("hello", "world", 1) >>> "hello, world1"
terence4444
2016 年 1 月 25 日
@ethego 感谢,我在文档中看到这个写法和 format 写法等同的,我本来要写动态 SQL 用的……

sql_cause = "replace into tabls(%(fields)s) values(%(values)s) "
params = {'fields': 'f1,f2,f3', 'values': 'v1,v2,v3'}
sql_cause = sql_cause % params

用 format 应该可以等同为(还没测):
"replace into tabls({0}) values({1}) ".format('f1,f2,f3', 'v1,v2,v3')

Python 推荐用第二种吗?
ethego
2016 年 1 月 25 日
@terence4444 推荐第二种,比第一种更加简洁明了,还不用考虑类型的问题
ethego
2016 年 1 月 25 日
@terence4444 写 sql 拼接字符串,小心 sql 注入
terence4444
2016 年 1 月 25 日
@ethego 谢谢提醒
这个是我自己跑定时任务抓东西用的, field 和 value 都是固定写死的几个字段的排列组合(抓到某个值就写上字段和值,没有抓到的就跳过不更新)
没有用户输入,应该没有关系吧…… 有用户输入的肯定会 encode 一下的。
qihboy
2016 年 1 月 25 日
% 是 python 的表达式
.format 是方法,现在推荐用 format 而已
vmebeh
2016 年 1 月 25 日
拼接 sql 语句不安全,用 ? 占位, tuple 传值


https://docs.python.org/2/library/sqlite3.html

```# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)

# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
```
fy
2016 年 1 月 25 日
@qihboy 咦,请问 python 推荐用 format ,有出处吗?
一直在用 %s 来输出全部类型……
necomancer
2016 年 1 月 26 日
RqPS6rhmP3Nyn3Tm
2016 年 1 月 26 日
写了这么久第一次知道还有 format 写法,果然写 C 写习惯了……
guoqiao
2016 年 1 月 26 日
@ethego 还可以更简单:

"{}, {}{}".format("hello", "world", 1) >>> "hello, world1"
leavic
2016 年 1 月 26 日
习惯了 format 写法,我都快忘记%方法怎么写了
clockwerk
2016 年 1 月 26 日
习惯了%,不知道耗能 format
qihboy
2016 年 1 月 26 日
@fy https://docs.python.org/2/library/stdtypes.html#str.format

This method of string formatting is the new standard in Python 3, and should be preferred to the % formatting described in String Formatting Operations in new code.

New in version 2.6.
Karblue
2016 年 1 月 26 日
%写法写起来更快 。 format 都懒得敲
huangfs
2016 年 1 月 26 日
也是习惯%
TheCure
2016 年 1 月 26 日
这东西叫占位符
要是你知道这叫占位符,搜起来就很快了
pynix
2016 年 1 月 26 日
字符串插值, format 是 Java 那边搞过来的,有点背道而驰。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/253341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX