尝试了解在python中创建变量或使用表达式哪个更好

尝试了解在python中创建变量或使用表达式哪个更好,python,coding-style,comparison,Python,Coding Style,Comparison,我从一开始就在Python中学习的一个实践是,与尝试在SAS或Fortran中执行相同操作时创建的变量数量相比,减少我创建的变量数量 例如,下面是我今晚编写的一些代码: def idMissingFilings(dEFilings,indexFilings): inBoth=set(indexFilings.keys()).intersection(dEFilings.keys()) missingFromDE=[] for each in inBoth:

我从一开始就在Python中学习的一个实践是,与尝试在SAS或Fortran中执行相同操作时创建的变量数量相比,减少我创建的变量数量

例如,下面是我今晚编写的一些代码:

def idMissingFilings(dEFilings,indexFilings):
    inBoth=set(indexFilings.keys()).intersection(dEFilings.keys())
    missingFromDE=[]
    for each in inBoth:
        if len(dEFilings[each])<len(indexFilings[each]):

            dEtemp=[]
            for filing in dEFilings[each]:
                #dateText=filing.split("\\")[-1].split('-')[0]
                #year=dateText[0:5]
                #month=dateText[5:7]
                #day=dateText[7:]
                #dETemp.append(year+"-"+month+"-"+day+"-"+filing[-2:])    
            dEtemp.append(filing.split('\\')[-1].split('-')[0][1:5]+"-"+filing.split('\\')[-1].split('-')[0][5:7]+"-"+filing.split('\\')[-1].split('-')[0][7:]+"-"+filing[-2:])
            indexTemp=[]
            for infiling in indexFilings[each]:
                indexTemp.append(infiling.split('|')[3]+"-"+infiling[-6:-4])
            tempMissing=set(indexTemp).difference(dEtemp)
            for infiling in indexFilings[each]:
                if infiling.split('|')[3]+"-"+infiling[-6:-4] in tempMissing:
                    missingFromDE.append(infiling)
    return missingFromDE
从历史上看,在Fortran或SAS中,如果我尝试同样的操作,我会将字符串“切片”一次,并为我将在表达式中使用的字符串的每个部分分配一个变量

我经常强迫自己使用表达式,而不是首先解析一个值并使用该值。我这样做的唯一原因是我在模仿别人的代码来学习,但我一直在思考这个问题——我在哪里可以找到一个关于为什么一个比另一个更好的令人信服的讨论

代码将比较驱动器上的一组文档和这些文档的源列表,并检查源文档中的所有文档是否都在驱动器上显示


好的,评论部分更容易阅读,我决定如何回应nosklos的回答是的,把所有的东西都放在表达式中不是更好。请使用变量


使用变量不仅更好,因为您将只执行一次操作,并保存值以供多次使用。主要原因是代码通过这种方式变得更具可读性。如果您将变量命名正确,它将兼作自由隐式文档

是的,把所有的东西都放在表达式中并不是更好。请使用变量


使用变量不仅更好,因为您将只执行一次操作,并保存值以供多次使用。主要原因是代码通过这种方式变得更具可读性。如果您将变量命名正确,它将兼作自由隐式文档

使用更多变量。Python以其可读性而闻名;去掉这一特性称之为非“Pythonic”(参见)。可读性更强的代码将更容易被他人理解,也更容易在以后理解自己。

使用更多变量。Python以其可读性而闻名;去掉这一特性称之为非“Pythonic”(参见)。可读性更强的代码会让别人更容易理解,以后也更容易理解自己。

天哪,你是说我在学习并强迫自己养成坏习惯。我同意nosklo的观点。我从来没有读过任何地方,在Python或任何其他语言中,最小化变量数量是一个好的实践。所有这些分散的split()调用都让我头疼。您的注释代码比那只一行的怪物要清晰得多,而且您只需对丑陋的
filing.split(…
表达式进行一次而不是多次计算,这也会导致相当大的性能损失。此外,还可以学习一些其他Python习惯用法,如列表解包:
year,month,day=datetext.split('/'))
(我假设您的日期字段是以“/”分隔的)。规则手册中是否也有关于消除重复代码的内容?我只想说“请使用变量”;它们可能像其他任何东西一样被过度使用,迫使读者记住大量的名称映射状态,以解释最终用途,并注意更多的用途/分配。@davishering“请使用变量”与完全不使用变量相反,OP就是这么做的。答案不是要求你只使用变量。天哪,你是在暗示我在学习并强迫自己养成坏习惯。我同意nosklo。我从来没有读过任何地方,在Python或任何东西中,最小化变量数量是一种好的做法所有那些分散的split()调用都让我头疼。你的注释代码比那一行的怪物要清晰得多,而且你只对那丑陋的
file.split进行评估(…
expression一次而不是多次,这也会使您付出相当大的性能代价。此外,请学习一些其他Python习惯用法,如列表解包:
year,month,day=datetext.split(“/”)
(我假设您的日期字段以“/”分隔).规则手册中没有关于消除重复代码的内容吗?我不想说“请使用变量”;它们可能像其他任何东西一样被过度使用,迫使读者记住大量的名称映射状态,以解释最终用途,并注意更多的用途/分配。@davishering“请使用变量”与完全不使用变量相反,OP就是这么做的。答案并不是要求你只使用变量。
filing.split('\\')