Hello Naheed,

You seem to have messed up your quoting. Text starting with a > is a quote, but in your reply, you have written text starting with > as if it were written by me. I have fixed the quoting in this reply, but please try to watch that.

See below for more comments.


naheed arafat wrote:

On Sat, Jun 25, 2011 at 9:42 PM, Steven D'Aprano <st...@pearwood.info>wrote:
[...]
Define "efficiency".

Do you mean:

- most efficient for the programmer to write?
- easiest to read?
- fastest for the compiler to compile?
- uses the smallest number of characters in source code?
- takes up the least space on disk when compiled?
- runs fastest?
- uses least memory?
- easiest to maintain when you need to make changes?
- easiest to debug when you discover a bug?

I meant "runs fastest" .

Why? Is it a race? Do you win a prize if your code runs in 0.001 second instead of 0.002 second? Be careful that you have a good reason for caring about "fastest", not just "fast enough".

Writing the fastest code usually means that it:

- uses more memory
- is harder to write
- is harder to read
- is harder to debug
- is harder to maintain

You should be sure that you don't waste your time trying to speed up code that is fast enough.


Before trying to optimize your code, you should consider whether you are
wasting your time or not. Chances are good that you are. You should consider
these famous quotes about optimization:


"More computing sins are committed in the name of efficiency (without
necessarily achieving it) than for any other single reason - including blind
stupidity." - W.A. Wulf


I don't know what is meant by computing sins.. would you please clarify in
which cases optimization would be a waste of time?

Optimization is nearly always a waste of time. Not always, but nearly.

By "computing sins", he means "doing something you should not do". Examples:

- writing hard to maintain code
- writing code that is fragile instead of robust when it
  receives unexpected input
- writing buggy code (it is astonishing how many tens of
  thousands of hours has been wasted by programmers trying
  to make code that doesn't work correctly run fast)
- spending an hour to try to save one minute
- spending time trying to optimize trivial, unimportant
  parts of the program, while leaving important parts
  slow
- writing code that is actually SLOWER but thinking that
  it must be faster (what I call a pessimation, not an
  optimization)

These are computing sins. Don't do them.


"Bottlenecks occur in surprising places, so don't try to second guess and
put in a speed hack until you have proven that's where the bottleneck is." -
Rob Pike


what is meant by Bottleneck?


A bottleneck is a place where progress slows because your actions are restricted. Consider water in a bottle: the bottle might be 7cm wide at the bottom, but where the water comes out, through the neck, it is only 1.5cm wide:

]+---------------------+
]|                      \
]|                       +---------+
]|                       +---------+
]|                      /
]+---------------------+


The speed at which you can pour water from the bottle depends on the width of the neck, not the width of the bottle. Making the bottle wider at the bottom won't speed up how fast you can pour water.



[...]
I would solve it like this:
import itertools
a = reversed('How are you'.split(' '))
b = 'I am fine'.split(' ')
words = itertools.chain(*zip(a, b))
' '.join(words)

zip() takes sequences as argument.Isn't variable a an iterable object? the
code didn't work.

zip takes any iterable as argument, not just sequences.

It works for me in every version of Python between 2.4 and 3.2. Perhaps you should copy and paste the exact code you are running, and the error message you get, or the result you get.



--
Steven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to