473,320 Members | 1,799 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

Strong/weak typing

I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?
Aug 1 '08 #1
12 1550
On Aug 1, 5:31*pm, MartinRineh...@gmail.com wrote:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?
I'm not sure you've got the terminology 100% right. Strong typing is
not about re-using names.

Take a look at: http://eli.thegreenplace.net/2006/11...yping-systems/
Aug 1 '08 #2
Le Friday 01 August 2008 17:31:25 Ma************@gmail.com, vous avez écrit*:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?
As already stated by others, Python is strongly typed, the fact is that the
type of an object is embeded with the object itself, not by the name you give
him at different place in a program.

But in fact you effectively re-use names in your programs, it's the basic of
the language.

Think of the following lines :

a, b = 0, 1
a += b
a, b = b, a

s = "foo"
s = s.upper()

--
_____________

Maric Michaud
Aug 1 '08 #3
Ma************@gmail.com schrieb:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.
If it buys you anything? Maybe for shedskin or some future
"to-native-code" compiler?
Is this good software engineering practice, or am I missing something
Pythonic?
I'd say so. In a function/method body I do reuse generic names like
data,counter,etc. but I never change say an instance variable to another
type (except from None). Principle of least surprise applies here.

cheers
Paul

Aug 1 '08 #4
On Aug 1, 11:31 am, MartinRineh...@gmail.com wrote:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?
I don't think you should go about gratuitously rebinding names to
objects of different types just for the sake of being more Pythonic,
no.

The strength of dynamic typing (Pythonistas prefer the terms dynamic
vs static for what you describe, and use weak vs stong for something
else) lies mostly in the freedom it gives you.
It means you can write a function like this and call it on any object
that has an output method:

def function(x):
x.output()

It means you can have big list of objects of different types and
iterate through the items like this, as long they all have that
output method:

for x in some_bug_list:
x.output()

You can arrange for this kind of thing to happen in statically-typed
languages as well, but it's a lot more effort (defining interfaces or
subclasses).

IMO, organizing code to take advantage of this can result in much
simpler logic with much less code duplication. But even if you do
that, most of the variables in a program are going to spend their
whole time being bound to a single time.
Carl Banks
Aug 1 '08 #5
On Aug 1, 8:31 am, MartinRineh...@gmail.com wrote:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?
Reusing names for no reason can make debugging harder in some cases.
Aug 1 '08 #6


Ma************@gmail.com wrote:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.
Names are bound to objects with types.
Is this good software engineering practice,
If you expand 'type' to 'category', then yes.
or am I missing something Pythonic?
Most Python code is or could be generic.

def sum(iterable,start):
for item in iter(iterable):
start += item
return start

Iterable can be any collection that is homogeneous with respect to the
class of start and the operation of addition. And throughout my code, I
never use 'iterable' for anything other that a
homegeneous-for-the-purpose collection. I would never, for instance,
bind it to a number.

tjr

Aug 1 '08 #7
Mel
Ma************@gmail.com wrote:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?
Nothing wrong with what you're doing. I've never come up with a really
convincing reason to recycle names. Possibly something that follows the
evolution of the data:

middle_name = raw_input ('Name?')
middle_name = middle_name.split()
middle_name = middle_name[1]

It works, but I don't like it enough to actually use it.

Mel.

Aug 2 '08 #8
On Fri, 01 Aug 2008 22:47:04 -0400
Mel <mw*****@the-wire.comwrote:
middle_name = raw_input ('Name?')
middle_name = middle_name.split()
middle_name = middle_name[1]

It works, but I don't like it enough to actually use it.
Especially since this works better anyway:

middle_name = raw_input ('Name?').split()[1]

--
D'Arcy J.M. Cain <da***@druid.net | Democracy is three wolves
http://www.druid.net/darcy/ | and a sheep voting on
+1 416 425 1212 (DoD#0082) (eNTP) | what's for dinner.
Aug 2 '08 #9
Ma************@gmail.com schrieb:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?
Others pointed out the wrong wording.

As often, this is not a question to be answered with a simple yes or no.

Duck-typing is very ptyhonic, and as such it is very common to write e.g.

if content_as_string:
inf = StringIO.String(content_as_string)
else:
inf = open(filename)

inf has two totally different types now, depending on the path taken.

And I personally tend to actually do things like this:

if isinstance(foo, str):
foo = unicode(str)

Or such.

But that is more a matter of taste - I personally don't like to many
names lying around, but YMMV.
Diez
Aug 2 '08 #10
On Fri, Aug 01, 2008 at 03:57:10PM +0000, Alan Franzoni wrote:
Ma************@gmail.com was kind enough to say:
I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.
[...]
Python *is* strongly typed.
That's debatable. It depends on what definition of "strongly typed"
you are using, and Martin's usage was not incorrect. There are,
unfortunately, lots of them:

http://en.wikipedia.org/wiki/Strong_typing

On Fri, Aug 01, 2008 at 11:23:31AM -0700, Carl Banks wrote:
The strength of dynamic typing (Pythonistas prefer the terms dynamic
vs static for what you describe, and use weak vs stong for something
else) lies mostly in the freedom it gives you.
Pythonistas can be extremely irritating. Some attributes I've
observed of (some of) them:

- stubborn insistence on their own narrow definitions of terms, and
complete refusal to accept that other definitions of those terms
exist and are in common usage

- stubborn refusal to accept that other terms exist which describe
some facet of programming they prefer to call by their own Elite
Pythonista name.

- A fundamental lack of understanding that not everyone who posts
here was born speaking Python

- extreme impatience with anyone who does not immediately understand
what they are saying

- superior/condescending tone leveled at anyone who profers an
opinion which differs with the Pythonista hive mind.

Is precision in terminology important? Sure, especially when the
topic tends to be somewhat complex and/or abstract. But words are
just words -- they have meaning that we impart to them, and there is
rarely only one to describe a particular concept. There also is
rarely only one meaning for each word. Computer Science has evolved
increasingly rapidly over the last 40 years or so, and along with it
so has its terminology. Each computer language brings with it a
unique perspective on programming, and almost out of necessity its own
terminology to describe the philosophy behind its design. THIS DOES
NOT RENDER WRONG OTHER TERMS OR USAGES. It merely augments the
already rich natural language we have to describe what we do.

--
Derek D. Martin
http://www.pizzashack.org/
GPG Key ID: 0x81CFE75D
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQFIlGlddjdlQoHP510RAoVyAKCUDmlZt7Zj0k8MJxhE46 i+/Wcr9ACcDJpx
IEVzJkH9LpBZnlUZpSopzQw=
=jRre
-----END PGP SIGNATURE-----

Aug 2 '08 #11
On Fri, 01 Aug 2008 22:47:04 -0400, Mel <mw*****@the-wire.comwrote:
Ma************@gmail.com wrote:
>I'm writing Python as if it were strongly typed, never recycling a
name to hold a type other than the original type.

Is this good software engineering practice, or am I missing something
Pythonic?

Nothing wrong with what you're doing. I've never come up with a really
convincing reason to recycle names. Possibly something that follows the
evolution of the data:

middle_name = raw_input ('Name?')
middle_name = middle_name.split()
middle_name = middle_name[1]

It works, but I don't like it enough to actually use it.
I don't like that there are two lines where 'middle_name' isn't
actually a middle name. It confuses me, even though I know that
everything is ok after the third line.

I reuse names though, mostly because I don't want to invent additional
names which would feel "overburdened". I like this example better:

months = range(1, 13)
# do something with the months-as-numbers list,
# and then:
months = [ monthname(x) for x in months ]
# do something where we only need the names

Your comment "something that follows the evolution of the data"
applies here. It's the same data, but refined to a more usable form.

It also kills off an object which I have decided I will not need
further down, so it kind of documents that decision.

I only do this very locally, like in a simple function.

/Jorgen

--
// Jorgen Grahn <grahn@ Ph'nglui mglw'nafh Cthulhu
\X/ snipabacken.se R'lyeh wgah'nagl fhtagn!
Aug 3 '08 #12
Mel
Jorgen Grahn wrote:
I reuse names though, mostly because I don't want to invent additional
names which would feel "overburdened". I like this example better:

months = range(1, 13)
# do something with the months-as-numbers list,
# and then:
months = [ monthname(x) for x in months ]
# do something where we only need the names

Your comment "something that follows the evolution of the data"
applies here. It's the same data, but refined to a more usable form.
[ ... ]
I only do this very locally, like in a simple function.
Yes. That example looks particularly good.

Somebody emailed me privately with a poster-child for this technique, which,
now that I've been reminded, I *do* use ("locally" applies strongly here):

def f(a):
a = int (a)
# ...

or, in a slightly different context:

class ThisClass (object):
# ...
def __add__ (self, other):
if not isinstance (other, ThisClass):
other = ThisClass (other)
Mel.
Aug 4 '08 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

53
by: dterrors | last post by:
Will php 6 do strong typing and/or namespaces? I was shocked to find out today that there are some people who actually argue that weak typing is somehow better. I didn't even know there was a...
94
by: Gabriel Zachmann | last post by:
Is it correct to say that strong/weak typing does not make a difference if one does not use any pointers (or adress-taking operator)? More concretely, I am thinking particularly of Python vs C++....
2
by: j_mckitrick | last post by:
I recently took a one week course on .NET, and they emphasized over and over again that the key is types. Everything is strongly typed and enforced. Python is the exact opposite. Yet both...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
0
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.