jjzjj

Pythonic

全部标签

python - 将参数传递给函数的 pythonic 方式是什么?

我正在做一个项目,几乎所有的参数都是按键传递的。有些函数只有位置参数,有关键字(默认值)参数或两者的混合。例如下面的函数:defcomplete_task(activity_task,message=None,data=None):pass当前代码中的这个函数会这样调用:complete_task(activity_task=activity_task,message="Mymassage",data=task_data)对我来说,命名参数是没有意义的,其名称在函数执行的上下文/变量名称中是显而易见的。我会这样调用它:complete_task(activity_task,"Mymes

python - 在编写 JSON 时防止循环的 pythonic 方法是什么?

我有两个类A和B,每个类都在列表中存储对另一个类的对象的引用:classA:def__init__(self,name):self.name=nameself.my_Bs=[]defregisterB(self,b):self.my_Bs.append(b)classB:def__init__(self,name):self.name=nameself.my_As=[]defregisterA(self,a):self.my_As.append(a)现在,我的应用构建了两个列表,一个是A的对象,一个是B的对象,具有交叉引用。#alistofAs,alistofBslist_of_As=

切出部分 numpy 数组的 Pythonic 方式

假设您有以下numpy数组,>>>x=numpy.array([0,1,2,3,4,5,6,7,8,9,10])并且您想提取一个仅包含前三(3)个和后四(4)个元素的新numpy数组,即,>>>y=x[something]>>>printy[01278910]这可能吗?我知道要提取前三个数字只需执行x[:3]并提取后四个数字只需执行x[-4:],但是是否有在一个简单的切片中提取所有这些的简单方法?我知道这可以通过附加两个调用来完成,>>>y=numpy.append(x[:3],x[-4:])但我想知道是否有一些简单的小技巧可以以更直接的pythonic方式完成它,而不必再次引用x(即

oop - 这是 isinstance pythonic/"good"的使用吗?

this的副作用问题是我被引导到thispost,其中指出:Wheneverisinstanceisused,controlflowforks;onetypeofobjectgoesdownonecodepath,andothertypesofobjectgodowntheother---eveniftheyimplementthesameinterface!并暗示这是一件坏事。但是,我以前使用过这样的代码,我认为这是面向对象的方式。类似于以下内容:classMyTime(object):def__init__(self,h=0,m=0,s=0):self.h=0self.m=0sel

在列表理解中使用第二个条件的 Pythonic 方式

让我们假设以下函数:defmyfun(my_list,n,par1=''):ifpar1=='':new_list=[[my_fun2(i,j)forjinrange(n)]foriinrange(n)]else:new_list=[[my_fun2(i,j)forjinrange(n)]foriinrange(n)ifmy_fun2(i,n)==par1]returnnew_list如您所见,根据par1,有两种不同的场景。我不喜欢第3行和第5行几乎相同并且不遵循DRY(不要重复自己)原则。如何改进此代码? 最佳答案 这可能有效:

python - 使用迭代器的最快(最 Pythonic)方式

我很好奇使用迭代器最快的方式是什么,并且是最Pythonic的方式。例如,假设我想用map内置函数创建一个迭代器,它会累积一些东西作为副作用。我实际上并不关心map的结果,只关心副作用,所以我想以尽可能少的开销或样板来完成迭代。像这样的东西:my_set=set()my_map=map(lambdax,y:my_set.add((x,y)),my_x,my_y)在这个例子中,我只是想通过迭代器来积累my_set中的东西,而my_set只是一个空集,直到我真正运行我的map。像这样的东西:for_inmy_map:pass或裸体[_for_inmy_map]有效,但它们都感觉笨拙。是否有

python - 一种更 pythonic 的迭代列表的方式,同时在每次迭代中排除一个元素

我有以下代码:items=["one","two","three"]foriinrange(0,len(items)):forindex,elementinenumerate(items):ifindex!=i:#dosomethingwithelement基本上我想排除每个元素一次并迭代其余部分。因此,对于上面的列表,我想要以下迭代:“二”、“三”“一”、“三”“一”、“二”我现在写的代码有点像C++,有没有更好的解决方案?(我不想将所有可能的列表保存在一个变量中)编辑:我没有说明这一点,但列表大小不一定是3。它可以是任何大小。编辑2:似乎还有另一个误解:如果我有N个列表,那么我想要

python - 计算列表中元素出现次数的 pythonic 方法是什么?

这就是我做的。在python中有更好的方法吗?forkina_list:ifkvMap.has_key(k):kvMap[k]=kvMap[k]+1else:kvMap[k]=1谢谢 最佳答案 使用默认字典fromcollectionsimportdefaultdictkvmap=defaultdict(int)forkina_list:kvmap[k]+=1 关于python-计算列表中元素出现次数的pythonic方法是什么?,我们在StackOverflow上找到一个类似的问题:

python - 跳过标题行的更多pythonic方式

是否有更短的(可能更像pythonic)打开文本文件并阅读以注释字符开头的行的方法?换句话说,这是一种更简洁的方式fin=open("data.txt")line=fin.readline()whileline.startswith("#"):line=fin.readline() 最佳答案 在我学习Python的这个阶段,我发现这个最Pythonic:defiscomment(s):returns.startswith('#')fromitertoolsimportdropwhilewithopen(filename,'r')as

有效处理可变数量的返回参数的 Pythonic 方法

所以我有一个函数可以安静地或冗长地工作。在安静模式下,它会产生一个输出。在详细模式下,它还将中间计算保存到列表中,尽管这样做本身需要额外的计算。在你问之前,是的,这是一个确定的优化瓶颈,很少需要详细的输出,所以这很好。所以问题是,有效处理可能会或可能不会返回第二个值的函数的最pythonic方法是什么?我怀疑pythonic方式将被命名为元组或字典输出,例如deff(x,verbose=False):result=0verbosity=[]for_inx:foo=#somethingquicktocalculateresult+=fooifverbose:verbosity+=#som