slow-starter

なにをやるにもslow start……。

近況 ( 2018.09.22 )

近況 ( 2018.09.22 )

9月から、新しいことを始めようと思い、pythonを勉強し始めた。
あまり勉強が進んではいないけど、ちょっとずつ身についている気がする。
学習方法は主に以下の3つ

  • 通勤時のweb/app学習
    • 以下のWeb/appを使っての学習
    • 実機で学習
      • sololearnで気になった問題、間違った問題を実環境で検証。
  • このブログである程度のまとまりを記事化。
    • 情報の整理、大事。

このままのペースで、もうちょっとやってみます。

その他

python」を(も?)使った「数学」の勉強を「英語も」つかってやった場合のblogのカテゴライズに悩む。。。

英語学習!

いつもちょっとやっているけど、なかなか上達しない英語。
モチベーション維持のため、気になった記事をちょっと読み込んでみる。

東洋経済オンラインの記事

おすすめ本 #1 ( 英文読解 )

  • 基礎英文問題精講 3訂版
    • 和訳が面白いらしいので、「英語を理解する」というより「英語も理解する」というスタンスが良いのかも。

おすすめ本 #2 ( 文法 )

まとめ

自分も持っている本が紹介されていた!これからもゆっくりと英語学習します…。

python #10 ( doctest )

doctest

doctestを使うとdocstring的な記載で容易にテストが実行できるらしい!

argを2倍にするFunction「twice」の実装

def twice(n):
    """
    >>> twice(2)
    4
    >>> twice(-2)
    -4
    """
    return n*2

if __name__ == "__main__":
    print(twice(2))
    import doctest
    doctest.testmod(verbose=True)
  • 実行結果
    • テストが実行される
4 

Trying:
    twice(2)
Expecting:
    4
ok
Trying:
    twice(-2)
Expecting:
    -4
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.twice
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

sampleスクリプトのラッパースクリプト

import doctest_1
print(doctest_1.twice(3))
  • 実行結果
    • テストは実行されない!
6

修正(non-verbose化)

  • 実験用にverboseモードを強制してたけど、普通はverboseモードをOFF(デフォルト)に戻す
# 修正前(上のほうでの記載)
    import doctest
    doctest.testmod(verbose=True)
# 修正後
    import doctest
    doctest.testmod()

修正後、verboseモードで実行したい場合の実行コマンドライン

python <<スクリプト名>> -v

import以降を記載してないが、doctestを実行したい場合の実行コマンドライン

# 通常モード
python -m doctest <<スクリプト名>>
# verboseモード
python -m doctest <<スクリプト名>> -v

python #9 ( 真偽判定 (True/False) )

三項演算子

真偽判定を普通に分かりやすく記載すると以下のような感じ

a = "True"
if True:
    print(a, "is True")
else:
    print(a, "is False")
# True is True

上記だと面倒なので、以下のような記載で1行で条件分岐を記載すると、確認しやすい。

a = "True";print(a, "is True") if True else print(a, "is False")
# True is True

True/False (False が False)

for i in [True, False]:
    a = i; print(a, "is True") if i else print(a, "is False")
# True is True
# False is False

だけど、'False'という文字列はTrue…。

for i in ["True", "False"]:
    a = i; print(a, "is True") if i else print(a, "is False")
# True is True
# False is True

数字 (0 が False)

for i in range(-1,2):
    a = i; print(a, "is True") if i else print(a, "is False")
# -1 is True
# 0 is False
# 1 is True

ゼロの数値型はFalse

from decimal import *
from fractions import *
for i in [0, 0.0, 0j, Decimal(0), Fraction(0, 1)]:
    print(type(i))
    a = i; print(a, "is True") if i else print(a, "is False")

# <class 'int'>
# 0 is False
# <class 'float'>
# 0.0 is False
# <class 'complex'>
# 0j is False
# <class 'decimal.Decimal'>
# 0 is False
# <class 'fractions.Fraction'>
# 0 is False

空(から)のシーケンスはFalse

for i in [[],(),{},set(),range(0)]:
    print(type(i))
    a = i; print(a, "is True") if i else print(a, "is False")

# <class 'list'>
# [] is False
# <class 'tuple'>
# () is False
# <class 'dict'>
# {} is False
# <class 'set'>
# set() is False
# <class 'range'>
# range(0, 0) is False

python #8 ( 開発環境構築 #4 )

jupyterでグラフ

jupyterでグラフというとmatplotlibが標準? 他にも何かないかな、と思い探ってみた。

plotly

  • 「anaconda navigator」を利用しパッケージインストールした。
    • 依存関係からか、同時に30個くらいのパッケージがインストールされることに…。
  • plotly を利用したスクリプトを書いてみるけど、「ModuleNotFoundError:」…。
  • metploblibより見た目が良い!
  • それはそうとvscodeとjupyterの接続が(たまに切れているのか)うまく実行結果が得られないことがある。まぁ、気長に調べよう…。

python #7 ( 開発環境構築 #3 )

jupyter

jupyterというものを使うといろいろと良さそうなので、導入。

上記URLを参照しつつ、(悪戦苦闘しながら)導入。
ざっくり手順は以下の通り。

  1. コマンドプロンプトから「> jupyter notebook」と入力し、jupyter実行
    1. 起動時に表示されるTokenをメモ
  2. vscodeからjupyter notebookに接続。
    1. 「Jupyter: Enter the url local/remote jupyter Notebook」
  3. jupyter用に作成したvscode上のpythonスクリプトの画面上部に表示される「Run cell」を押下し、スクリプトを実行

python #6 ( 開発環境構築 #2 )

仮想環境

仮想環境を利用すると、(あまりよくわかってないけど)いろいろとよいらしい。
vscodeのコンソールからいかを実行し仮想環境を構築する。

python3 -m venv <<new_venv_name>>

vscode 拡張機能

vscodepythonを扱うためにいろいろな拡張機能をインストールしたほうが良いらしい。
ということで、以下を参照し、拡張機能を追加。

追加した拡張機能は以下の通り。

pip の help

> pip help

Usage:
  pip <command> [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible dependencies.
  config                      Manage local and global configuration.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  hash                        Compute hashes of package archives.
  completion                  A helper command used for command completion.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment variables and user
                              configuration.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be used up to 3 times
                              (corresponding to WARNING, ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe,
                              (b)ackup, (a)bort).
  --trusted-host <hostname>   Mark this host as trusted, even though it does not have valid or any HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file containing the private key and
                              the certificate in PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine whether a new version of pip is
                              available for download. Implied with --no-index.
  --no-color                  Suppress colored output

追加したパッケージ

pylint
    python code static checker
pep8
    Python style guide checker
autopep8
    A tool that automatically formats Python code to conform to the PEP 8 style guide
    「Ctrl + Alt + F」でauto formatしてくれる。
flake8
    the modular source code checker: pep8, pyflakes and co
    vscode 上で「Ctrl + Shift + P」でコマンドパレットを表示。
    その後、「Python Select Linter」と入力するとLintの一覧が表示される。
    その中から「flake8」を選択するとインストールが開始された。
flake8-docstrings
    Extension for flake8 which uses pydocstyle to check docstrings

きっと何か一つを使いこなせばいいのだろうけど、いったんは見かけたそばからインストール

その他

  • 上部のメニューから「ヘルプ(H)」-> 「キーボードショートカットの一覧(K)」で、ショートカット一覧が確認可能。
  • ショートカット「Ctrl + comma」で「標準機能設定変更」画面にたどり着ける。