有时,有一个空列表的默认参数似乎很自然。然而Pythonproducesunexpectedbehaviorinthesesituations.例如,如果我有一个函数:defmy_func(working_list=[]):working_list.append("a")print(working_list)第一次调用时,默认会起作用,但之后的调用会更新现有列表(每次调用一个"a")并打印更新的版本。那么,获得我想要的行为的Pythonic方法是什么(每次调用都有一个新列表)? 最佳答案 defmy_func(working_lis
想想我为它的副作用调用的函数,而不是返回值(如打印到屏幕、更新GUI、打印到文件等)。deffun_with_side_effects(x):...sideeffects...returny现在,是不是Pythonic使用列表推导来调用这个函数:[fun_with_side_effects(x)forxinyif(...conditions...)]请注意,我不会将列表保存在任何地方或者我应该这样称呼这个函数:forxiny:if(...conditions...):fun_with_side_effects(x)哪个更好,为什么? 最佳答案
这个问题在这里已经有了答案:Passalisttoafunctiontoactasmultiplearguments[duplicate](3个回答)关闭4年前。这很难看。有什么更Pythonic的方式来做到这一点?importdatetimet=(2010,10,2,11,4,0,2,41,0)dt=datetime.datetime(t[0],t[1],t[2],t[3],t[4],t[5],t[6]) 最佳答案 通常,您可以使用func(*tuple)语法。您甚至可以传递元组的一部分,这看起来就像您在这里尝试做的那样:t=(2
给定一个任意python对象,确定它是否是数字的最佳方法是什么?这里的is被定义为在某些情况下就像一个数字。例如,假设您正在编写一个矢量类。如果给定另一个向量,您想要找到点积。如果给定一个标量,您希望缩放整个向量。检查某些东西是否是int、float、long、bool很烦人,并且不包括用户-定义的对象可能像数字一样。但是,例如,检查__mul__还不够好,因为我刚刚描述的向量类将定义__mul__,但它不会是我所说的那种数字想要。 最佳答案 使用Number来自numbers用于测试isinstance(n,Number)的模块(
我有一个Python列表,我想检查是否有任何元素为负数。是否有一个简单的函数或语法可用于对所有元素应用“是否为负”检查,并查看其中是否有任何元素是否为负?我查看了documentation并且找不到类似的东西。我能想到的最好的方法是:if(Truein[t我觉得这很不雅。有没有更好的方法在Python中做到这一点?这里的现有答案使用内置函数any进行迭代。见HowdoPython'sanyandallfunctionswork?对于any及其对应部分的解释,all.如果您要检查的条件是“在另一个容器中找到”,请参阅Howtocheckifoneofthefollowingitemsis
将两个字符串连接在一起的最Pythonic方式是什么?例如:输入:u='ABCDEFGHIJKLMNOPQRSTUVWXYZ'l='abcdefghijklmnopqrstuvwxyz'输出:'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz' 最佳答案 对我来说,最Pythonic*的方式是以下几乎做同样的事情,但使用+运算符连接每个字符串中的各个字符:res="".join(i+jfori,jinzip(u,l))print(res)#'AaBbCcDdEeFfGgHhIi
我知道pprintpython标准库是用于pretty-printpython数据类型的。但是,我总是在检索json数据,我想知道是否有任何简单快捷的方法可以漂亮地打印json数据?没有漂亮的打印:importrequestsr=requests.get('http://server.com/api/2/....')r.json()打印精美:>>>importrequests>>>frompprintimportpprint>>>r=requests.get('http://server.com/api/2/....')>>>pprint(r.json())
我想知道对for循环中的最后一个元素进行特殊处理的最佳方式(更紧凑和“pythonic”方式)。有一段代码应该只在在元素之间调用,在最后一个被禁止。这是我目前的做法:fori,datainenumerate(data_list):code_that_is_done_for_every_elementifi!=len(data_list)-1:code_that_is_done_between_elements有没有更好的办法?注意:我不想通过诸如使用reduce之类的技巧来实现它。;) 最佳答案 在大多数情况下,将第一次迭代作为特例
我这样做是这样的:defset_property(property,value):defget_property(property):或object.property=valuevalue=object.property我是Python的新手,所以我仍在探索语法,我希望得到一些关于这样做的建议。 最佳答案 试试这个:PythonProperty示例代码为:classC(object):def__init__(self):self._x=None@propertydefx(self):"""I'mthe'x'property."""p
如果我想要一个列表中的最大值,我可以写max(List),但是如果我还需要最大值的索引呢?我可以这样写:maximum=0fori,valueinenumerate(List):ifvalue>maximum:maximum=valueindex=i但这对我来说看起来很乏味。如果我写:List.index(max(List))然后它会迭代列表两次。有没有更好的办法? 最佳答案 我认为接受的答案很好,但你为什么不明确地做呢?我觉得更多人会理解你的代码,这与PEP8一致:max_value=max(my_list)max_index=m