有没有一种简单的方法来压缩列表理解的迭代列表,或者失败了,你认为什么是平坦化这样一个浅表的最好方法,平衡性能和可读性? 我试图用嵌套的列表理解来压缩这样一个列表,如下所示: [image for image in menuitem for menuitem in list_of_menuitems] 但是我遇到了NameErrortypes的麻烦,因为name 'menuitem' is not defined 。 谷歌search和环顾堆栈溢出后,我得到了期望的结果与reduce声明: reduce(list.__add__, map(lambda x: list(x), list_of_menuitems)) 但是这个方法是相当不可读的,因为我需要那个list(x)调用,因为x是一个Django QuerySet对象。 结论 : 感谢所有对这个问题作出贡献的人。 这是我学到的东西的总结。 如果其他人希望添加或更正这些观察结果,我也将其作为社区wiki。 我原来的减less陈述是多余的,最好这样写: >>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems)) 这是嵌套列表理解(Brilliant summary dF !)的正确语法: >>> [image for mi in list_of_menuitems for image in mi] 但是这些方法都不如itertools.chain高效: >>> from […]
我的代码是: from Tkinter import * admin = Tk() def button(an): print an print 'het' b = Button(admin, text='as', command=button('hey')) b.pack() mainloop() button不起作用,它会在没有我的命令的情况下打印“hey”和“het”,然后,当我按下button时,什么都不会发生。
有没有一个内置的从Python的列表中删除重复,同时保持秩序? 我知道我可以使用一组来删除重复,但是破坏了原来的顺序。 我也知道我可以像这样推出我自己的: def uniq(input): output = [] for x in input: if x not in output: output.append(x) return output (感谢解放这个代码示例 。) 但是,如果可能的话,我想利用一个内置的或更多的Pythonic成语。 相关问题: 在Python中,从列表中删除重复项的最快algorithm是什么,以便所有元素都是唯一的, 同时保持顺序 ?
我正在使用下面的类来轻松存储我的歌曲的数据。 class Song: """The class to store the details of each song""" attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: exec 'self.%s=None'%(att.lower()) in locals() def setDetail(self, key, val): if key in self.attsToStore: exec 'self.%s=val'%(key.lower()) in locals() 我觉得这比写出一个if/else块更具有可扩展性。 但是, eval似乎被认为是不好的做法,并且不安全。 如果是这样,谁能向我解释为什么,并给我一个更好的方式来定义上面的类?
我试图安装Python包德威 : pip install dulwich 但是我得到一个神秘的错误消息: error: Unable to find vcvarsall.bat 如果我尝试手动安装包,也会发生同样的情况: > python setup.py install running build_ext building 'dulwich._objects' extension error: Unable to find vcvarsall.bat
我想彻底澄清这一点。 有人可以解释在Python中的对象的名称之前有下划线的确切含义吗? 还要解释一个单独的和一个双重的下划线之间的区别。 另外,不pipe这个对象是一个variables,一个函数,一个方法等,这个意义是否保持不变?
Python中self单词的目的是什么? 我明白它是指从该类创build的特定对象,但我不明白为什么它明确需要作为参数添加到每个函数。 为了说明,在Ruby中我可以这样做: class myClass def myFunc(name) @name = name end end 我很明白,很容易。 但是在Python中我需要包含self : class myClass: def myFunc(self, name): self.name = name 任何人都可以通过这个说话吗? 这并不是我在我的(当然是有限的)经验中遇到的。
Python __str__和__repr__什么区别?
我正在写一个安全系统,拒绝未经授权的用户访问。 import sys print("Hello. Please enter your name:") name = sys.stdin.readline().strip() if name == "Kevin" or "Jon" or "Inbar": print("Access granted.") else: print("Access denied.") 它按预期授予授权用户的访问权限,但也允许未经授权的用户使用! Hello. Please enter your name: Bob Access granted. 为什么会发生? 我明白表示,只有当name等于Kevin,Jon或Inbar时才允许访问。 我也尝试了相反的逻辑, if "Kevin" or "Jon" or "Inbar" == name ,但结果是一样的。
是否有可能终止一个正在运行的线程没有设置/检查任何标志/信号/等?