嵌套python列表和字典问题
我是python的初学者。我有一个代码,但我只能理解其中的一部分。。 你能详细解释一下这个问题的最后一行调用命令吗? 还有,为什么我们要在pop()函数中将li:list作为参数传递嵌套python列表和字典问题,python,python-3.x,list,Python,Python 3.x,List,我是python的初学者。我有一个代码,但我只能理解其中的一部分。。 你能详细解释一下这个问题的最后一行调用命令吗? 还有,为什么我们要在pop()函数中将li:list作为参数传递 def insert(ls,params): ls.insert(int(params[0]), int(params[1])) def print_list(ls, params): print(ls) def remove(ls, params): ls.remove(int(par
def insert(ls,params):
ls.insert(int(params[0]), int(params[1]))
def print_list(ls, params):
print(ls)
def remove(ls, params):
ls.remove(int(params[0]))
def append(ls, params):
ls.append(int(params[0]))
def sort_list(ls, params):
ls.sort()
def pop(ls: list, params):
ls.pop()
def reverse(ls, params):
ls.reverse()
commands = {
'insert': insert,
'print': print_list,
'remove': remove,
'append': append,
'sort': sort_list,
'pop': pop,
'reverse': reverse
}
if __name__ == '__main__':
N = int(input())
ls = []
for _ in range(N):
cmd = input().split(' ')
commands[cmd[0]](ls, cmd[1:])
好了,我们开始吧。我首先要说的是,这不是惯用代码,也不是任何精通Python的程序员构造程序的方式。也就是说:分析它是有好处的 反向工作:让我们谈谈 为什么要在pop()函数中将li:list作为参数传递 你说的是我假设这里的函数声明
def pop(ls:list,params):
ls.pop()
这称为函数注释,并记录在案。它们通常被用作类型提示,Python运行时会将它们完全删除。使用或省略函数注释不会改变任何行为
现在是肉和土豆:
你能给我解释一下最后一行吗
cmd=input().split(“”)
命令[cmd[0]](ls,cmd[1:]
这两条线是不可分割的。第一个调用input
,询问用户要运行什么,然后在空格上拆分它以生成字符串列表。例如,这可能是:
#用户输入:追加3 4 5 6 7
cmd==['append','3','4','5','6','7']
然后,下一行获取该列表的第一个元素,并按该名称查找命令,这是一个函数
命令[cmd[0]]
并调用它,将列表本身和用户输入的其余参数作为参数传入
(ls,cmd[1:]
在我的示例中,这将导致一个如下所示的调用:
append(lst,['3','4','5','6','7'])
如果我重写这篇文章,我会质疑它的相关性。看起来很多内部构件都暴露给了用户。如果确信这是必要的,我会使用
list.\uuuu getattribute\uuuu
将方法名与这些方法配对
#替换所有函数定义和“命令”指令:
def get_方法(lst:list,attrname:str):
尝试:
method=lst.\uuuu getattribute\uuuu(属性名)
除属性错误外:
一无所获
然后将命令名从参数中拆分出来,并在调用该方法之前检查该方法是否存在
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
n=int(输入())
lst=[]
对于范围内的u(n):
cmd,*args=input().split(“”)
方法=获取方法(lst,cmd)
如果方法不是无:
方法(*args)
@geekypraveen这是有效的语法,但几乎肯定不是您想要的。这将把命令['append']
重新定义为元组(lst,['3','4','5','6','7'])
而不是函数append
。