From: Mel on 2 Mar 2010 09:26 Roy Smith wrote: [ ... ] > Why is it unwise? > > The use case is I'm importing a bunch of #define constants from a C header > file. I've got triples that I want to associate; the constant name, the > value, and a string describing it. The idea is I want to put in the > beginning of the module: > > declare('XYZ_FOO', 0, "The foo property") > declare('XYZ_BAR', 1, "The bar property") > declare('XYZ_BAZ', 2, "reserved for future use") > > and so on. I'm going to have hundreds of these, so ease of use, ease of > maintenance, and niceness of presentation are important. As long as the header file says what you think it says, you're fine. If you encounter a file that does "#define sys", then the sys module is forever masked, and your module can't invoke it. A header file that contains "#define declare" will be fun. Mel.
From: Roy Smith on 2 Mar 2010 10:19 On Mar 2, 8:33 am, Steve Holden <st...(a)holdenweb.com> wrote: > And how important is it to make sure that whatever data your program > processes doesn't overwrite the actual variable names you want to use to > program the processing? Oh, I see what you're saying. You're thinking I was going to machine- process the C header file and pattern-match the #define statements? Actually, I was just hand-copying the values, and was looking for a way to reduce typing. But, I suppose if I were to machine-process the header files, that would be a concern. I suppose in that case I would make sure I only inserted variables which matched a particular pattern (ie, "[A-Z]+_[A- Z][A-Z0-9]+"). In fact, now that you got me thinking in that direction... Somewhat sadly, in my case, I can't even machine process the header file. I don't, strictly speaking, have a header file. What I have is a PDF which documents what's in the header file, and I'm manually re- typing the data out of that. Sigh.
From: Steve Holden on 2 Mar 2010 11:14 Roy Smith wrote: > On Mar 2, 8:33 am, Steve Holden <st...(a)holdenweb.com> wrote: > >> And how important is it to make sure that whatever data your program >> processes doesn't overwrite the actual variable names you want to use to >> program the processing? > > Oh, I see what you're saying. You're thinking I was going to machine- > process the C header file and pattern-match the #define statements? > Actually, I was just hand-copying the values, and was looking for a > way to reduce typing. > > But, I suppose if I were to machine-process the header files, that > would be a concern. I suppose in that case I would make sure I only > inserted variables which matched a particular pattern (ie, "[A-Z]+_[A- > Z][A-Z0-9]+"). In fact, now that you got me thinking in that > direction... > > Somewhat sadly, in my case, I can't even machine process the header > file. I don't, strictly speaking, have a header file. What I have is > a PDF which documents what's in the header file, and I'm manually re- > typing the data out of that. Sigh. > Don't worry. Now you have revealed the *real* problem you may well find there are c.l.py readers who can help! Python can read PDFs ... regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 PyCon is coming! Atlanta, Feb 2010 http://us.pycon.org/ Holden Web LLC http://www.holdenweb.com/ UPCOMING EVENTS: http://holdenweb.eventbrite.com/
From: John Posner on 2 Mar 2010 11:18 On 3/2/2010 10:19 AM, Roy Smith wrote: > > Somewhat sadly, in my case, I can't even machine process the header > file. I don't, strictly speaking, have a header file. What I have is > a PDF which documents what's in the header file, and I'm manually re- > typing the data out of that. Sigh. Here's an idea, perhaps too obvious, to minimize your keystrokes: 1. Create a text file with the essential data: XYZ_FOO 0 The foo property XYZ_BAR 1 The bar property XYZ_BAZ 2 reserved for future use 2. Use a Python script to convert this into the desired code: declare('XYZ_FOO', 0, "The foo property") declare('XYZ_BAR', 1, "The bar property") declare('XYZ_BAZ', 2, "reserved for future use") Note: >>> s 'XYZ_FOO 0 The foo property' >>> s.split(None, 2) ['XYZ_FOO', '0', 'The foo property'] HTH, John
From: Carl Banks on 2 Mar 2010 11:49 On Mar 2, 5:21 am, Roy Smith <r...(a)panix.com> wrote: > In article <mailman.96.1267508316.23598.python-l...(a)python.org>, > Chris Rebert <c...(a)rebertia.com> wrote: > > > > > On Mon, Mar 1, 2010 at 8:27 PM, Roy Smith <r...(a)panix.com> wrote: > > > >From inside a module, I want to add a key-value pair to the module's > > > __dict__. I know I can just do: > > > > FOO = 'bar' > > > > at the module top-level, but I've got 'FOO' as a string and what I > > > really need to do is > > > > __dict__['Foo'] = 'bar' > > > > When I do that, I get "NameError: name '__dict__' is not defined". Is > > > it possible to do what I'm trying to do? > > > Yes; just modify the dict returned by the globals() built-in function > > instead. > > Ah, cool. Thanks. > > > It's usually not wise to do this and is better to use a > > separate dict instead, but I'll assume you know what you're doing and > > have good reasons to disregard the standard advice due to your > > use-case. > > Why is it unwise? He didn't say it was unwise. He said it's usually not wise. Carl Banks
First
|
Prev
|
Next
|
Last
Pages: 1 2 3 Prev: Call for Participation: CHR Summer School Next: How to find an COM object in using of pywin32 |