Python

最初はPythonから入るべき

プログラマになりたいのであれば、Pythonから始めましょう。
Google三大言語では、C/C++, Java, そしてPythonが「標準的言語」として言われています。その中でも、初心者向けでかつさまざまなユースケースで使われるのがPythonです。
最近では、ちまたでもAIや機械学習のような技術のマスコミ報道が増えていますが、AIで使われる言語はPythonであることが多いのです。
また、昔から、スーパーハッカーの間ではPythonを推す声が強いです。オープンソース伽藍とバザールを書いたことで有名なエリック・レイモンドも、Pythonをすすめています。
PythonWindowsでも使えますし、Linuxを使えばまさにハッカーの仲間入りです。ハッカーの標準言語であると同時にGoogleのお墨付き言語であり、Webでもデスクトップでも、あるいはシステム開発人工知能にも対応できます。
また、PythonにはITの最先端技術がつまっています。
一部では、RubyJavaScriptを推す声もありますが、「Rubyエンジニアにはいつか限界が来る」とか、「JavaScriptは一部の最先端をかけるギークにしか分からない」ということがあり、初心者にはおすすめできません。
初心者、上級者、Linuxハッカーを目指すものは、間違いなくPythonをやるべきです。
また、Pythonの文法はとてもシンプルで、習得しやすい簡素なものです。ですから、そんなにたくさんの時間をかけなくても習得できます。これがC++だったとしたら、きっと初心者はすぐに迷宮から抜け出せなくなって諦めてしまいます。また、Perlも同様にシンプルですが、クセが強いです。Perlハッカーになるならばそれで良いですが、変な記法や書き方を学んでしまって、おかしなコードを書くようになります。そもそも、Perlは明らかにおかしな言語です。引数を$_[0]で書くようになると、人類は終わりだと思います。
Pythonをはじめる上で何から知れば良いかは永遠の課題だと思いますが、とりあえず公式のドキュメントを参照すると良いでしょう。Progateなどの初心者向けのサイトもあり、プログラミングのことを本当に何も知らない人には有益でしょう。また、WebフレームワークのDjangoを使えば、Webサービスの開発をいとも簡単に実現できるでしょう。GUIの開発はLinuxGTKで行うことをおすすめします。

シンプルで何でも楽にできる

Pythonを一言で言えば、文法が簡素・シンプルで、何でも簡単で楽にできる言語だと言えます。
特に、覚えるべき言語要素が少ないです。簡単に短時間に習得することができます。
その代わり、できることは多いです。簡単に記述し、簡単に何でもできます。
科学技術計算やAI・人工知能ニューラルネットワークディープラーニング機械学習)に使われることが多いPythonですが、Webのサービスを作ったりGUIアプリケーションを作ったりする用途でもとても簡単にアプリケーションを作れます。
ライバルのRubyと比べると、面白みの少ない言語です。Rubyは「楽しさ」を強調しており、プログラミングをすることの楽しさや面白さがありますが、Pythonは簡単なだけで、とてもつまらない言語です。

人工知能・AIのほか、GAFA関係で良く使われる

Pythonは、人工知能・AIで良く使われるほか、GAFAGoogle, Amazon, Facebook, Apple)関係で良く使われます。
特に、PythonGoogleFacebookなどの「アメリカの一流プラットフォーム」で使われることの多い、かっこいい言語です。
人工知能やAIにおいて良く使われるのは、昔はLispでした(リスト構造のS式がプログラムとデータで共通に使われるため、「プログラムを操作するプログラム」を作りやすかった)が、最近はライブラリの整備状況などが考慮され、LispよりもPythonを使うことが増えました。
Pythonは決して、つまらないだけの言語ではありません。言語仕様が簡素でシンプルなため、言語処理系の挙動や機能を把握することがしやすく、「Pythonのことを全て分かった一流ハッカー」になりやすい言語だと言えます。C++Javaに比べても、覚えるべきことが少なく、誰でも当たり前に考えるように動いてくれます。

Pythonで我慢しなさい

初心者は、永遠の言語論争などを無視して、Pythonで我慢してコードを書きましょう。
Pythonで書いていれば、そのうちプログラミングはできるようになります。
おすすめなのは、Pythonならやはり人工知能・AIの開発です。僕の書いたロボットも参考にしてください。
最初は、オブジェクト指向は「用意されているクラスを利用する」ものだと考えて、変数を定義し、変数に値を格納し、条件分岐をするところから始めましょう。そのうち、繰り返しや関数定義も覚えられると良いでしょう。

Pythonの練習にはUNIXのコマンドの再実装がおすすめ

Pythonの練習には、UNIXのコマンドの再実装がおすすめです。
たとえば、grepコマンドやsortコマンドなどを、自分で作ってみましょう。楽しいし、勉強にも練習にもなると思います。
その次は、具体的なデータベースのデータを用意し、そのデータを分析するAIを作ってみましょう。データは、自分で自動作成しても良いですし、郵便局からダウンロードできる郵便番号のデータなどを使うと良いでしょう。
それ以降は、Webフレームワークの習得がおすすめです。特にDjangoを使ってミニブログツイッターのようなサービス)を作ってみましょう。投稿機能やフォロー機能を一通り実装しましょう。
GTK+やQtを使うことでX11によるGUIプログラミングもできます。僕はWebKitGTKを使ったタブブラウザや、Lispを実行できるテキストエディタ(もちろんLisp処理系もPythonで書く)を作ると良いと思います。
ほかの分野として挙げられるのは、ネットワークサーバーです。HTTPのマルチスレッドサーバーを書いてみましょう。それくらいで、あとは応用が利きます。それぐらいができるようであれば、どんなプログラムでも開発できるようになるでしょう。

動的なくせに遅い

PythonRubyのいいところは、動的なところです。型宣言をつけなくても、実行時に適当に解釈してくれます。
Pythonは動的なインタープリタ言語で、何でも簡単ですが遅いです。全くスピードや性能を考えていないのでしょう。速さが必要な時にだけC言語を使う必要がありますが、あとはPythonで全て事が足ります。

YouTubePythonを学ぼう

YouTubeには「プログラミング言語を学ぶ」という隠れた使い方がある。
たとえば以下のような動画の講義がおすすめ。

YouTubeで学ぶことの利点は二つあります。
1.きちんと分かっているプログラマの方が動画で話しながら直接教えてくれるので、「プログラマがどのような考え方でプログラムを書いているのか」が分かる。
2.コードを書いているところやソフトウェアをインストールしたり触ったりしているところが直接画面で見れるので、「プログラマがどのような方法でプログラムを書いているのか」が分かる。
今の時代、書店にはたくさんのPython入門本が並んでいますが、IT系の書籍は値段が高額で、5,000円以上になることも少なくありません。そんな分厚い本を買っても、読めるわけがありません。YouTubeの動画なら、楽に見ることができて、「こんなに簡単なことを言っていたのか」ということが分かって面白く、「動画をただ見ているだけ」でいいので、さまざまなコードの入力作業を自分でしなければならない書籍による独学を行うよりも、続けやすいです。財布や時間と相談しながら、分からないことは動画で学ぶことをおすすめします。

Pythonの良いところ

無料でオープンソースかつ、Windowsに簡単にインストールできる

Pythonの良いところは複数ありますが、まず、余計な費用もかからず、必要なプラットフォーム条件も少なく、無料でオープンソース、そしてWindowsに簡単にインストールできるほか、Linuxにはほとんどの場合標準でインストールされている、ということがあります。
Visual Studioのように、高価な代金を払って専門のソフトウェアを購入する必要もなく、全部無料です。Perl/CGIPHPのように、サーバーを構築して自宅サーバーを運営する必要もなく、Windowsでプログラミングを行い、ローカルな環境で実行することが多いため、Linuxの知識もサーバーの運営責任も必要ありません。

言語仕様がシンプルかつ、超高級言語

Pythonのもう一つの良いところは、言語仕様がシンプルで覚えやすく、また、Rubyと同じ動的オブジェクト指向スクリプト言語であり、「ほとんどの処理がとても短く簡単に実現できる」ということが言えます。
C/C++のような冗長な記述は必要なく、Javaのように覚えるべきことがたくさんあるわけでもないため、簡単に習得できます。

機械学習という目的がはっきりしている

また、一番初心者にとっていい点が、「人工知能・AIや機械学習の用途に使う」という「プログラミングの目的」がはっきりしているところです。
C/C++Javaなどは、汎用的過ぎて目的がなく、結果「言語仕様を学ぶだけで、実際にモノを作らない」という結果になってしまいます。また、PHPRubyには比較的はっきりとした「Webサービスを作る」という目的がありますが、いきなりWebサービスを外部に公開するのは、セキュリティや運営責任の観点から言って問題があります。
Pythonは、機械学習というはっきりとした目標があるため、プログラミングの勉強を楽しく行うことができます。
後日注記:しかしながら、僕はプログラミング初心者が人工知能から始めるのはおすすめしません。人工知能機械学習は、プログラミングの中でも特殊な分野で、難しく、まったくプログラミングとは異なる数学的な考え方が必要だからです。初心者にはDjangoRailsからWebサービスを構築することをおすすめします。

仕事にも趣味にも使える

Pythonの最後のメリットは、仕事にも趣味にも使える、ということです。
エンジニアになることを将来的に目指すのであれば、PythonJavaの次の新しいIT業界の主役言語です。世界シェアもJavaを抜いてNo.1になったはずです。Pythonができる人間は、日本国内でも活躍できるほか、海外や世界においても活躍できます。日本ローカルのRubyとはこの点が異なります。
また、趣味でオープンソースソフトウェアを作るのであれば、PythonLinux界でもっとも流行りの言語です。ペイントソフトのMyPaintやパッケージ管理システムのPortageなど多くのソフトウェアがPythonを使って作られています。

遅いところはC言語でカバー

Pythonは超高級言語であるため、なんでも簡単にできますが、その代わりパフォーマンスが悪いです。特に、C/C++と比べるとそこまで遅いと言われています。
こうした点は、コア部分をC言語で書いてそれをPythonからインターフェースで利用する形でプログラムを書くと、C/C++に近い速度でプログラムを実行できます。

データサイエンティストになれる

また、Pythonの優れた点は、最近流行りの「データサイエンティスト」という職業になれる、ということがあります。
このためには、統計・解析の知識や、R言語SQLなどの知識も必要になります。
特に、統計を勉強している数学部や社会学部の学生であれば、その学んだことをPythonで活かすことができると同時に、データサイエンティストになることで、高収入かつキャリアアップが実現できるでしょう。

とりあえずチュートリアルを最後まで読もう

まずは、公式のチュートリアルを最後まで読むことです。やる気を高めて頑張りましょう。

人工知能・AI

ディープラーニングの基本

ディープラーニング機械学習の方法のひとつで、「機械自らがデータの特徴をひとつひとつ読み取り、その結果特徴を判別できるようになる」というもの。
人間からの指示を一切出さずに、自らの力で機械学習をしていく。
機械学習には、人間が指示を出す「教師あり学習」と、人間が指示を出さない「教師なし学習」がある。ディープラーニング教師なし学習に相当する。

機械学習とは

僕は、人工知能とは、「与えられたパターンから、最適な結果を膨大なデータの中から見つけ出す」ということではないかと思います。
今流行っているディープラーニングなどは、プログラムがデータを分析して識別することができるようになるまで特徴を分析し記録する、ということです。
この分析した結果、あるいは分析するための材料を、機械は膨大なデータからひとつひとつ探し、最適解を見つけ出すのです。
このような特徴があるため、ディープラーニングでは「データの量が精度に直結」します。つまり、データがたくさんあれば、それがプログラムやサービスの質の向上に直接貢献するのです。
人工知能は、一見すると、「なんて馬鹿なことをやっているのだ」と言えるかもしれません。たとえば、僕が見たテレビの特集では、イチゴの形を学習させて、形から「おいしいイチゴ」と「おいしくないイチゴ」を判別します。ですが、このような「基礎的分析の積み重ね」が、大きな効果を生み出すこともあると思います。世界は20年後になると、今とはまったく違う、「ほとんどすべてを機械が自動化できる社会」になるかもしれません。

ビッグデータとデータサイエンス

また、最近はインターネットで全ての世界が繋がるようになって、これまで無かった巨大なデータにアクセスできるようになりました。携帯電話の位置情報などから、どこに誰がどれだけ居るか、どのように変化しているか、といったことが知れるようになりました。
このような分野で強いのは、Pythonと呼ばれる言語です。Python機械学習やデータサイエンスに必要なライブラリが整っていて、Anacondaを導入することですぐさまデータサイエンスを行うことができます。ビッグデータ人工知能以外でも、SQLExcelのデータをPandasで処理して、「煩わしいデータ処理を最低限の記述で行う」ことができます。
このような分野でなぜPythonかというと、Pythonは手軽かつ高機能で、「簡単な処理をさっとやる」ためにも「数学のような処理を簡単に書く」ためにも使いやすいからではないかと思います。

簡単な計算プログラム

Perlのページに公開したプログラムのPython版です。

x = 0
y = 0
count = 1

while (count <= 100) :
    x += 10
    y += count
    print("{0}\t{1}\t{2}".format(x, y, count))
    count = count + 1

エディタにはVS-CodeとJupyter Notebookがおすすめ

Pythonを書くためのエディタとしては、MicrosoftのVS-Codeがおすすめです。Anaconda NavigatorからはPythonシェルだけではなくVS-Codeをクイックで起動できます。
また、Jupyter Notebookを使うと、ブラウザからPythonを実行できます。これもAnaconda Navigatorからクイック起動できます。Jupyter Notebookは、たとえばPythonの入っていない入門者のパソコンなどで、Pythonコードの動き方などを簡単に試すような用途に使えると思います。
Pythonシェル(Anacondaプロンプト)は対話式のインタープリタとして、コードを実行したければプロンプトで簡単に実行できます。最初はインタープリタPythonの動きに慣れながら、開発するにしたがってVS-Codeによる*.pyファイルの編集に慣れていけばいいでしょう。*.pyファイルは

python study01.py

のようにコマンドから実行できます。
また、Anacondaを使いたくない場合は、公式のPythonにIDLEと呼ばれる簡単な統合開発環境が付属しているのでそれを使ってください。
Anacondaにはコンポーネントを管理する機能があり、新しいPythonに関連するコンポーネントはここから簡単にGUIで導入できます。一覧表示され更新も簡単です。
VS-Codeでエラーが出た場合などには、コンポーネントが足りないことがあります。導入はpipを使ってコマンドから

python -m pip install パッケージ名

とします。

Pythonの基本

変数と定数

変数は$などの記号を付けず、=で代入できる。

hello = 'Hello, World'
print(hello)

後日注記:変数が「データの箱」として中身を変えることのために使うのに対し、定数は中身を変えないために使う。定数は円周率や消費税のように「数値を一か所に記述し、プログラマにとって目的を明確化し分かりやすくするために名前(ラベル)をつける」といったことのために用いる。

演算子

算術演算子には、+, -, *, /(実数除算の商), //(整数除算の商), %(整数除算の余り)、**(累乗)などがある。

Pythonの制御フロー

if~else文(タブとインデントでブロックを記述する)

Pythonでは、タブと空白のインデントでブロックを記述する。たとえば、if~else文は以下のようになる。

def test(x):
    if (x < 3):
        return "less"
    else:
        return "more"

print(test(5))

字下げが文法に含まれるのは賛否両論があるが、必ずある程度美しいコードになる、ということで、Linux界でPythonはとても流行っている。
if文やfor文、def文やclass文などで、どこからがコードブロックや関数やクラスの続きであり、どこが終わりであるかは必ずインデントで指定する。また、慣習として、インデントは多くの場合半角スペース4つにすることになっている。
また、if文で複数の条件を分岐する時にはelifを使う。

for文とwhile文

Pythonのfor文は特殊で、

for ループ変数 in 反復可能オブジェクト:

となる。
たとえば、

msg = 'Hello'

for ch in msg:
    print(ch)

となる。ここでは反復可能オブジェクトは文字列で、文字のひとつひとつ全てに対して処理を行う。
文字列以外にも、リストなどからも反復できる。

animals = ["犬", "猫", "鳥", "牛"]
for name in animals:
    print(name)

このように、Pythonでは他の言語におけるforeach文と同じことをfor文で行える。
他の言語と同じように、回数を指定して繰り返すのであれば、range()関数を使う。

for x in range(10):
    print(f'{x}: Hello')

ちなみに、C言語などでも使われるwhile文も使える。これには

while 条件:

とすればいい。条件が満たされる間、繰り返しをし続ける。
繰り返しを途中で抜けるのはbreak文、途中で処理を中断して次の繰り返しに行くにはcontinue文を使う。else節を使うことで繰り返し後に行いたい処理を書ける。

関数

Pythonではdefで関数オブジェクトを作成できる。

def add(x, y):
    return x + y

呼び出す時は以下のようにする。

print(add(11, 34))

if __name__ == "__main__":の意味

これは、そのスクリプトコマンドラインで単独で実行された場合、__name__変数に__main__が代入されるので、その時に実行されることを意味している。要は、ライブラリとしてインポートされた場合ではなく、C言語のコマンドのようにコマンドラインから実行される時に実行される処理をここに書く。

オブジェクト指向

オブジェクト指向とは

Pythonでいうオブジェクト指向は、オブジェクトを「自分自身」とし、メソッドを「自分自身を対象とする関数」とする。
どんなメソッドを使うのであっても、そのメソッドは自分自身に対して行われる。
後日注記:Pythonでは、データ(変数)とメソッド(関数)をひとつの関連するモジュールにまとめて、クラスにコード(たい焼きで言えば金型)を記述し、そのクラスをインスタンス(たい焼きで言えばひとつひとつのたい焼き)にして扱う。これをオブジェクト指向と呼ぶ。また、Pythonではクラスの中のデータとメソッドをアトリビュート(属性)と呼ぶ。

クラスとメソッドを使う

まず、import文でモジュールを読み込む。

import calendar

その後にクラスからオブジェクトを作成し、メソッドを実行する。

my_cal = calendar.TextCalendar(6)
my_cal_string = my_calendar.formatmonth(2020, 4)
print(my_cal_string)

モジュール名をいちいち明記したくない時は、

from calendar import TextCalendar

のようにfrom ~ import文を使う。
あるいは、

from calendar import *

としてもよい。

クラス

クラスを定義する時は、classキーワードを使う。
・コンストラクタは__init__、デストラクタは__del__メソッドになる。
・メソッドの第一引数はselfで、それぞれのインスタンスを指す(Java/C++のthisのようなもの)。第二引数からユーザー定義のパラメータが来る。
インスタンスの属性はself.nameのように「self.属性名」という形で表す。
・クラスはモジュールに保存して、from ... importでインポートして使う。
インスタンスを生成するのは、クラス名と同じ名前のメソッドで、newは使わない。
たとえば以下のようになる。

class Human:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def info(self):
        print('%s (%d)' % (self.name, self.age))

上の内容をhuman.pyに保存して次のようにインポートする。

from human import Human

human1 = Human('Taro Saito', 50)
human2 = Human('Chikako Inoue', 25)

human1.info()
human2.info()

継承

継承は

class Batman(Human):

などのようにクラス名 (親クラス名)と指定する。
後日注記:継承はプログラムコードの再利用性を高める。最初のうちは「なんのためにあるのか分からない」というオブジェクト指向だが、たくさんのコードを複数の人間が書くようになった時に、はじめて「オブジェクト指向で設計していてよかった」という悟りを得ることができる。

Pythonのデータ構造

型変換とinput関数

Pythonは動的だからといって、型を意識する必要が全くないわけではない。
たとえば、文字列の中身を数値に変換して計算したり、入力したメッセージを数値に戻して演算し、その後に文字列と結合して出力したいような場合、必ず型変換が必要となる。

input_value = input('二乗にしたい数を入力してね: ')
int_value = int(input_value)
result = int_value ** 2
output_msg = input_value + 'の二乗は' + str(result) + 'だよ'
print(output_msg)

後日注記:型変換を行う関数には、int(), float(), str()などがある。たとえば文字列を数値型や浮動小数点型に変換できる(逆も可能)。Pythonには他にも複素数型などがある。また、type()関数でその変数が何の型であるかを知ることができる。+のような演算子を使う場合、数値型の変数と文字列型の変数を加えるとエラーになる。必ず文字列型か数値型に変換すること。

リストとタプル

リストとタプルは良く似ていて、どちらもC言語でいう配列のように使うことができる。さまざまなオブジェクトを混ぜて入れることが出来るのが特徴。
リストとタプルの違いは、記法が違い、タプルはイミュータブル(変更できない=オブジェクトidを変えずに、要素を追加・変更・削除することができない)という特性を持つ。
リストは[]を用いて記述するが、タプルは()を用いて(あるいはかっこをつけずに,だけで)記述する。

l1 = ['test', 'hoge']   #リストの例
t1 = ('test', 'hoge')   #タプルの例

値が変更できる変数のことを「ミュータブル」、変更できない変数のことを「イミュータブル」という。イミュータブルな変数束縛でも、値の参照自体は変えることが出来る。Rustや関数型言語などでも出てくる考え方なので注意しておこう。
後日注記:たとえばPythonでは文字列の一部を変更することはできない。

辞書

Pythonでは、キーと値から成るハッシュテーブルのことを辞書と呼ぶ。

animals = {'dog': '犬', 'cat': '猫'}
print('dogは' + animals['dog'] + 'で、catは' + animals['cat'] + 'ですよ。')

文字列の関数と機能

文字列の結合

文字列同士は+で結合できる(int型の+とは目的も機能も使い方も違う)。

print("Tes" + "t")

printでは自動的に改行が付加されるが、付加したくない時はend=''という引数を追加する。

print("Tes", end='')
print("t")

文字列は、ダブルクオーテーション(")で囲っても、シングルクオーテーション(')で囲ってもいい。その代わり、"で囲った文字列は"で終わる必要がある。'~'の中には"を、"~"の中には'を含めることができるが、"~"の中に"を入れたい場合は\"のようにバックスラッシュでエスケープする必要がある。また、以下に示すようにr文字列やf文字列を使って\や"などの含めた文字列や内部で関数名を展開する文字列を書くこともできるし、複数行に渡って文字列を表すにはトリプルクォートを使う。

format関数

Pythonで変数の中身を表示するためには、フォーマット整形関数であるformatを使用する。

x = 3
y = 10
print('{0}+{1}={2}'.format(x, y, x+y))

format関数の詳細

format関数は、色んなことができる。通常、順番通りにひとつひとつ変数を出力するには、

x = 3
y = 10
print('{}+{}={}'.format(x, y, x+y))

とする。これに対して、数値を指定することもできる。

x = 3
y = 10
print('{0}+{1}={2}'.format(x, y, x+y))

同じ変数を使いまわすような場合は、数値を同じにする。

x = 3
y = 10
print('{0}+{1}={2}\n{0}-{1}={3}'.format(x, y, x+y, x-y))

変数に名前をつけることもできる。

animals = {'dog': '犬', 'cat': '猫'}
print('dogは{dog}で、catは{cat}ですよ。'.format(dog=animals['dog'], cat=animals['cat']))

辞書を使う場合は、数値0に対してキーを設定するような使い方もできる。

animals = {'dog': '犬', 'cat': '猫'}
print('dogは{0[dog]}で、catは{0[cat]}ですよ。'.format(animals))

また、左揃え・中央揃え・右揃えとか、最低の文字幅を指定して空いたスペースを空白で埋めるなどといった使い方もできる。+や-をつけて+の場合はひとつの空白で表現するなどといったこともできる。

print('{x:>8}+{y:>8}=+{result:>8}'.format(x=x, y=y, result=x+y))

ここでは、最低文字数が8で、右揃え(>が右揃え、<が左揃えを意味する)にしている。
また、format関数で書式指定するのは比較的新しいやり方である。以前のやり方である%を使った書式指定を目にすることもある。

f文字列とr文字列

また、上のformatと同じ用途に使えるものとして、f文字列がある。f文字列では、{}の中の変数が展開される。

x = 3
y = 10
print(f'{x}+{y}={x+y}')

また、'(シングルクォート)の中では"(ダブルクォート)をそのまま書け、ダブルクォートの中ではシングルクォートをそのまま書けるが、シングルクォートの中で、シングルクォートを使ったり、ダブルクォートの中でダブルクォートを使ったりするためには、\(バックスラッシュ)をつける。
ただし、Windowsディレクトリパスなどで、バックスラッシュをそのまま使いたい場合は、raw文字列(r文字列)を使うと便利である。

path_windows = r'C:\python'
print(path_windows)

r文字列の中では、エスケープされた文字が付加的な意味を持たず、ただの文字として扱われる。

トリプルクォートとdocstring

また、ヒアドキュメントのように改行を含めた文字列を表現したい場合は、トリプルクォートと呼ばれる機能が使える。

help_msg = '''
このプログラムの使い方は、
オプション1 : 説明1
オプション2 : 説明2
だよ~ん。
'''
print(help_msg)

Pythonで自分以外のたくさんのユーザーが使うような関数を定義する場合、関数に説明をつける時に、docstringと呼ばれるドキュメントを作ることもある。この時、トリプルクォートを使う。
後日注記:トリプルクォートは複数行の文字列に使うほか、複数行に渡るコメントを表現するためにも用いる(一行コメントは#を使う)。

文字列を操作する関数

文字列を操作する関数としては、よく使うものとして、

  • len()
    • 文字数を求める
  • in演算子
    • 文字列の中に文字が含まれてるかどうかを調べる
  • find()
  • rfind()
  • index()
  • rindex()
    • 文字列の含まれている場所を求める
  • split()
    • 文字列を分割する
  • join()
    • リストをひとつの文字列に結合する
  • strip()
  • lstrip()
  • rstrip()
    • 空白文字を削除する
  • replace()
    • 文字列を置換する

などがある。Pythonでは文字列を変更することはできないため、「元の文字列をベースにして新しい文字列を作成する」といった動作になる。

日本語文字コードを使う

PythonスクリプトUTF-8を使うためには、行頭の部分を以下のように記述する。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

関数型言語の機能

無名関数(ラムダ式

Pythonでは、無名関数(ラムダ式)を使うことで、簡単なコードブロックであれば名前をつけなくてもブロックを変数に代入して実行すべきところで実行することができる。
無名関数は以下のように記述する。

lambda 引数1, 引数2, ...: 式

以下は各要素に同じ処理を施して、同じ長さのリストに全ての結果を格納してくれる、map()関数と無名関数を組み合わせた例。

l1 = [1, 3, 5]

l2 = map(lambda x: x ** 2, l1)

print(l2)  # [1, 9, 25]

Python の無名関数( lambda )の使い方 - Life with Pythonより引用。)
ラムダ式は他の言語にもあるし、無名関数はC#では昔デリゲートと呼ばれていた。Rubyのブロックに近い。C言語でも関数ポインタを関数の引数に与えることはできる。

map/filter関数

map関数は、リストの各要素に処理を実行して、同じ長さのリストを返す。
filter関数は、リストから条件に満たないものを削除する(フィルター)。

yield(ジェネレータ)

yieldは、for文のような繰り返し処理と組み合わせて使うことが多い機能で、returnがその場で関数の実行を終了して返り値を渡すのに対して、yieldは関数の途中で一時停止して、1つずつ値を返し続けることができる。
for文で使う場合は、一度の繰り返しを行う時に、次のyieldの実行までを処理し、yieldで返された値をfor文のカウントごとに代入される変数に代入する。そして、次の繰り返しに進んだ時に、次のyieldまでを処理する。
言葉で説明すると難しいが、繰り返しの中でさまざまな処理を行いたい場合に、知っておくと便利である。for文を使わずに、自分でnext()メソッドを実行することもできる。
yieldはジェネレータと呼ばれる機能で、yieldがある関数はジェネレータ関数と呼ばれる。これをイテレータ(反復子)とともに用いることで、一回の繰り返しの呼び出しに対して、yieldまでを一回行うことができる。
詳しくは以下のリンクが参考になる。また、PythonだけではなくC#でも使える。

その他

Pythonのデコレータ

アスペクト指向のように、Pythonでは単にbeforeのように「処理の前後に処理を行いたい」という場合、デコレータと呼ばれる機能を使うことができる。

Python 2と3には互換性がない

Python 3には後方互換性がない。たとえば、「print x」のような文は使えず、「print(x)」と書く必要がある。このため、YumPython 3で書き直したDNFなどがLinux業界でも作られている。

簡単な説明

Python

  • Python
    • Python
      • 基本文法
      • 変数と定数
      • リストとタプル
      • 辞書
      • 関数と制御構造
      • format関数
      • クラスとオブジェクト
      • モジュールとインポート
      • ライブラリ
      • pip
      • Anaconda
      • 高速化(JITコンパイルなど)

基本文法

インデントを文法として採用することで、「誰が書いても同じ美しいコード」になる

変数と定数

変数は変更可能、定数は変更不可能

リストとタプル

リストは変更可能、タプルは変更不可能

辞書

ほかの言語でいうハッシュのことをPythonでは辞書と呼ぶ

制御構造

for文は「反復可能オブジェクト」を渡す。数値のリストを処理するためにはrange()関数をfor文に与える必要がある。

format関数

format関数でフォーマット付き出力を行う。その他r文字列やf文字列などを使って生の文字列や書式付き文字列を表す。

クラスとオブジェクト

Pythonインスタンスメソッドは第一引数がオブジェクト自身を表すselfであり、メソッドとして渡す引数は第二引数から与えられることに注意
クラスをインスタンス化する時にnewは必要ない(クラス名のみ)

高速化

PyPyやNumbaやCythonを使うことで、低速であることで有名なPythonもある程度高速化できる