On Mon, 05 May 2014 17:39:44 -0700, Satish Muthali wrote: > Hello experts, > > I have a burning question on how to pass variable by reference in > Python. I understand that the data type has to be mutable.
Python provides neither pass-by-reference nor pass-by-value argument passing. Please read this for an explanation of why people sometimes think that it does, and what Python actually does instead: http://import-that.dreamwidth.org/1130.html To get an effect *similar* to pass-by-reference, you can wrap your variable in a list, and then only operate on the list item. For example: one = [1] two = [2] def swap(a, b): a[0], b[0] = b[0], a[0] swap(one, two) print one[0], two[0] => will print "2 1" But note carefully that in the swap function I do not assign directly to the arguments a and b, only to their items a[0] and b[0]. If you assign directly to a and b, you change the local variables. # This does not work. def swap(a, b): a, b = b, a Rather than trying to fake pass-by-reference semantics, it is much better to understand Python's capabilities and learn how to use it to get the same effect. For example, instead of writing a swap procedure, it is much simpler to just do this: one = 1 two = 2 one, two = two, one print one, two => will print "2 1" > For example, here’s the issue I am running in to: > > I am trying to extract the PostgreSQL DB version for example: > > pgVer = [s.split() for s in os.popen("psql > --version").read().splitlines()] > print pgVer[0] > for i, var in enumerate(pgVer[0]): > if i == len(pgVer[0]) - 1: > pgversion = var > > I would now like to pass ‘pgversion’ (where the value of pgversion is > 9.3.4) by reference, for example: > > I want to nuke /var/lib/postgresql/9.3.4/main/data , however > programatically I want it to be as: /var/lib/postgresql/<value of > pgversion>/main/data I don't understand this. I think you mean that you want to delete a file, but you don't know the pathname of the file until you have extracted the version number as a string. path = "/var/lib/postgresql/%s/main/data" os.unlink(path % pgversion) will probably do what you want. Pass-by-reference doesn't come into this. If this is not what you mean, please explain in more detail. -- Steven -- https://mail.python.org/mailman/listinfo/python-list