読者です 読者をやめる 読者になる 読者になる

Pythonの公式ドキュメントを読む/組み込み関数 その1

こんばんは。
昨日勢いでソースコードを読みに行ったけど、提供されているドキュメントを読むべきだったと反省した。というわけで、ソースコードを読むというのは置いておいて、公式のドキュメントを読んでいこうと思う。

Pythonの公式ドキュメント

Pythonの公式ドキュメントはここにある。
3.6.1 Documentation
日本語でも提供されており、導入としては非常にありがたい。

そして今回読んでいくのは組み込み関数のドキュメント。
2. 組み込み関数 — Python 3.6.1 ドキュメント

組み込み関数

何も import しなくても使える関数のこと。全部で68個の関数があるらしい。

今回触った関数は以下の通り

  • abs(x)
  • all(iterable)
  • any(iterable)
  • ascii(object)
  • bin(x)
  • class bool([x])

abs(x)

x の絶対値を返す関数。複素数にも対応しているとのこと。

all(iterable)

iterableの要素がすべて真なら True が返るが、途中で要素でないものがあると False が返る。要素に False が含まれているという状況でしか、 False は返らないかもしれない。

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

any(iterable)

all と似ているが、iterable の要素に真が含まれていれば True が返る。

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

ascii(object)

説明を読んだ雰囲気だと object の文字を印字できる状態で出力するということ。印字できない文字というのが何を指しているのかはわからない。

bin(x)

整数を2進数に変換する関数。

>>> bin(5)
'0b101'
>>> bin(10)
'0b1010'

class bool([x])

ブール値を返す関数。中の条件しだいで False が返る。

>>> bool('a')
True
>>> bool('a'=='b')
False

続きはまた明日。

Pythonの標準ライブラリを読む/os.py その1

こんにちは。
会社の先輩から「自分の足場となる言語は、標準ライブラリまで読み込め」という言葉がありました。現在の自分はなんとなくPythonが若干使えるぐらいの気持ちなので、少しでもきれいなプログラムが書けるようにやっていこうと思います。
毎日少しずつ投稿していこうと思います。

import

import abc
import sys, errno
import stat as st

この中で使ったことがあるのはひとつもない。文中で出てきたら潜ろう。

_names = sys.builtin_module_names

早速出てきた。ただlib配下には置かれておらず、どこから読み込んでいるのか不明。とりあえずスルーする。

# Note:  more names are added to __all__ later.
__all__ = ["altsep", "curdir", "pardir", "sep", "pathsep", "linesep",
           "defpath", "name", "path", "devnull", "SEEK_SET", "SEEK_CUR",
           "SEEK_END", "fsencode", "fsdecode", "get_exec_path", "fdopen",
           "popen", "extsep"]

__all__ にリストで色々と追加された。どこかで使われるでしょう。

def _exists(name):
    return name in globals()

_exists という関数が定義された。golobals() の中に引数 name があれば true、なければ false を返す関数のように見える。

def _get_exports_list(module):
    try:
        return list(module.__all__)
    except AttributeError:
        return [n for n in dir(module) if n[0] != '_']

_get_exports_list という関数が定義された。引数 module の __all__ を、list にして返す関数。AttributeErrorが発生した場合には、別のものをらしいんだけど、dir が os 内に見当たらないためよくわからない。
そもそもどういうことが起きたらAttributeErrorが発生するのだろう。module.__all__がなかった場合なのかな。

if 'posix' in _names:
    name = 'posix'
    linesep = '\n'
    from posix import *
    try:
        from posix import _exit
        __all__.append('_exit')
    except ImportError:
        pass
    import posixpath as path

    try:
        from posix import _have_functions
    except ImportError:
        pass

    import posix
    __all__.extend(_get_exports_list(posix))
    del posix

elif 'nt' in _names:
    name = 'nt'
    linesep = '\r\n'
    from nt import *
    try:
        from nt import _exit
        __all__.append('_exit')
    except ImportError:
        pass
    import ntpath as path

    import nt
    __all__.extend(_get_exports_list(nt))
    del nt

    try:
        from nt import _have_functions
    except ImportError:
        pass

else:
    raise ImportError('no os specific module found')

初っ端から最初に飛ばした _names が使われている。うーん、sys を探して読んだほうが良さそうだ…。

眠くなってきたので今日はこのあたりで終了。

初めましての人は初めまして

簡単な挨拶

なんとなくメモ代わりに技術ブログを立ち上げました。まだまだ勉強中なので変なことを言うかもしれませんが、その際は優しくご指摘ください。

今関心がある項目

言語は、PythonとNode.jsかなと思います。正直使えればオッケーな人間なので、動けばなんでも良い感じ。 今はどちらかというと思想的な方向に関心がある感じです。

今後予定していること

  • AWSの簡単なまとめ記事
    • 自分がAWSを触る際にまとまった資料がなかった印象なので、そのあたりを簡単にまとめて今後の引き継ぎに使おうと思ってる。
  • 本の感想を投稿
    • 定期的に技術書を読もうと思っているので、忘れないうちに内容をメモする感じです。

以上です。今後ともよろしくおねがいします。