トップページ⇒tech
1001コメント298KB

Pythonのお勉強 Part6

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
日本Pythonユーザ会
http://www.python.jp/Zope/
Python オフィシャルサイト
http://www.python.org/

前スレ
http://pc5.2ch.net/test/read.cgi/tech/1095684242/
0751デフォルトの名無しさん2005/06/25(土) 20:12:48
>>715 > __all__
標準モジュールでもどちらにするか統率が取れていない様なので、好みの問題でしょうね。
この場合は、test_スクリプト側でモジュールをimportする際に、
名前を指定してimportする。と指摘すべきでした。でも、どちらか片方を選択と言わず、両方併用しても問題なしです。
import * する場合は、名前空間汚染の心配があるので __all__ の定義を推奨します。(個人的に)

>>735
func1がスコープ内(func1()で呼び出せる場所)にあるなら、locals()["func1"]()

>>736
> ところで、moduleオブジェクトとか関数オブジェクトとか、
> 処理系自身が持つクラスやオブジェクトに関して体系的に解説した本とかオンラインドキュメントってあります?

>>> import new
>>> help(new.module)
>>> help(new.function)
処理系の内部的な事だとC/APIドキュメント、ソースコード。
書き掛けですが、http://rupy.rubyforge.org/wiki/wiki.pl 辺りの内容に興味あります?

>>749
大袈裟な例を挙げると、True, False = False, True みたいな事が原因でプログラムが破綻するケースで、
プログラムの動作を保証する為に用いる。const(この場合は、read-only variable)で未然に防げるbugもあります。
# constの役割は、コンパイル時評価/最適化等、他にもあるけど

> const
実行時チェックは、インタプリタだとパフォーマンスに影響する事もあるので,
ソースコードの静的チェックするのは、どうでしょ?
evalやcompile,execを使わない保守的なコードを書いていれば、ある程度チェック出来るはず、
0752デフォルトの名無しさん2005/06/25(土) 20:34:55
...てことで、試しに書いてみた。> ソースの静的チェックによる検出
全然テストしてないけど、叩き台に どぉぞ。

import re, sys, token, tokenize
reConstName = re.compile('^[A-Z][A-Za-z0-9_]+$')
isConstName = reConstName.match

def check_const(filename, defined=[]):
    name = None
    for tok in tokenize.generate_tokens(open(filename).readline):
        if tok[0] == token.NAME and isConstName(tok[1]):
            name = tok[1]
        if tok[0] == token.OP and tok[1] == '=' and name and isConstName(name):
            if name in defined:
                print "%s at line %d: constant '%s' already defined." % (filename, tok[2][0], name)
            else:
                defined.append(name)
            name = None
    return defined

if __name__ == '__main__':
    defined = []
    for filename in sys.argv[1:]:
        check_const(filename, defined)
■ このスレッドは過去ログ倉庫に格納されています