Pythonモジュール早わかり(マークオンデマンド版)
Python標準ライブラリ
- コアモジュール
-
その他の標準モジュール
- 2.1. 概要
- 2.2. fileinput モジュール
- 2.3. shutil モジュール
- 2.4. tempfile モジュール
- 2.5. StringIOモジュール
- 2.6. cStringIO モジュール
- 2.7. mmap モジュール
- 2.8. UserDictモジュール
- 2.9. UserList モジュール
- 2.10. UserStringモジュール
- 2.11. トレースバックモジュール
- 2.12. errno モジュール
- 2.13. getopt モジュール
- 2.14. getpass モジュール
- 2.15. glob モジュール
- 2.16. fnmatch モジュール
- 2.17. random モジュール
- 2.18. whrandom モジュール
- 2.19. md5 モジュール
- 2.20. sha モジュール
- 2.21. crypt モジュール
- 2.22. ローターモジュール
- 2.23. zlib モジュール
- 2.24. コードモジュール
- スレッドとプロセス
- データ表現
- ファイル形式
- メール・ニュースメッセージの取り扱い
-
ネットワークプロトコル
- 7.1. 概要
- 7.2. ソケットモジュール
- 7.3. 選択モジュール
- 7.4. 非同期モジュール
- 7.5. asynchat モジュール
- 7.6. urllib モジュール
- 7.7. urlparse モジュール
- 7.8. クッキーモジュール
- 7.9. robotparser モジュール
- 7.10. ftplib モジュール
- 7.11. gopherlib モジュール
- 7.12. httplib モジュール
- 7.13. poplib モジュール
- 7.14. imaplib モジュール
- 7.15. smtplib モジュール
- 7.16. telnetlib モジュール
- 7.17. nntplib モジュール
- 7.18. SocketServerモジュール
- 7.19. BaseHTTPServerモジュール
- 7.20. SimpleHTTPServerモジュール
- 7.21. CGIHTTPServer モジュール
- 7.22. cgi モジュール
- 7.23. ウェブブラウザモジュール
- 国際化
- マルチメディア関連モジュール
- データストレージ
- ツール・ユーティリティ
- その他のモジュール
-
実装支援モジュール
- 13.1. dospath モジュール
- 13.2. macpath モジュール
- 13.3. ntpath モジュール
- 13.4. posixpath モジュール
- 13.5. Strop モジュール
- 13.6. imp モジュール
- 13.7. 新モジュール
- 13.8. プリモジュール
- 13.9. sre モジュール
- 13.10. py_compile モジュール
- 13.11. compileall モジュール
- 13.12. ihooks モジュール
- 13.13. linecache モジュール
- 13.14. macurl2path モジュール
- 13.15. nturl2path モジュール
- 13.16. tokenize モジュール
- 13.17. キーワードモジュール
- 13.18. パーサーモジュール
- 13.19. 記号モジュール
- 13.20. トークン・モジュール
-
その他のモジュール
- 14.1. 概要
- 14.2. pyclbr モジュール
- 14.3. filecmp モジュール
- 14.4. cmd モジュール
- 14.5. rexec モジュール
- 14.6. Bastionモジュール
- 14.7. リードラインモジュール
- 14.8. rlcompleter モジュール
- 14.9. statvfs モジュール
- 14.10. カレンダーモジュール
- 14.11. スケジュールモジュール
- 14.12. statcache モジュール
- 14.13. grep モジュール
- 14.14. dircache モジュール
- 14.15. dircmp モジュール
- 14.16. cmp モジュール
- 14.17. cmpcache モジュール
- 14.18. util モジュール
- 14.19. soundex モジュール
- 14.20. タイミングモジュール
- 14.21. posixfile モジュール
- 14.22. bisect モジュール
- 14.23. 膝モジュール
- 14.24. tzparse モジュール
- regex モジュール
- 14.26. regsub モジュール
- 14.27. reconvert モジュール
- 14.28. regex_syntax モジュール
- 14.29. 検索モジュール
- Py 2.0以降の新モジュール
- 追記
<ブロッククオート フレデリック」を役としたいところですが、何百人ものボランティアでも追いつかないでしょう。いや、'Fredrik'はhttpサーバーとスパムフィルターとemacsのwhatsitとその他のものを組み合わせた結果なんです。 <ブロッククオート -ゴードン・マクミラン、1998年6月
Python 2.0には、200以上のモジュールからなる拡張可能な標準ライブラリが付属しています。この本は、各モジュールを簡単に説明し、その使い方を説明するために少なくとも1つの例を提供します。この本には、合計360の例が含まれています。
0.1. 本について
<ブロッククオート 一日中インターネットに書き込むしか能のない人たちが、最も洞察力のある人たちであることは稀です。 <ブロッククオート - ヤコブ・ニールセン、1998年12月
5年前に偶然Pythonに出会い、Pythonの旅が始まり、多くの時間をかけて
comp.lang.python
ニュースグループで質問に答えています。もしかしたら誰かが、まさに自分が欲しいと思っていたモジュールを見つけたかもしれませんが、その使い方がわからなかったのかもしれません。もしかしたら、誰かが自分のタスクに対して間違ったモジュールを選んでしまったのかもしれません。新しい車輪を発明するのに飽きた人がいるかもしれません。たいていの場合、マニュアルよりも短い例のほうが役に立ちます。
本書は、標準ライブラリの隅々までカバーするために、3,000以上のニュースグループでの議論と、もちろん多くの新しいスクリプトの中から、最高のものを選び出しました。
それぞれのスクリプトが分かりやすく、コードの再利用がしやすいように心がけました。コメントは意図的に短くし、背景を深く知りたければ、各Pythonのリリースにあるリファレンスマニュアルを参照することができます。この本で重要なのは、サンプルコードです。
ご意見、ご感想、バグレポートなどありましたら、下記までお願いします。 [email protected] . すべてのメールに可能な限り目を通しますが、迅速な対応ができない場合があります。
本書の更新情報などは、以下をご覧ください。 http://www.pythonware.com/people/fredrik/librarybook.htm
なぜTkinterがないのですか?
この本では、(オプションの)Tkinter ui(ユーザインタフェース)ライブラリを除き、標準ライブラリ全体をカバーしています。これには多くの理由がありますが、時間やこの本のスペース、そして私がTkinterに関する別の本を執筆中であることが大きな理由です。
これらの書籍に関する情報は、以下をご覧ください。 http://www.pythonware.com/people/fredrik/tkinterbook.htm . (わざわざ読まなくてもいい、別の404)
<スパン 製品詳細
この本はDocBook SGMLで書かれており、Secret LabsのPythonWorks、Excosoft Documentor、James ClarkのJade DSSSLプロセッサ、Norm WalshのDocBookスタイルシート、そしてもちろん、いくつかのPythonスクリプトなど、さまざまなツールを使用しました。
校正者の方々に感謝します。Tim Peters, Guido van Rossum, David Ascher, Mark Lutz, and Rael Dornfest、そしてPythonWareのメンバーにも感謝します。Matthew Ellis, Håkan Karlsson, Rune Uhlin に感謝します。
Lenny Muellnerには、SGMLファイルをこの本にするのを手伝ってもらい、Christien Shangrawには、これらのコードファイルを付属のCD(以下のサイトで入手可能)に組み込んでもらいました。 http://examples.oreilly.com/pythonsl 奇跡的に404ではありません)。
0.2. コード規約
本書では、次のような使用上の決まりを設けています。
イタリック
ファイル名やコマンドに使用します。また、用語の定義にも使用される。
Equal-width fonts e.g. Python
Equal-Width Bold
コード実行結果について。
0.3. 例題について
言及されていない限り、すべての例は Python 1.5.2 と Python 2.0 の下で動きます。Python 2.4/2.5 で ...... を実行できるかどうかは、関係する翻訳者に依存します。
一部のプラットフォーム関連モジュールのスクリプトを除き、すべてのサンプルはWindows、Solaris、Linuxで問題なく実行できます。
すべてのコードには著作権があります。もちろん、これらのモジュールは自由に使うことができますし、どこから入手したのか(?)を忘れないでください。学んでください。
ほとんどのサンプルは、ファイル名に使用するモジュール名を含み、その後に"が続きます。
-example-
と、一意のシリアルナンバーが記載されています。なお、いくつかの例は、この本の以前のバージョンと一致するように、順番に表示されていません。
(エフボットガイド) 標準パイソンライブラリ
.
この本に付属していたCDの内容は、オンラインで確認することができます( http://examples.oreilly.com/pythonsl ). 詳細や最新情報については http://www.pythonware.com/people/fredrik/librarybook.htm . (ft、また404です。読まないように気をつけてください〜)
0.4. お問い合わせ方法
パイソンジャングルQQグループ 43680167
フェザー(校正者)QQ:85660100
1. コアモジュール
<ブロッククオート C言語ランタイムライブラリに含まれる関数はWin32 APIの一部ではないため、このバグの影響を受けるアプリケーションは非常に限定的であると考えています" <ブロッククオート - マイクロソフト、1999年1月1.1. はじめに
Pythonの標準ライブラリには、Python言語自体に固有の型や宣言から、一部のプログラムでのみ使用される無名のモジュールまで、さまざまなモジュールが含まれています。
この章では、基本的な標準ライブラリモジュールのいくつかを説明します。どんな大規模なPythonプログラムでも、これらのモジュールのほとんどを直接的または間接的に使用する可能性があります。
1.1.1. 組み込み関数と例外
次の2つのモジュールは、他のモジュールを合わせたものより重要です:組み込み関数(len, int, range ...など)の定義
_ _builtin_ _
すべての組み込み例外を定義するモジュール、および
exceptions
モジュールを使用します。
Pythonは起動時にこの2つのモジュールをインポートするので、どのプログラムでも使用することができます。
1.1.2. オペレーティング・システム・インターフェース・モジュール
Pythonには、POSIX標準APIと標準C言語ライブラリを利用したモジュールが多数あります。これらは、基盤となるオペレーティングシステムへのプラットフォーム非依存のインタフェースを提供します。
このカテゴリには以下のモジュールが含まれます: ファイルおよびプロセスのハンドリングを提供するモジュール
os
プラットフォームに依存しないファイル名処理 (ディレクトリ名、ファイル名、サフィックスなどの分割) を提供するモジュール。
os.path
モジュール、および
time/datetime
モジュールになります。
[!Feather note: datetime is a new module in Py2.3, providing enhanced time handling]
その延長線上で、ネットワーキングやスレッディングのモジュールもこのカテゴリーに入る。Pythonはすべてのプラットフォーム/バージョンでそれらを実装しているわけではありませんが。
1.1.3. 型サポートモジュール
標準ライブラリには、組み込みの型操作をサポートするためのライブラリが多数存在します。
string
モジュールは一般的な文字列処理を実装しています。
math
モジュールは、数学の演算と定数を提供します(π、e はこのタイプの定数です)。
cmath
モジュールは、複素数の定数として
math
関数を使用します。
1.1.4. 正規表現
re
モジュールはPythonの正規表現サポートを提供します。正規表現は、文字列や特定の部分文字列をマッチさせるために使われる、構文に特化した文字列パターンです。
1.1.5. 言語サポートモジュール
sysモジュールでは、モジュール検索パスやインタプリタのバージョン番号など、インタプリタ関連のパラメータにアクセスすることができます。
operator
モジュールは、組み込みの演算子と同じことをする関数を提供します。
copy
モジュールはオブジェクトのコピーを可能にし、Python 2.0 の新機能として
gc
モジュールは、ガベージコレクションの制御を提供します。
1.2. __builtin_ __module
このモジュールには、Pythonで使用される組み込み関数が含まれています。通常、このモジュールを手動でインポートする必要はありません。Pythonがあなたのためにすべてを行います。
1.2.1. タプルや辞書を引数にした関数の呼び出し
Pythonでは関数の引数のリストをリアルタイムに作成することができます。すべての引数をタプルに入れ、関数を呼び出すには、組み込みの
apply
関数で呼び出すことができます。例えば
例1-1
.
1.2.1.1. 例1-1. apply 機能の使用
File: builtin-apply-example-1.py
def function(a, b):
print a, b
apply(function, ("whither", "canada?"))
apply(function, (1, 2 + 3))
whither canada?
1 5
関数にキーワード引数を渡すには、辞書を
apply
関数を第3引数として使用する場合、以下のようになります。
例1-2
.
1.2.1.2. 例1-2. キーワード引数を渡すためのapply関数の使用
File: builtin-apply-example-2.py
def function(a, b):
print a, b
apply(function, ("crunchy", "frog"))
apply(function, ("crunchy",), {"b": "frog"})
apply(function, (), {"a": "crunchy", "b": "frog"})
crunchy frog
crunchy frog
crunchy frog
apply
File: builtin-apply-example-3.py
class Rectangle:
def _ _init_ _(self, color="white", width=10, height=10):
print "create a", color, self, "size", width, "x", height
class RoundedRectangle(Rectangle):
def _ _init_ _(self, **kw):
apply(Rectangle._ _init_ _, (self,), kw)
rect = Rectangle(color="green", height=100, width=100)
rect = RoundedRectangle(color="blue", height=20)
create a green
関数の一般的な使用法は、サブクラスからベースクラスへコンストラクタの引数を渡すことです。特に、コンストラクタが多くの引数を取る場合です。たとえば、次のような場合です。
例1-3
が表示されます。
1.2.1.3. 例1-3. apply 関数を使った基底クラスのコンストラクタの呼び出し
*
<長方形 大きさ 100 x 100 青色を作成する <円形矩形 サイズ 10 x 20Python 2.0は同じことをするための別の方法を提供します。伝統的な関数呼び出しを使うだけです。
**
を使ってタプルをマークします。result = function(*args, **kwargs) result = apply(function, args, kwargs)
を使って、辞書をマークアップしています。次の二つの文は等価である。
import
1.2.2. モジュールの読み込みと再読み込み
大きなPythonのプログラムを書いたことがある人なら知っているはずです。
from-import
文は外部モジュールをインポートするために使われます(もちろんimport
のバージョン)。しかし、あまり知られていないかもしれませんが_ _import_ _
実際には、組み込み関数-plugin
が動作するようになります。このトリックを使うと、関数を動的に呼び出すことができます。これは、モジュールの名前(文字列)しか知らない場合に便利です。 例1-4 はこの使い方を示しており、" で始まるすべての関数を動的にインポートしています。
File: builtin-import-example-1.py import glob, os modules = [] for module_file in glob.glob("*-plugin.py"): try: module_name, ext = os.path.splitext(os.path.basename(module_file)) module = _ _import_ _(module_name) modules.append(module) except ImportError: pass # ignore broken modules # say hello to all modules for module in modules: module.hello() example-plugin says hello
モジュールで終わります。1.2.2.1. 例1-4. _ _import_ _ 関数を使用したモジュールの読み込み
import
このプラグインモジュールは、ファイル名に "-"(ハイフン)が入っていることに注意してください。つまり、通常の
File: example-plugin.py def hello(): print "example-plugin says hello"
Pythonの識別子では"-"が使えないからです。例 1-5 が表示されます。 例1-4 .NETで使用されているプラグイン
1.2.2.2. 例1-5. プラグイン例
File: builtin-import-example-2.py def getfunctionbyname(module_name, function_name): module = _ _import_ _(module_name) return getattr(module, function_name) print repr(getfunctionbyname("dumbdbm", "open"))
例1~6 は、与えられたモジュール名と関数名に基づいて、 望みの関数オブジェクトを取得する方法を示しています。
1.2.2.3. 例1-6. 特定の関数を取得するために_ _import_ _関数を使用する
string
<関数また、この関数を使用して、モジュールの遅延ロードを実装することができます。例えば 例1-7 での
File: builtin-import-example-3.py class LazyImport: def _ _init_ _(self, module_name): self.module_name = module_name self.module = None def _ _getattr_ _(self, name): if self.module is None: self.module = _ _import_ _(self.module_name) return getattr(self.module, name) string = LazyImport("string") print string.lowercase abcdefghijklmnopqrstuvwxyz
モジュールは、最初に使用されたときのみインポートされます。1.2.2.4. 例1-7. 遅延インポートのための_ _import_ _関数の使用
File: builtin-reload-example-1.py import hello reload(hello) reload(hello) hello again, and welcome to the show hello again, and welcome to the show hello again, and welcome to the show
Pythonはロードされたモジュールを再ロードするための基本的なサポートも提供します。[例 1-8 #eg-1-8 は 3 回ロードされます。 hello.py ファイルを作成します。
1.2.2.5. 例 1-8. リロード機能の使用
[Note: ^ The original sentence is incomprehensible and will be discussed later.]
reloadは引数として直接モジュールを受け取ります。
from-import
モジュールをリロードすると、モジュールは再コンパイルされ、新しいモジュールがモジュール辞書内の古いモジュールを置き換えることに注意してください。しかし、元のモジュールのクラスで作成されたインスタンスは、まだ古いモジュールを使用しています(そして、更新されません)。
同様に
dir
モジュールコンテンツに直接作成されたものは、更新されません。1.2.3. 名前空間について
dir
指定されたモジュール、クラス、インスタンス、またはその他の型のすべてのメンバーのリストを返します。これは対話的な Python インタープリタで有用かもしれませんが、他の場所でも使うことができます。 例1-9 が表示されます。File: builtin-dir-example-1.py def dump(value): print value, "=>", dir(value) import sys dump(0) dump(1.0) dump(0.0j) # complex number dump([]) # list dump({}) # dictionary dump("string") dump(len) # function dump(sys) # module 0 => [] 1.0 => [] 0j => ['conjugate', 'imag', 'real'] [] => ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] {} => ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'update', 'values'] string => []
関数を使用します。1.2.3.1. 例1-9. dir関数の使用
getmember
<組み込み => ['_ _doc_ _', '_ _name_ _', '_ _stderr_ _', '_ _stdin_ _', '_ _stdout_ _', 'argv', 'builtin_module_names', 'copyright', 'dllhandle', exc_info'、'exc_type'、'exec_prefix'、'executable'。 ... 例では 例1-10 で定義されているFile: builtin-dir-example-2.py class A: def a(self): pass def b(self): pass class B(A): def c(self): pass def d(self): pass def getmembers(klass, members=None): # get a list of all class members, ordered by class if members is None: members = [] for k in klass._ _bases_ _: getmembers(k, members) for m in dir(klass): if m not in members: members.append(m) return members print getmembers(A) print getmembers(B) print getmembers(IOError) ['_ _doc_ _', '_ _module_ _', 'a', 'b'] ['_ _doc_ _', '_ _module_ _', 'a', 'b', 'c', 'd'] ['_ _doc_ _', '_ _getitem_ _', '_ _init_ _', '_ _module_ _', '_ _str_ _'] getmembers
関数は、与えられたクラスによって定義されたすべてのクラスレベルのプロパティとメソッドを返します。1.2.3.2. 例1-10. dir 関数を使ったクラスの全メンバーの検索
[Note: Dictionaries are unordered, while lists and tuples are ordered, and there is a discussion of ordered dictionaries on the web] vars
vars
関数は順序付きリストを返します。あるメンバーの名前がリスト内で早く登場するほど、そのメンバーはクラス階層の上位に位置することになります。順序が重要でない場合は、リストの代わりに辞書を使用できます。locals()
File: builtin-vars-example-1.py book = "library2" pages = 250 scripts = 350 print "the %(book)s book contains more than %(scripts)s scripts" % vars() the library book contains more than 350 scripts
関数は、各メンバーの現在値を含む辞書を返すという点では似ています。もしあなたがdef function(value): print value function(1) function(1.0) function("one") type
は、現在のローカルな名前空間で見える要素を返します (File: builtin-type-example-1.py def dump(value): print type(value), value dump(1) dump(1.0) dump("one")
関数を使用します)。例えば 例1-11 は次のように表される。1.2.3.3. 例 1-11. vars関数の使用
is
1.2.4. オブジェクトの種類を確認する
Pythonは動的型付け言語であり、与えられた変数名が異なる文脈で異なる型に束縛される可能性があることを意味します。次の例では、同じ関数が、整数、浮動小数点数、文字列に対して呼び出されています。
File: builtin-type-example-2.py def load(file): if isinstance(file, type("")): file = open(file, "rb") return file.read() print len(load("samples/sample.jpg")), "bytes" print len(load(open("samples/sample.jpg", "rb"))), "bytes" 4672 bytes 4672 bytes callable
apply
機能 例1-12 に示すように)、変数の型をチェックすることができます。この関数は 型記述子 これはPythonインタプリタが提供するそれぞれの型に対して異なるものです。1.2.4.1. 例1-12. 型関数の使用
lambda
<タイプ 1 <タイプ 1.0 <タイプ 一それぞれのタイプには対応するタイプオブジェクトがあるので
_ _call_ _
演算子(object identity?)で型を確認することができます。(例 例1-13 を示す)。1.2.4.2. 例1-13. ファイル名とファイルオブジェクトのための型関数の使用
File: builtin-callable-example-1.py def dump(function): if callable(function): print function, "is callable" else: print function, "is *not* callable" class A: def method(self, value): return value class B(A): def _ _call_ _(self, value): return value a = A() b = B() dump(0) # simple objects dump("string") dump(callable) dump(dump) # function dump(A) # classes dump(B) dump(B.method) dump(a) # instances dump(b) dump(b.method) 0 is *not* callable string is *not* callable
_ _call_ _
のような関数があります。 例1-14 を使用すると、オブジェクトが呼び出し可能かどうかを(直接またはoperator
). 関数については、メソッド。type
を実装した関数、クラス、およびisinstance
メソッドがあり、これらはすべてTrueを返します。1.2.4.3. 例1-14. 呼び出し可能な関数の使用
isinstance
<ビルトイン は呼び出し可能 Aは呼び出し可能 Bは呼び出し可能 <アンバウンド は呼び出し可能です。 は *not* callable です。 は呼び出し可能です。 <メソッド は呼び出し可能です。 クラスオブジェクト(A、B)は呼び出し可能であり、呼び出されると新しいオブジェクト(クラスインスタンス)が生成されることに注意してください。しかし、クラス A のインスタンスは呼び出し可能ではありません。なぜなら、そのクラスにはFile: builtin-isinstance-example-1.py class A: pass class B: pass class C(A): pass class D(A, B): pass def dump(object): print object, "=>", if isinstance(object, A): print "A", if isinstance(object, B): print "B", if isinstance(object, C): print "C", if isinstance(object, D): print "D", print a = A() b = B() c = C() d = D() dump(a) dump(b) dump(c) dump(d) dump(0) dump("string")
メソッドを使用します。を使用することができます。
issubclass
モジュールは、オブジェクトが組み込み型(数値、連番、辞書など)であるかどうかをチェックするための関数を見つけます。しかし、(基本的なシーケンスメソッドを実装したような)クラスを作るのは簡単なので、これらの型に対して明示的な型判定を行うのは良いアイデアではありません。クラスとインスタンスを扱う場合は、もう少し複雑です。Pythonはクラスを本質的に型付けされたものとして扱いません。その代わりに、すべてのクラスは特別なクラス型であり、クラスのすべてのインスタンスは特別なインスタンス型になります。
つまり
isinstance
関数を使って、あるインスタンスが指定したクラスに属しているかどうかを調べます。この問題を解決するにはissubclass
この関数は、オブジェクトが与えられたクラス (またはそのサブクラス) のインスタンスであるかどうかをチェックします。 例1-15 が表示されます。File: builtin-issubclass-example-1.py class A: pass class B: pass class C(A): pass class D(A, B): pass def dump(object): print object, "=>", if issubclass(object, A): print "A", if issubclass(object, B): print "B", if issubclass(object, C): print "C", if issubclass(object, D): print "D", print dump(A) dump(B) dump(C) dump(D) dump(0) dump("string") A => A B => B C => A C D => A B D 0 => Traceback (innermost last): File "builtin-issubclass-example-1.py", line 29, in ? File "builtin-issubclass-example-1.py", line 15, in dump TypeError: arguments must be classes
関数を使用します。1.2.4.4. 例 1-15. isinstance関数の使用
eval
=> A => B=> A C => A B D 0 => 文字列 =>
File: builtin-eval-example-1.py def dump(expression): result = eval(expression) print expression, "=>", result, type(result) dump("1") dump("1.0") dump(""'string'") dump("1.0 + 2.0") dump("'*' * 10") dump("len('world')") 1 => 1
関数も同様で、あるクラスオブジェクトが与えられたクラスと同じか、あるいはそのサブクラスであるかをチェックするために使われます。例えば 例1-16 が表示されます。注
eval
は任意のオブジェクトを引数として受け取りますが_ _import_ _
関数は TypeError 例外が発生します。1.2.4.5. 例 1-16. issubclass 関数の使用法
os
1.2.5. Python 式の計算
Pythonは、プログラムでインタプリタと対話するための様々な方法を提供します。例えば
File: builtin-eval-example-2.py print eval("_ _import_ _('os').getcwd()") print eval("_ _import_ _('os').remove('file')") /home/fredrik/librarybook Traceback (innermost last): File "builtin-eval-example-2", line 2, in ? File "
関数は文字列を受け取り、それをPythonの式として評価します。文字列や単純な式を渡すこともできますし、Pythonの組み込み関数を使用することもできます。例えば 例1-17 が表示されます。1.2.5.1. 例1-17. eval関数の使用
File: builtin-eval-example-1.py def dump(expression): result = eval(expression) print expression, "=>", result, type(result) dump("1") dump("1.0") dump(""'string'") dump("1.0 + 2.0") dump("'*' * 10") dump("len('world')") 1 => 1
<タイプ 1.0 => 1.0 <タイプ '文字列' => 文字列 <タイプ 1.0 + 2.0 => 3.0 <タイプ '*' * 10 => **************************************************************************************************** <タイプ len('world') => 5 <タイプ文字列ソースのセキュリティに不安がある場合は
eval
を使用する場合、何らかのトラブルに巻き込まれる可能性があります。例えば、あるユーザが_ _import_ _
関数で読み込むことができます。os
モジュールを作成し、ハードディスクからファイルを削除します (例. 例1-18 を表示します)。1.2.5.2. 例1-18. eval関数による任意のコマンドの実行
File: builtin-eval-example-2.py print eval("_ _import_ _('os').getcwd()") print eval("_ _import_ _('os').remove('file')") /home/fredrik/librarybook Traceback (innermost last): File "builtin-eval-example-2", line 2, in ? File "
<文字列 0行目、? os.error: (2, 'そのようなファイルまたはディレクトリがありません')ここでは os.error 例外が発生します。 Pythonは実際にファイルを削除しようとしているのです!
幸いなことに、この問題は簡単に解決することができます
関連
-
[解決済み】ImportError: Missing required dependencies ['numpy'] (必要な依存関係がありません)
-
[解決済み】dmatricesにカラムが表示されない
-
Python辞書ループ RuntimeError: 反復中に辞書のサイズが変更されたエラー解析
-
[解決済み] このラムダ関数がどのように機能するかを理解する
-
[解決済み] エラーです。pip に一致するディストリビューションは見つかりませんでした
-
ImportError: tensorflow.tensorboard.tensorboard' という名前のモジュールはありません。
-
python error TypeError: 'NoneType' object is not subscriptable Solution
-
python TypeError: 'NoneType' オブジェクトは添え字を付けられません。
-
python リクエストを解決する 中国の雑多なコード
-
pythonはgoまたはcを呼び出す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】整数のリストから、指定された値に最も近い数を得る
-
[解決済み】TypeError: 1つの要素を持つ整数の配列のみがインデックスに変換可能です 3
-
Python opencv画像セグメンテーションアルゴリズムの深い理解
-
[解決済み] Pythonのnumpy.exp関数におけるオーバーフローエラー
-
[解決済み] PyMongo 3でServerSelectionTimeoutErrorが発生するのはなぜですか?
-
[解決済み] Pythonで16進文字列の全バイトのxorチェックサムを作成する
-
IndexError: Index 0 is out of bounds for axis 0 with size 0
-
socket.gaierrorを解決する。[Errno 11001] getaddrinfo に失敗しました。
-
は1~2の位置引数を取りますが、3が与えられました。