下面的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
答案 0 :(得分:1)
这是非常丑陋的代码。 <{1>}作为第一个输入无效;首先,你必须说明你想要使用这种怪物的次数,例如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
。好吧,我们从第(2)点已经知道elif choice in choices: eval("l." + choices[choice].format(*cmds))
对应choice == 3
。 "{}({}, {})"
用于元组解包...它将(*cmds))
解包为大括号中的字符串,给出(input, 0, 6)
。"insert(0, 6)"
并执行。答案 1 :(得分:1)
此功能允许用户输入在列表上工作的方法作为原始输入。然后它创建一个字符串,它是一个有效的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))