Considering migrating to Python from Visual Basic 6 for engineering applications

Christian Gollwitzer auriocus at gmx.de
Sun Feb 21 10:21:29 EST 2016


Am 21.02.16 um 14:16 schrieb BartC:
> Even accepting that syntax limitations might require this to be written as:
>
>    readline(f, a, b, c)
>
> I can't see a straightforward way of making this possible while still
> keeping a, b and c simple integer, float or string types (because
> Python's reference parameters don't work quite the right way).
>
> (There is also the question of 'readline' knowing what types of values
> to read. This information would not be needed in Fortran or Basic but
> somehow needs to be supplied here, if a particular set of types is to
> imposed on the input.)

Are you sure that in Basic or Fortran the expected type is not supplied? 
I'm not too familiar with either, but I think that in Fortran the 
compiler deduces it from the (compile-time) static type of the variable, 
while in BASIC there used to be sigils (A$, A# etc.) to denote the type. 
A pythonic input function would look like this IMHO:

a,b,c = readline(f, int, float, str)

> In other words, it seems this particular wheel does require re-inventing!

Yes, but the above seems quite trivial:

Apfelkiste:Tests chris$ cat parseline.py
def readline(f, *args):
	line=f.readline().split()
	return [type(x) for type,x in zip(args,line)]

with open("mydata.dat", "r") as f:
	ND, NINT, NT=readline(f, int, int, int)
	# next line holds NINT floats
	dincol=readline(f, *NINT*[float])
	# next line holds a string
	text=f.readline()
	
	print("Read: ", ND, NINT, NT)
	print(dincol)
	print(text)

Apfelkiste:Tests chris$ cat mydata.dat
  10            6             1
8.65  0.2192347   3.33E-4    44     0.0051        6
String
Apfelkiste:Tests chris$ python parseline.py
('Read: ', 10, 6, 1)
[8.65, 0.2192347, 0.000333, 44.0, 0.0051, 6.0]
String

Apfelkiste:Tests chris$

	Christian



More information about the Python-list mailing list