In <[EMAIL PROTECTED]>, Thomas Ploch wrote: >> I just wanted to know, if there is any best practice concerning >> following code: >> >> […] >> >> def match(self, src, url): >> self.matchDict = {} >> self.matchDict[url] = {} >> # The next 2 functions just add stuff to self.matchDict >> if self.email: >> self._addEmails(src, url) >> self._addPatterns(src, url) >> # Is it good practice to open, write and close the db straight >> # away? Or is it better to leave it open until the whole program >> # has finished, and close it then? >> self.openDB(self.dbName) >> self.db[url] = self.matchDict[url] >> self.db.close() >> # I want to del the matchDict each time so it can't grow big. >> # Is this good, or should it be left open, too? >> del self.matchDict
Opening an closing the DB costs time but makes sure everything is flushed to the file. At least from the applications point of view. The data may be still cached by the operating system before actually being written to the file. Do you have `self.matchDict` just for communicating between those two methods? Why don't you use arguments and return values and a local name? def match(self, src, url): match_dict = dict() if self.email: match_dict.update(self._add_emails(src, url)) match_dict.update(self._addPatterns(src, url)) self.open_db() self.db[url] = match_dict self.db.close() It's a bit shorter and `match_dict` goes out of scope automatically when the method finishes. Clearing `self.matchDict` doesn't buy you much anyway. At least not what the comment suggests because it doesn't grow anymore after the end of the method. The first action in the next call is binding the attribute to a fresh dictionary. >> def openDB(self, dbName=None, modeflag='c'): >> if dbName == None: >> self.db = shelve.open('textmatch.db', flag=modeflag) >> else: >> self.db = shelve.open(dbName, flag=modeflag) def open_db(self, db_name='textmatch.db', modeflag='c'): self.db = shelve.open(db_name, flag=modeflag) Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list