python3の日記

Python3を図書とともに勉強していくブログ

Pythonの学習に役に立つ関数3選

dir関数

ビルトイン関数のdirではその名前空間で定義されているもの一覧をリストで返す。

 【モジュール名】を引数に渡すとそのモジュールで定義されている関数一覧を返す。

import sys
dir(sys) #sysモジュールで定義されている関数の一覧
>>>['__displayhook__', '__doc__', '__excepthook__',
'__name__', '__stderr__',

'__stdin__', '__stdout__', '_current_frames', '_getframe',
'api_version',

'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',
'copyright', 'displayhook', 'dllhandle', 'exc_clear',
'exc_info',

'exc_traceback', 'exc_type', 'exc_value', 'excepthook',
'exec_prefix',

'executable', 'exit', 'getcheckinterval',
'getdefaultencoding',

'getfilesystemencoding', 'getrecursionlimit', 'getrefcount',
'getwindowsversion', 'hexversion', 'maxint', 'maxunicode',
'meta_path',

'modules', 'path', 'path_hooks', 'path_importer_cache',
'platform',

'prefix', 'setcheckinterval', 'setprofile',
'setrecursionlimit',

'settrace', 'stderr', 'stdin', 'stdout', 'subversion',
'version',

'version_info', 'warnoptions', 'winver']

【引数に何も渡さない】呼び出されたスコープ上で定義されている名前の一覧を返す。

a = [1, 2, 3, 4, 5]
import fibo
fib = fibo.fib
dir()
>>>['__builtins__', '__doc__', '__name__', 'a', 'fib', 'fibo', 'sys']

【オブジェクト】を引数に渡さすとそのオブジェクト上の属性一覧を得ることができる。

dir(str)
>>>['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

help関数

インタープリターに組み込まれているビルトインオブジェクトやビルトイン関数のヘルプを返します。

 

【関数】を引数に渡すとその関数の定義が見れる

help(len)
>>>Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.

【type】を引数に渡すとそのオブジェクトクラスが見れる。

help(str)
>>>
Help on class str in module builtins:

class str(object)
| str(object='') -> str
| str(bytes_or_buffer[, encoding[, errors]]) -> str
|
| Create a new string object from the given object. If encoding or
| errors is specified, then the object must expose a data buffer
| that will be decoded using the given encoding and error handler.
| Otherwise, returns the result of object.__str__() (if defined)
| or repr(object).
| encoding defaults to sys.getdefaultencoding().
| errors defaults to 'strict'.
|
| Methods defined here:
|
| __add__(self, value, /)
| Return self+value.
|
| __contains__(self, key, /)
| Return key in self.
|
| __eq__(self, value, /)
| Return self==value.
|
| __format__(...)
| S.__format__(format_spec) -> str
|
| Return a formatted version of S as described by format_spec.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __getitem__(self, key, /)
| Return self[key].
|
| __getnewargs__(...)
|
| __gt__(self, value, /)
| Return self>value.
|
| __hash__(self, /)
| Return hash(self).
|
| __iter__(self, /)
| Implement iter(self).
|
#################省略####################

クソ長い……。これを行うことで、dir関数では不十分だった、メソッドの定義も分かるので便利。

 

【メソッド】の定義を見たいときは、引数にtype.methodを渡すhelp(method)だけでは呼び出せない。だって、methodはオブジェクトにぶら下がって初めて存在するから。

help(list.append)
>>>Help on method_descriptor:

append(...)
L.append(object) -> None -- append object to end

ちなみに、help(help)でhelp関数の定義を見てみると

help(help)
>>>
Help on _Helper in module _sitebuiltins object:

class _Helper(builtins.object)
| Define the builtin 'help'.
|
| This is a wrapper around pydoc.help that provides a helpful message
| when 'help' is typed at the Python interactive prompt.
|
| Calling help() at the Python prompt starts an interactive help session.
| Calling help(thing) prints help for the python object 'thing'.
|
| Methods defined here:
|
| __call__(self, *args, **kwds)
| Call self as a function.
|
| __repr__(self)
| Return repr(self).
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)

という感じでなぜか『 Help on built-in function len in module builtins』ではなく『Help on _Helper in module _sitebuiltins object』が始まってしまう。

Pythonの技術者による海外サイトにおいても

I agree. It should explain the three options:
help(object): help on object or class of object, except
help('name'): help on object/module named 'name'
help(): run utility, which starts with utility help

help(help) prints unhelpful

 と言われてます。プロのPythonプログラマーが「ここおかしい」と言っているところの理由なんてぼくら素人が考えてもしょうがないのでhelp(help)問題は無視する方が無難そう。

type関数

 type関数は引数に渡したもののtypeオブジェクトを戻す。

a = "spam"
print(type(a))
>>> <class "str">
b = []
print(type(b))
>>> <class "list">
class A:
pass

a = A()
print(type(a))
>>> <class "__main__.A">

変数の型を確認する際に便利。今回はここまで。