python - Python中'+'字符串运算符的解释
问题描述
这是尝试不同列表操作的 Python 代码。我不明白。有人可以cmd+="("+",".join(arg)+")"
从下面的代码中解释表达式中的 + 运算符吗?
n = int(raw_input())
l=[]
for _ in range(n):
s=raw_input().split()
cmd=s[0]
arg=s[1:]
if cmd!='print':
cmd+="("+",".join(arg)+")"
eval("l."+cmd)
else:
print l
输入:
insert 0 5
insert 1 10
insert 0 6
print
解决方案
如果运算符的两边+
都是字符串,则运算符进行连接。也就是"foo" + "bar"
变成"foobar"
。
在您显示的代码中,有一大堆不同的连接。首先,将一些括号连接到从返回的字符串的两端str.join
(将逗号放在 中的字符串之间args
),然后将整个内容连接到cmd
字符串的末尾。cmd
最后,l.
在评估之前将所有内容连接起来。
因此,对于您的示例输入insert 0 5
,cmd
开始为"insert"
,args
开始为列表["0", "5"]
。您首先创建"0, 5"
from join
,然后将括号连接到 get"(0, 5)"
然后连接到cmd
get上"insert(0, 5)"
,最后连接到"l.insert(0, 5)"
.
正如kojiro评论的那样,使用字符串格式而不是连接会使这更清楚。您可以使用多种格式化方法。最适合您的方法可能是该str.format
方法(可以追溯到 Python 2.6,尽管您应该真正考虑升级到 Python 3,因为 Python 2 现在已经过了其生命周期结束日期):
s=raw_input().split()
cmd=s[0]
arg=s[1:]
if cmd!='print':
formatted = "l.{0}({1})".format(cmd, ",".join(rest))
eval(formatted)
else:
print l
推荐阅读
- symfony - Symfony 4.4 MoneyType 和 Safari 浏览器
- wordpress - JavaScript 无法在 WordPress 中按 ID 选择 DOM 元素
- java - 如何使用 javax 邮件从电子邮件内容中获取“HREF”链接?
- ctags - 是否有任何可以以编程方式使用的 cscope 或 ctags API?
- vba - 如何将 VBA 用户窗体数据传输到访问数据库?
- r - 关于使用 outputUI 进行闪亮的分支处理
- reactjs - 如何在反应中从 URL 获取页面标题
- kdb - 累加器给出不同的结果然后直接应用函数
- vue.js - 使用修饰符 Vuetify v-data-table 行单击事件
- python - PDF阅读,返回空行