since 2022-11-01
https://peps.python.org/pep-0397/
https://docs.python.org/3/using/windows.html#python-launcher-for-windows
Python 3.11.0 で確認したら "-V" オプションで Anaconda なども選べるようになっていた
>py -0p -V:3.11 * C:\Users\nishimotz\AppData\Local\Programs\Python\Python311\python.exe -V:3.10 C:\Users\nishimotz\AppData\Local\Programs\Python\Python310\python.exe -V:3.9 C:\Users\nishimotz\AppData\Local\Programs\Python\Python39\python.exe -V:3.7-32 C:\Users\nishimotz\AppData\Local\Programs\Python\Python37-32\python.exe -V:2.7 C:\Python27\python.exe -V:ContinuumAnalytics/Anaconda39-64 D:\anaconda3\python.exe >py -V:ContinuumAnalytics/Anaconda39-64 Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Warning: This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.io/activation Type "help", "copyright", "credits" or "license" for more information. >>> > py -3.11-64 Python 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
末尾に -64 をつける方法は廃止されるらしい。arm64 と amd64 があるから、だろうか。。
以下は最近更新された情報
以下は最近更新されていなかった情報
ループを回す : xrange を使って。
>>> for i in xrange(3): ... print i ... 0 1 2
s = "1.23" float(s) s = "2" int(s)
逆はフォーマット演算子でできる。
"%.1f" % 1.234
「Python チュートリアル」初版 p.33 あたり
シーケンス ('y', 'ye', 'yes') これはタプル
obj.methodname() : メソッド呼び出し
メソッドの仮引数 (a, *b, **c)
* 演算子 : リストやタプルからアンパックする ** 演算子 : ディクショナリからキーワード引数にアンパックする
docstring http://www.python.jp/doc/contrib/peps/pep-0257.txt
return lambda x : x + n
文字コードを変換して logfile に書き込みを行う関数のオブジェクト print_log を作る:
logfile = open(outwavfile + '.log', 'w') print_log = lambda s : logfile.write(s.decode('shift_jis').encode('utf-8')) # print_log('text: ' + s)
p.41 あたり
リスト: [ xxxxxxxxxx ]
シーケンスに関数を適用する
リスト内包
[式 for x in vec] vec = [1,2,3] として 式 = 3*x とすると [3,6,9] が得られる >>> vec = [1,2,3] >>> v2 = x * 2 for x in vec SyntaxError: invalid syntax >>> v2 = [x * 2 for x in vec] >>> v2 [2, 4, 6]
del文 : リストのインデックス指定された要素を削除する
del a[0]
配列は足し算できる:
>>> b = [1,2,3] >>> c = [4,5,6] >>> d = b + c >>> d [1, 2, 3, 4, 5, 6]
ソートには sort() メソッドが使える:
>>> d += b >>> d [1, 2, 3, 4, 5, 6, 1, 2, 3] >>> d.sort() >>> d [1, 1, 2, 2, 3, 3, 4, 5, 6] >>> d.sort(reverse=True) >>> d [6, 5, 4, 3, 3, 2, 2, 1, 1]
参考 http://mglab.blogspot.com/2008/06/python-sortsorted_3738.html
タプルとは:カンマで区切られた値。イミュータブルなオブジェクト。
カッコはタプルの生成を意味するわけではないらしい。
t = 1, 2, 3 # パッキング 要素数0のタプル : t = () 要素数1のタプル : t = (1,) x,y,z = 1,2,3 # タプル・パッキングされた右辺を、シーケンス・アンパッキングして左辺へ
集合(set) : 重複しない順不同の要素
存在判定(membership testing) ⇒ in 演算子
s = set([ xx, xx, xx ]) で生成する
'xx' in s : True or False
ディクショナリ(ハッシュ):キーの唯一性
空のディクショナリ : {}
生成 d = { xx:xx, yy:yy }
keys() メソッド:すべてのキーのリスト
存在判定
コンストラクタ
dict() コンストラクタ ← キーワード引数からも生成可 [(k1,v1), (k2,v2), .... ] リストから生成
ループをまわす
for k,v in xxx.iteritems(): print k,v
シーケンスのループのための関数
enumerate() zip() reversed() sorted()
a > 1 and a < 3 #=> 1 < a < 3 比較の連鎖 a = s1 or s2 or s3 #=> 空でない最初の値 シーケンス要素の比較
条件による値の振り分け
>>> print "hoge" if True else "fuga" hoge >>> print "hoge" if False else "fuga" fuga
p.55
import モジュール名 #=> モジュール名.関数() # グローバル変数 __name__ にモジュール名が入る
モジュールのインポートとは実行である
モジュールはプライベートなシンボル表を持つ
一つ上のディレクトリにある scripts を path に加えるおまじない:
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../scripts")
インポートする側のシンボル表に直接取り込むのがfrom文
from モジュール名 import 関数 from モジュール名 import * # _で始まる名前は取り込まない
from future で将来バージョンの機能を有効にする:
from __future__ import print_function print('hoge')
sys.path ← PYTHONPATH 環境変数
http://www.python.jp/doc/2.5/tut/node8.html
「組込み関数 dir() は、あるモジュールがどんな名前を定義しているか調べるために使われます」
>>> import re >>> dir(re) ['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']
ビルトイン関数 dir(モジュール)
パッケージ __init__.py
「全てのクラスメンバ (データメンバも含む) は public (公開されたデータ) 」 「メンバ関数はすべて 仮想関数 (virtual) 」 「属性=ドットに続く名前すべて」「属性は読取り専用にも、書き込み専用にもできる」 「クラス定義から普通に (定義の終端に到達して) 抜けると、 クラスオブジェクト (class object) が生成されます。 クラスオブジェクトは、基本的にはクラス定義で作成された名前空間の内容をくるむラッパ (wrapper) です。 生成されたクラスオブジェクトは復帰したローカルスコープにクラス定義のヘッダで指定した名前で結び付けられます。」 x = MyClass() # クラスの新しいインスタンス (instance) を生成し、そのオブジェクトをローカル変数 x へ代入 クラスのインスタンスを生成すると、新しく生成されたクラスインスタンスに対して自動的に __init__() を呼び出す。 「インスタンスオブジェクトが理解できる唯一の操作は、属性の参照です。 有効な属性の名前には二種類(データ属性およびメソッド)あります。 」 「クラス・オブジェクトでは2種類の演算: 属性参照とインスタンス生成をサポートしています」 「メソッドについて特別なこととして、オブジェクトが関数の第 1 引数として渡される」 「__spam (先頭に二個以上の下線文字、末尾に高々一個の下線文字) という形式の識別子は _classname__spam へと置換される」
slots を使うと ruby の struct のようなことができる。
とはいってもイコール演算でプロパティの値を比較してくれるわけではない。。
>>> class Hoge(object): ... __slots__ = ('a', 'b') ... >>> o = Hoge() >>> o.a = True >>> o.b = False >>> p = Hoge() >>> p.a = True >>> p.b = False >>> o == p False >>> o == o True
namedtuple はイコール演算子で比較できるが、プロパティの値を更新できない。
>>> from collections import namedtuple >>> Foo = namedtuple('Foo', 'a b') >>> o2 = Foo(True, False) >>> p2 = Foo(True, False) >>> o2 == p2 True >>> q2 = Foo(True, True) >>> o2 == q2 False >>> o2.a True >>> o2.b False >>> o2.b = True Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: can't set attribute
os.system() が使える。
from os import * system("platex nishimoto.tex")
ruby の Logger クラス http://www.ruby-lang.org/ja/man/html/logger.html のようなことをするには?
logging.Logger でログファイルを簡単に扱える。
glob や shutil が使える。
ruby の FileUtils.mkdir_p のようなものを探したら見つけた
http://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python
import os import errno def mkdir_p(path): try: os.makedirs(path) except OSError as exc: if exc.errno == errno.EEXIST: pass else: raise exc
ディレクトリのファイルを別のディレクトリに移す。
import glob import shutil shutil.rmtree('logs') mkdir_p('logs') for f in glob.glob("out\\*.logs"): shutil.move(f, "logs")
since 2011-11-10
カレントディレクトリの下を探して、ファイル名の末尾が ~1~ ~2~ などであるものを見つけて、(os.remove の行が有効の場合)削除する。
import os, re for root, dirs, files in os.walk('.'): for f in files: if re.match(".+~\d~", f): s = root + os.sep + f print s # os.remove(s)
since 2011-12-20
def convert_file(src_file, src_enc, dest_file, dest_enc): with open(src_file) as sf: with open(dest_file, "w") as df: while 1: s = sf.readline() if not s: break df.write(s.decode(src_enc).encode(dest_enc))
pickleを使う http://python.g.hatena.ne.jp/muscovyduck/20080820/p1
<html> <hr> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311442X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51PD65oIzgL._SL160_.jpg" alt="Pythonチュートリアル 第2版" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311442X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Pythonチュートリアル 第2版</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/487311442X/r4wh-22/ref=nosim/" title="Pythonチュートリアル 第2版" target="_blank">amazlet</a> at 10.10.24</div></div><div class="amazlet-detail">Guido van Rossum <br />オライリージャパン <br />売り上げランキング: 89762<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 気軽に読めるのは良いが、説明不足感はある<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311442X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>
<html> <hr> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" alt="エキスパートPythonプログラミング" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">エキスパートPythonプログラミング</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4048686291/r4wh-22/ref=nosim/" title="エキスパートPythonプログラミング" target="_blank">amazlet</a> at 10.10.24</div></div><div class="amazlet-detail">Tarek Ziade <br />アスキー・メディアワークス <br />売り上げランキング: 10775<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> Pythonハッカーになるために必要な事を網羅的に紹介した本<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>
<html> <hr> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798032948/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41bZDMzzeTL._SL160_.jpg" alt="Pythonプロフェッショナルプログラミング" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798032948/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Pythonプロフェッショナルプログラミング</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4798032948/r4wh-22/ref=nosim/" title="Pythonプロフェッショナルプログラミング" target="_blank">amazlet</a> at 12.05.13</div></div><div class="amazlet-detail">ビープラウド <br />秀和システム <br />売り上げランキング: 13666<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798032948/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>