Passing a callable object to Thread

Jeff Schwab jeff at schwabcenter.com
Sat Feb 16 00:08:43 EST 2008


Steve Holden wrote:
> Paul Rubin wrote:
>> Steve Holden <steve at holdenweb.com> writes:
>>> Assuming you're right, what alternative would you suggest? Would it
>>> allow parenthesized expressions to retain their customary meaning?
>>
>> It is kind of weird that there is even such a thing as a 1-tuple.
> 
> I agree that zero-length and singleton tuples don't make a great deal of 
> sense semantically.

Why not?  They seem intuitive to me.  I would find it weird if you 
couldn't have 0-tuple, and even weirder if you couldn't have a 1-tuple. 
    Maybe my brain has been warped by too much C++ code.

In C++, it's very common to define data structures that have no members; 
the moral equivalent of an empty tuple:

	struct S { };

I recently did this in C, and was surprised to see this message from gcc:

	main.c:1: warning: struct has no members

It's also common in C++ to treat a stand-alone object as an array of 
length 1.  This is useful because any function defined to take a 
sequence of input can easily be given a single element instead:

	int proto = 5;
	std::vector<int> v(&proto, &proto + 1);

It strikes me that 1-tuples could serve the same purpose.  It's common 
now for functions to be defined to take single elements, with client 
code using loops to process sequences:

	for item in sequence:
		process(item)

If functions were instead defined to take sequences, then client code 
would be simplified, especially for common tasks like processing lines 
of input.

	process(sequence)

On occasions when only a single item were to be processed, a 1-tuple 
would serve as a nice syntactic adapter:

	process((item,))



More information about the Python-list mailing list