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

Discussion in 'Python' started by Max, Feb 21, 2006.

  1. Max

    Max Guest

    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
    Max, Feb 21, 2006
    #1
    1. Advertising

  2. Max wrote:

    > 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.
    Rocco Moretti, Feb 21, 2006
    #2
    1. Advertising

  3. Max wrote:
    > 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)
    Jeffrey Schwab, Feb 22, 2006
    #3
  4. Max

    gene tani Guest

    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jp Calderone

    python-xlib -- high-level interface?

    Jp Calderone, Jul 18, 2003, in forum: Python
    Replies:
    0
    Views:
    367
    Jp Calderone
    Jul 18, 2003
  2. Gleb Rybkin
    Replies:
    11
    Views:
    578
    =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=
    Sep 20, 2006
  3. Alexander Schmolck
    Replies:
    0
    Views:
    315
    Alexander Schmolck
    Feb 27, 2007
  4. pabbu
    Replies:
    8
    Views:
    699
    Marc Boyer
    Nov 7, 2005
  5. Scorpiion
    Replies:
    1
    Views:
    1,327
    Scorpiion
    Dec 25, 2008
Loading...

Share This Page