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

PyN*_*bie 1 python comparison fortran coding-style

我从一开始就在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
Run Code Online (Sandbox Code Playgroud)

现在我在dEtemp.append(blah blah blah)行中分割了我正在处理4次的字符串之一

filing.split('\\')
Run Code Online (Sandbox Code Playgroud)

历史上在Fortran或SAS中,如果我尝试相同的话,我会将我的字符串"切片"一次并为我将要在此表达式中使用的字符串的每个部分分配一个变量.

我不断强迫自己使用表达式而不是先解析一个值并使用该值.我这样做的唯一原因是我通过模仿其他人的代码来学习,但我一直想到这个问题 - 在哪里可以找到一个有说服力的讨论为什么一个比另一个更好

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

好的,评论部分更容易阅读,我决定如何回应nosklos答案

nos*_*klo 5

是的,把所有内容都放在表达式中并不是更好.请使用变量.

使用变量不仅更好,因为您只需执行一次操作并保存多次使用的值.主要原因是代码变得更具可读性.如果您将变量命名为right,它将兼作免费的隐式文档!

  • 我赞同nosklo.在Python或其他任何方面,我从来没有读过任何可以最大限度地减少变量数量的好习惯.所有那些分散的split()调用给了我一个令人头疼的问题.你的注释代码比那个单行怪物要清晰得多,而且你只评估那个丑陋的`filing.split(...`表达式而不是多次,这也会给你带来相当大的性能损失. ,学习一些其他的Python习语,比如列表解包:`year,month,day = datetext.split('/')`(我假设你的日期字段是'/'分隔的). (2认同)