Why is this slower?

Joseph Reagle reagle at mit.edu
Mon Oct 5 18:46:03 CEST 2009


I would think the commented code would be faster (fewer loops), but it is
not (because of function calls).


    #Average user_time = 5.9975 over 4 iterations
    inSRC = set([bio.name for bio in bios.values()])
    inEB = set([bio.name for bio in bios.values() if bio.eb_title])
    inWP = set([bio.name for bio in bios.values() if bio.wp_title])
    inBoth = inEB & inWP
    missingEB = inSRC - inEB
    missingWP = inSRC - inWP
    missingBoth = missingEB & missingWP
    avg_size_ratio = find_average(
        [bio.wp_ratio for bio in bios.values() if bio.wp_wc and bio.eb_wc])
    mdn_size_ratio = find_median(
        [bio.wp_ratio for bio in bios.values() if bio.wp_wc and bio.eb_wc])
    SRCfem = set([bio.name for bio in bios.values() if bio.gender
== 'female'])
    EBfem = set([bio.name for bio in bios.values() if bio.eb_gender
== 'female'])
    WPfem = set([bio.name for bio in bios.values() if bio.wp_gender
== 'female'])
    SRCmale = set([bio.name for bio in bios.values() if bio.gender
== 'male'])
    EBmale = set([bio.name for bio in bios.values() if bio.eb_gender
== 'male'])
    WPmale = set([bio.name for bio in bios.values() if bio.wp_gender
== 'male'])
    SRCun = set([bio.name for bio in bios.values() if bio.gender
== 'unknown'])
    EBun = set([bio.name for bio in bios.values() if bio.eb_gender
== 'unknown'])
    WPun = set([bio.name for bio in bios.values() if bio.wp_gender
== 'unknown'])

    ##Average user_time = 6.0025 over 4 iterations
    #def set_amend(obj, bio):
        #if obj == None:
            #obj = set([])
        #obj.add(bio.name)
        #return obj

    #inSRC = set([])
    #inSRC = set([])
    #inEB = set([])
    #inWP = set([])
    #SRCfem = set([])
    #EBfem = set([])
    #WPfem = set([])
    #SRCmale = set([])
    #EBmale = set([])
    #WPmale = set([])
    #SRCun = set([])
    #EBun = set([])
    #WPun = set([])

    #for bio in bios.values():
        ### use a function that takes set name (creates one) and conditional
        #inSRC = set_amend(inSRC, bio)
        #if bio.eb_title: inEB = set_amend(inEB, bio)
        #if bio.wp_title: inWP = set_amend(inWP, bio)
        #if bio.gender == 'female': SRCfem = set_amend(SRCfem, bio)
        #if bio.eb_gender == 'female': EBfem = set_amend(EBfem, bio)
        #if bio.wp_gender == 'female': WPfem = set_amend(WPfem,bio)
        #if bio.gender == 'male': SRCmale = set_amend(SRCmale, bio)
        #if bio.eb_gender == 'male': EBmale = set_amend(EBmale, bio)
        #if bio.wp_gender == 'male': WPmale = set_amend(WPmale, bio)
        #if bio.gender == 'unknown': SRCun = set_amend(SRCun, bio)
        #if bio.eb_gender == 'unknown': EBun = set_amend(EBun, bio)
        #if bio.wp_gender == 'unknown': WPun = set_amend(WPun, bio)
    #inBoth = inEB & inWP
    #missingEB = inSRC - inEB
    #missingWP = inSRC - inWP
    #missingBoth = missingEB & missingWP
    #avg_size_ratio = find_average(
        #[bio.wp_ratio for bio in bios.values() if bio.wp_wc and bio.eb_wc])
    #mdn_size_ratio = find_median(
        #[bio.wp_ratio for bio in bios.values() if bio.wp_wc and bio.eb_wc])





More information about the Python-list mailing list