That's really high-level: bits of beautiful python

M

Max

I have a friend who has been programming in C for many years, and he is
a great fan of the language. However, he (and I) are about to start a
python course, and he has been asking me a lot of questions. He often
responds to my answers with "Urgh! Object-orientation!" and suchlike.

But today we were discussing the problem of running externally-provided
code (e.g. add-on modules). Neither of us knew how to do it in C, though
I suggested using DLLs. However, I quickly installed python on his
laptop and coded this:

exec "import %s as ext_mod" % raw_input("Module: ")
ext_mod.do()

And created to sample modules with do() functions to demonstrate. He was
impressed ("That's really high-level" were his words).

I was just thinking perhaps we should create some kind of collection of
bits of "impressive" code like this.

He also liked 99 Bottles in one line:

print '\n'.join(["%d bottles of beer on the wall." % i for i in
range(100,0,-1)])

--Max
 
R

Rocco Moretti

Max said:
But today we were discussing the problem of running externally-provided
code (e.g. add-on modules). Neither of us knew how to do it in C, though
I suggested using DLLs. However, I quickly installed python on his
laptop and coded this:

exec "import %s as ext_mod" % raw_input("Module: ")
ext_mod.do()

Be careful with this - its fine for developer only use, but I'd avoid it
in production code. You leave the possibility for hackers to try to
import the module named 'os; os.system('rm -rf /'); import', or other
such deviousness.

Probably a better version:

ext_mod_name = raw_input("Module: ")
ext_mod = __import__(ext_mod_name, globals(), locals(), ['__dict__'])
ext_mod.do()

But granted, it's less cool than the original.

P.S. The ", globals(), locals(), ['__dict__']" is there so that the
proper thing is done when you provide the code with a dotted module name.
 
J

Jeffrey Schwab

Max said:
I have a friend who has been programming in C for many years, and he is
a great fan of the language. However, he (and I) are about to start a
python course, and he has been asking me a lot of questions. He often
responds to my answers with "Urgh! Object-orientation!" and suchlike.

After "many years" of C programming, he's still wary of object orientation?
But today we were discussing the problem of running externally-provided
code (e.g. add-on modules). Neither of us knew how to do it in C, though
I suggested using DLLs.

It depends on how the module was provided, and on the platform and tool
chain being used to build the code. It's typically not too hard on a
given platform, once you get used to it, but there's certainly no single
correct answer.
However, I quickly installed python on his
laptop and coded this:

exec "import %s as ext_mod" % raw_input("Module: ")
ext_mod.do()

exec'ing raw_input'd code gives me the willies.
And created to sample modules with do() functions to demonstrate. He was
impressed ("That's really high-level" were his words).

It is cool, isn't it? :)
I was just thinking perhaps we should create some kind of collection of
bits of "impressive" code like this.

Do you mean something like the ASPN Cookbooks?

http://aspn.activestate.com/ASPN/Cookbook/

If you keep track of some examples of "cool" stuff, I'll format them and
get some web space to post them. Try to give credit for each example.
He also liked 99 Bottles in one line:

print '\n'.join(["%d bottles of beer on the wall." % i for i in
range(100,0,-1)])

A little shorter:

for i in range(99, 0, -1): print("%d bottles of beer on the wall." % i)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top