現在位置: ホーム ブログ Python3 日本語の変数名&関数名
ブログ

Python3 日本語の変数名&関数名

普段使っている、Zope/PloneがPython3に対応するのはいつのことか・・と考えているのですが、まだまだ時間が掛かりそうな感じがしています。といって、Python3のことを使えないなどと言っていられない時代になっていくのだろうな・・・と2011年末を向かえています。

昨年・一昨年と技術系アドベントカレンダーをやっていて、今年もPlone4で複数回のエントリーを書いていますが、Pythonの方でも書くことになりました。今年は、Python3と言う縛りなのでネタに困ったのですが、先週末開催した、Python mini hack a thonでアドバイスをもらいつつ、初めてのPython3と言うことでネタを作ってみました。

日本語問題

既に、なかがみさんがエントリーしているとおり、文字列の扱いが変わり、Unicodeになりました。

これ以外にも、日本語(ASCII以外)での様々な扱いが増えています。

変数名にASCII以外の文字を使う

import math
π = math.pi

これは、円周率(パイ)を、変数として、πに代入した物です。

関数名にASCII以外の文字を使う

def Σ(*args):
"""数式が定義できる"""
r = 0
for a in args:
r += a
return r

これは、引数の数値を全て足して返す関数です。その関数名にシグマ(Σ)記号を使っています。

関数名に日本語を使う

import math
π = math.pi

def 円周(半径):
return 2 *半径 * π

print(円周(3))

というように、日本語でも関数名を定義できます。

最終行にprintを記述しています。Python3から、printが関数化されたので、記述方法が変わっています。(Python2.xでもこの記述が使えるはずです(どのバージョンか使えるのかな??<2.4でも大丈夫だった))

 

日本語の関数名とかちょっと気持ち悪い感じがしますが、強引ですが、下記の様な所で便利なのではないでしょうか?

  • コンフィグとかで便利なこともあるのではないか?
  • 数式をそのまま利用できる
  • 子供向け教育に、便利??
  • テストコードなどで便利に使える部分があるのではないか?

こんな感じで、日本語でのプログラミングが出来ます

def 世界の小宮():
"""日本語でプログラミングが出来る"""
d = {'名前' : '小宮',
'Twitter' : '@t0miya',
'作っているもの' : ['blockdiag', 'seqdiag', 'actdiag', 'nwdiag']}
return d

print(世界の小宮())

上記を実行すると、下記のように辞書の中の日本語がきちんと表示されています。これは、私の次のエントリーをお願いする「石本(@atsuoishimoto)さん」の功績によるものです。

{'名前': '小宮', 'Twitter': '@t0miya', '作っているもの': ['blockdiag', 'seqdiag', 'actdiag', 'nwdiag']}

同様に、関数を呼び出すことも可能です。

def 小宮さんの作っているものを得る():
return 世界の小宮().get("作っているもの")

# 強引にアドベントカレンダーに巻き込んでおいて、ネタにしてごめんなさい> 小宮さん

 

内包表記

最初は取っつきにくい内包表記ですが、辞書やセットでも出来るようになっています。日本語を使った例のまま書き進めたいと思います。

リスト = list
辞書 = dict
セット = set

def 内包表記例(データ=None):
if データ is None:
return None
elif isinstance(データ, リスト):
return [i for i in データ]
elif isinstance(データ, セット):
return {i for i in データ}
elif isinstance(データ, 辞書):
l1 = [1,2,3]
l2 = ['a', 'b', 'd']
old = dict((k, v) for k, v in zip(l1, l2)) #旧来の方法
new = {k:v for k in l1 for v in l2} #新たな方法
return old, new

if __name__ == "__main__":
print(内包表記例([1, 2, 3]))
print(内包表記例(set([1, 2, 3, 4, 2, 3])))
print(内包表記例({}))

こんな感じで、セット(set)の場合、{}で囲んで、リスト内包表記と同じように書くと、セットオブジェクトが返ってきます。

辞書も {}を使いますが、中にfor文を2つ入れてデータを作ります。zipとdictを使って行っていた物をすっきりと書くことが出来ます。

上記の実行結果は、下記のようになります。

 

[1, 2, 3]
{1, 2, 3, 4}
({1: 'a', 2: 'b', 3: 'd'}, {1: 'd', 2: 'd', 3: 'd'})

最後に

今年は、Python系のイベントが複数開催できたり、Python界のいろいろな人とコミュニケーションがとれ良かったと思います。

来年の PyCon JP 2012 の座長も引き続き私が行う事になりました。皆さんの支援をよろしくお願いいたします。

 

次は、PyCon mini JP で基調講演をお願いした、石本(@atsuoishimoto)さんに濃いエントリーを期待したいと思います。

comments powered by Disqus