下面几行 python 代码片段,需要解释一下。
For the few lines of below python code snippet, need explanation.
以下python代码用于执行列表上的附加、排序、打印等操作L
。我正在分析代码,但无法理解代码中的几行。
l = []#declare the list
choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}#dicationary declaration
for _ in range(int(raw_input())): #prompt for user input and iterate
cmds = raw_input().split(" ") #get the operation that needs to be performed on the list
choice = str(len(cmds)) #get the length
if cmds[0] == "print": print l #print the list
elif choice in choices: eval("l." + choices[choice].format(*cmds))
字典声明,choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}
有方括号和括号,我无法理解其意义。最后一行elif choice in choices: eval("l." + choices[choice].format(*cmds))
似乎很神秘因为
eval
函数,用于执行 Python 代码。
- 字符串函数
format
这似乎与
添加符号 *
.
输入格式如下
insert 0 6
print
remove 6
append 9
这真是丑陋的代码。 insert 0 6
作为 第一个 输入是无效的;首先,你必须说明你想使用这个怪物多少次,例如1
.
然后:
- 输入
insert 0 6
包含三个参数。 cmds = raw_input.split(" ")
和 choice = str(len(cmds))
然后计算出您向代码传递了三个 (3
) 参数。
然后使用数字 3
从 choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}
返回适当的格式字符串。在这种情况下; "{}({}, {})"
我们没有要求print
,我们要求insert
,所以if cmds[0] == "print": print l
是False
,我们跳过它。
- 这意味着我们必须评估
elif choice in choices: eval("l." + choices[choice].format(*cmds))
。那么,我们已经从第(2)点知道choice == 3
对应于"{}({}, {})"
。 (*cmds))
用于元组解包...它将 (input, 0, 6)
解包到花括号处的字符串中,给出 "insert(0, 6)"
.
- 然后我们将 (4) 末尾的字符串连接起来,得到 "l.insert(0, 6)" 作为字符串。然后传递给
eval
并执行。
此函数允许用户输入在列表上工作的方法作为原始输入。然后它创建一个字符串,该字符串是 python 代码的有效行,并在列表中对其进行评估。
choices
字典包含用于构造将被评估的行的格式字符串。方括号 {}
将替换为 .format
调用中输入列表中的项目。圆括号 ()
是用来使其成为 python 中的正确函数调用的圆括号。
如果您将 eval
替换为 print
,您将确切地看到替换后命令的样子。
另请注意,此代码仅适用于 Python 2,对于 Python 3 您需要使用:
l = []#declare the list
choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}#dicationary declaration
for _ in range(int(input())): #prompt for user input and iterate
cmds = input().split(" ") #get the operation that needs to be performed on the list
choice = str(len(cmds)) #get the length
if cmds[0] == "print": print(l) #print the list
elif choice in choices: eval("l." + choices[choice].format(*cmds))
以下python代码用于执行列表上的附加、排序、打印等操作L
。我正在分析代码,但无法理解代码中的几行。
l = []#declare the list
choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}#dicationary declaration
for _ in range(int(raw_input())): #prompt for user input and iterate
cmds = raw_input().split(" ") #get the operation that needs to be performed on the list
choice = str(len(cmds)) #get the length
if cmds[0] == "print": print l #print the list
elif choice in choices: eval("l." + choices[choice].format(*cmds))
字典声明,choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}
有方括号和括号,我无法理解其意义。最后一行elif choice in choices: eval("l." + choices[choice].format(*cmds))
似乎很神秘因为
eval
函数,用于执行 Python 代码。- 字符串函数
format
这似乎与 添加符号*
.
输入格式如下
insert 0 6
print
remove 6
append 9
这真是丑陋的代码。 insert 0 6
作为 第一个 输入是无效的;首先,你必须说明你想使用这个怪物多少次,例如1
.
然后:
- 输入
insert 0 6
包含三个参数。cmds = raw_input.split(" ")
和choice = str(len(cmds))
然后计算出您向代码传递了三个 (3
) 参数。 然后使用数字
3
从choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}
返回适当的格式字符串。在这种情况下;"{}({}, {})"
我们没有要求
print
,我们要求insert
,所以if cmds[0] == "print": print l
是False
,我们跳过它。- 这意味着我们必须评估
elif choice in choices: eval("l." + choices[choice].format(*cmds))
。那么,我们已经从第(2)点知道choice == 3
对应于"{}({}, {})"
。(*cmds))
用于元组解包...它将(input, 0, 6)
解包到花括号处的字符串中,给出"insert(0, 6)"
. - 然后我们将 (4) 末尾的字符串连接起来,得到 "l.insert(0, 6)" 作为字符串。然后传递给
eval
并执行。
此函数允许用户输入在列表上工作的方法作为原始输入。然后它创建一个字符串,该字符串是 python 代码的有效行,并在列表中对其进行评估。
choices
字典包含用于构造将被评估的行的格式字符串。方括号 {}
将替换为 .format
调用中输入列表中的项目。圆括号 ()
是用来使其成为 python 中的正确函数调用的圆括号。
如果您将 eval
替换为 print
,您将确切地看到替换后命令的样子。
另请注意,此代码仅适用于 Python 2,对于 Python 3 您需要使用:
l = []#declare the list
choices = {"0": "", "1": "{}()", "2": "{}({})", "3": "{}({}, {})"}#dicationary declaration
for _ in range(int(input())): #prompt for user input and iterate
cmds = input().split(" ") #get the operation that needs to be performed on the list
choice = str(len(cmds)) #get the length
if cmds[0] == "print": print(l) #print the list
elif choice in choices: eval("l." + choices[choice].format(*cmds))