By “actual performance issues”, I meant performance hits that have been proved after measurements over the expected use cases.
Keep in mind that optimizations often work the other way around from what we intuitively think, and as a rule you should only worry to write code that is readable unless optimizations are actually required. Some extra literature for you on this exact subject of lists vs sets applied to C++: http://lafstern.org/matt/col1.pdf Now, do you still think that the additional complexity of a set data structure is worth it for such a small amount of elements? On 2 December 2014 at 16:08, Christopher Crouzet < [email protected]> wrote: > I believe you're wrong on both points. > > Firstly, the constructor of the iterator `bnn_MItDagHiearchy > <https://github.com/christophercrouzet/banana.maya/blob/master/banana/maya/extensions/OpenMaya/iterators.py#L214>` > has a default argument `recursive=false`, meaning that only the top > (assembly) DAG nodes will be returned, as expected by the > `bnn_importFile()` method. > > Secondly, and since you seem to enjoy reading development practices > online, you must know that you shouldn't talk about premature optimizations > when there's no actual performance issues. Especially in this case where: > - the method `bnn_importFile()` most likely won't be used in a tight loop. > And even if it does, the performance limitations would come from the actual > import of the file incurred by Maya rather than from something as > insignificant as choosing between list-comprehension or sets. > - the number of items being checked for uniqueness within the list > comprehension is most likely to be very (very) small, and hence there more > likely won't be any noticeable difference in performances whatever method > is used, even if you decided to generate that list 17458 times in a row. > > > On 2 December 2014 at 15:31, Marcus Ottosson <[email protected]> > wrote: > >> Also as a variation to what Marcus suggested, instead of needing to first >> capture the assemblies in the scene, do the import, and compare the new >> assemblies listing to the old one with a set, you can just pass your list >> of nodes to ls() and have it return just the assemblies. >> >> The question is, which list do you pass? The reason for doing a before >> and after is getting the difference in order to figure out which nodes were >> imported, and which were already there. >> >> Using the Maya Python API: >> >> topLevelDagPaths = list(OpenMaya.bnn_MItDagHierarchy()) >> OpenMaya.MFileIO.importFile(fileName, type, preserveReferences, >> nameSpace, ignoreVersion)return [dagPath for >> dagPath in OpenMaya.bnn_MItDagHierarchy() >> if not dagPath in topLevelDagPaths] >> >> Which seems to iterate using >> OpenMaya.MItDag(OpenMaya.MItDag.kBreadthFirst) >> >> It looks like this will return *all* imported nodes, and not just the >> assembilies. In addition, finding differences via list-comprehension is >> about 100x slower than using sets. >> >> - http://stackoverflow.com/questions/2831212/python-sets-vs-lists >> >> >> >> On 1 December 2014 at 23:42, Christopher Crouzet < >> [email protected]> wrote: >> >>> Using the Maya Python API: >>> https://github.com/christophercrouzet/banana.maya/blob/master/banana/maya/extensions/OpenMaya/MFileIO.py#L19 >>> >>> >>> On 2 December 2014 at 05:54, Justin Israel <[email protected]> >>> wrote: >>> >>>> Also as a variation to what Marcus suggested, instead of needing to >>>> first capture the assemblies in the scene, do the import, and compare the >>>> new assemblies listing to the old one with a set, you can just pass your >>>> list of nodes to ls() and have it return just the assemblies: >>>> >>>> cmds.ls(nodes, assemblies=True) >>>> >>>> >>>> >>>> On Tue Dec 02 2014 at 11:05:59 Marcus Ottosson <[email protected]> >>>> wrote: >>>> >>>>> That's a clever approach! >>>>> >>>>> Along those lines, you could also opt to import files under a given >>>>> namespace; all nodes, including non-DAG ones, will end up within the >>>>> namespace. As a side-note, this is probably as close as you'll get to the >>>>> Softimage "Model". >>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Python Programming for Autodesk Maya" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOABXtVoG4ruZHg%3DyBMc3oCiRN3mZcoT38J63UcZznj0wA%40mail.gmail.com >>>>> <https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOABXtVoG4ruZHg%3DyBMc3oCiRN3mZcoT38J63UcZznj0wA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Python Programming for Autodesk Maya" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA3mmgOK4BLFdXZAm_bs7s%2BvfEgyVr-YQkf%2BLPjy%3DM-mYQ%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA3mmgOK4BLFdXZAm_bs7s%2BvfEgyVr-YQkf%2BLPjy%3DM-mYQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> >>> >>> -- >>> Christopher Crouzet >>> *http://christophercrouzet.com* <http://christophercrouzet.com> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Python Programming for Autodesk Maya" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/python_inside_maya/CANuKW501RmgWsAnNCj-CWQF2w3%2Bv1owr9KCAwFmaZDsgChs8Jw%40mail.gmail.com >>> <https://groups.google.com/d/msgid/python_inside_maya/CANuKW501RmgWsAnNCj-CWQF2w3%2Bv1owr9KCAwFmaZDsgChs8Jw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> *Marcus Ottosson* >> [email protected] >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Python Programming for Autodesk Maya" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOAhMU30FaYfqQ1QsOj%3DUdUkuwWWHL8COTp8Tk6em3mDVQ%40mail.gmail.com >> <https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOAhMU30FaYfqQ1QsOj%3DUdUkuwWWHL8COTp8Tk6em3mDVQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Christopher Crouzet > *http://christophercrouzet.com* <http://christophercrouzet.com> > > -- Christopher Crouzet *http://christophercrouzet.com* <http://christophercrouzet.com> -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CANuKW53ua%3Djn%2Bh2bmFSvfo_H-D%3DhyEoBDi14pmq8-O%2BCQJr_1g%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
