オプション引数(Optional Arguments)と名前付け引数(Named Arguments)は似ているようでまったく違う機能です。
オプション引数は引数を省略可能にする機能で、名前付け引数は引数の名前を指定して値を渡すことができる機能です。
Python では
def info(text, opt=30):
print "text=%s , opt = %d" %(text, opt,)
のような関数を定義した場合、以下のような関数の呼びだしが可能です。
info('hello')
info('hello', 20)
info(opt=40, text='world')
1番目と2番目がオプション引数の例、3番目が名前付け引数の例になります。
これと同じことができる言語は、Visual Basic や OCaml、Scala( http://www.scala-lang.org/node/2075 ) 等いくつか存在しています。
オプション引数しかできない言語も結構ありますし、オプション引数すら不可能な言語もそれなりにあります。 JavaScript 2.0 なんかは草案時には名前付け引数があったのだけど、見送られた様子。
オプション引数、名前付け引数のいずれに関しても好まない人もいるようですが使い方次第だと思っています。 当然のごとく、この機能がないとしても公開する API の引数の名前や順序は明確に綺麗に書くべきだと思います。