Idea about method parameters
Markus Schaber
markus at schabi.de
Wed Sep 26 11:23:06 EDT 2001
More information about the Python-list mailing list
Wed Sep 26 11:23:06 EDT 2001
- Previous message (by thread): Idea about method parameters
- Next message (by thread): Idea about Idea about method parameters
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi, Toby Dickenson <tdickenson at devmail.geminidataloggers.co.uk> schrub: > I assume you would not want to allow: > > class A: > def __init__(self, some_other_object.value): > pass > > But the distinction between the two is unexpected. The distinction that I can only use names of the local procedure scope and not every accessible name is also somehow "unexpected", at least inconsistent. (This is how it is now and in all other languages I know) > There is a way to shorten a __init__ with many parameters within the > current language, without sacrificing readability. Shorter, but also > wider..... > > class A: > def __init__(self, value1, value2, value3): > self.value1,self.value2,self.value3 = value1,value2,value3 > > > (my appologies if you already knew of this) Yes, I know this, and it is not really much shorter. And I would not call it more readable than three assignments on three lines on their own. Imagine you have 10 values, and you have to count by hands if you want to change one of them. Then I would prefer self.value1=value1; self.value2=value2; self.value3=value3 And it is slightly slower, i ran the following Test: import time def test(obj): start = time.clock() for i in xrange(100000): obj.test(1,2,3,4,5,6) stend = time.clock() print obj.descr,round(stend-start,3) class Direct: descr="One per line: " def test(self, a, b, c, d, e, f): self.a = a self.b = b self.c = c self.d = d self.e = e self.f = f class Tupel: descr="Using Tuples: " def test(self, a, b, c, d, e, f): self.a,self.b,self.c,self.d,self.e,self.f = a,b,c,d,e,f class Concatenated: descr="All on one line: " def test(self, a, b, c, d, e, f): self.a = a;self.b = b;self.c = c;self.d = d;self.e = e;self.f = f D = Direct() T = Tupel() C = Concatenated() test(D) test(T) test(C) test(D) test(T) test(C) My results using Python 1.5.2 and Python 2.0.1: schabi at lunix:~/python/test$ python assignment.py One per line: 1.36 Using Tuples: 1.44 All on one line: 1.34 One per line: 1.4 Using Tuples: 1.57 All on one line: 1.33 schabi at lunix:~/python/test$ python2 assignment.py One per line: 1.42 Using Tuples: 1.55 All on one line: 1.42 One per line: 1.44 Using Tuples: 1.55 All on one line: 1.38 This shows that the ;-approach is the fastest (because of the lack of the linenumber increasing bytecode instructions, I guess), and your is the slowest (because of the tupel packint/unpacking I guess). markus -- "The strength of the Constitution lies entirely in the determination of each citizen to defend it. Only if every single citizen feels duty bound to do his share in this defense are the constitutional rights secure." -- Albert Einstein
- Previous message (by thread): Idea about method parameters
- Next message (by thread): Idea about Idea about method parameters
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list