ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Python:Python の特徴

初めに

 本記事では、Python がどのような言語でどのような特徴をもつのか、何ができるのかまとめます。

Python の紹介

Python とは

 Python(パイソン) は1990年代初頭ごろから公開されているプログラミング言語で、わかりやすく、実用的な言語として、広く使われ続けています。

 Pythonはいわゆるスクリプト言語で、実行性能よりも使いやすさを優先した構造になっています。C言語などと比べれば実行速度は劣りますし、メモリ使用量も多くなりますが、「読みやすさ・わかりやすさ」をとても重視していて、Pythonを知らない人でも、理解しやすいようにデザインされています。

Python でできること

 Python は非常に汎用的であり、さまざまな分野で利用されています。

Python フレームワーク

 Python の魅力の1つとして、フレームワークが豊富であることがよく挙げられます。以下にジャンルごとに例をいくつかあげます。

(Webアプリ開発向け)

  • Django
  • Flask
  • Bottle
  • Tornado
  • web2py

機械学習向け)

特徴

 Python は次のような特徴をもちます。

 それぞれの説明は、本ページの下部にある補足に載せております。

最も簡単なコード

 "Hello World" と表示させるコードは以下のようになります。

print('Hello World')

 スクリプト言語だけあって、簡単に表示させることができます。

補足

スクリプト言語

 正式な定義があるわけではありませんが、一般的には、可読性が高く比較的簡単に書きやすいプログラム言語をスクリプト言語と呼びます。

(例)PythonPHPJava Script、Ruby

動的型付け・静的型付け

 プログラミング言語は、動的型付け言語と静的型付け言語に分類されます。二つの違いは次の通りです。

動的型付け言語 実行時に型が決まる
静的型付け言語 コンパイル時に型が決まる

 動的型付けは実行時に変数の方を解釈します。そのため、型の変更が比較的容易です。動的型付け言語の代表的な例である Python のコードを見てみます。

x = 5         # 整数型として解釈される
y = "Hello"   # 文字列型として解釈される
z = 3.14      # 浮動小数点数型として解釈される

x = "Python"  # 同じ変数でも別の型に変更可能

 上記の例では、x は整数型でしたが、途中で文字列型に変更されています。

 静的型付け言語の例として、C# が挙げられます。C# は変数の方は宣言時に明示的に指定し、その後の変更は許容されません。

int x = 5;
string y = "Hello";
double z = 3.14;

// コンパイルエラー: 型を変更することは許されない
// x = "C#";

 動的型付け言語は柔軟性があり、型の定義をする必要がないため、コードを簡潔に書くことができる反面、実行時のエラーに注意する必要があります。

 一方で、静的型付け言語は型の厳格なチェックを行うため、コンパイル時にエラーを検出できます。これにより、安全性や保守性が向上しますが、動的型付け言語と比較するとコードが冗長になります。

オブジェクト指向

 オブジェクト指向は、コードを再利用可能なオブジェクトとして考えるシステム構築の仕方です。Python のほかにも C#Javaオブジェクト指向プログラミング言語の例としてよく挙げられます。

 オブジェクト指向の三大要素として、継承、カプセル化ポリモーフィズムがあります。

(継承)
 継承は、既存のクラスを基にして新しいクラスを定義する仕組みです。新しいクラスは、既存のクラス(親クラスまたはスーパークラス)の属性とメソッドを受け継ぐことができます。これにより、コードの再利用と階層的な構造を実現できます。

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

dog = Dog()
print(dog.speak())  # 出力: "Woof!"

cat = Cat()
print(cat.speak())  # 出力: "Meow!"

 上記の例では、Animalクラスを継承したDogクラスとCatクラスがあります。子クラスは親クラスのspeakメソッドをオーバーライドして独自の振る舞いを実装しています。

カプセル化
 カプセル化は、オブジェクトの内部状態を隠蔽し、外部からの直接的なアクセスを制限する概念です。これにより、クラス内部の実装の詳細が隠され、コードの保守性やセキュリティが向上します。

class Student:
    def __init__(self, name, age):
        self.name = name
        self.__age = age  # プライベートな変数

    def get_age(self):
        return self.__age

student = Student("Alice", 20)
print(student.name)       # パブリックな属性にアクセス
# コンパイルエラー: プライベートな属性に直接アクセスしようとするとエラー
# print(student.__age)
print(student.get_age())  # プライベートな属性にアクセスするための公開メソッド

 Studentクラスでは、__ageという名前のプライベートな属性を定義し、外部から直接アクセスできないようにしています。代わりに、公開メソッドであるget_ageメソッドを介して属性にアクセスしています。

ポリモーフィズム
 ポリモーフィズムは、異なるクラスが同じメソッド名を持ち、それぞれ独自の実装を提供する能力を指します。これにより、同じメソッド名を使用して異なるオブジェクトの振る舞いを制御できます。

class Shape:
    def area(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius * self.radius

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

shapes = [Circle(5), Rectangle(4, 6)]
for shape in shapes:
    print(shape.area())

 上記の例では、Shapeクラスを継承するCircleクラスとRectangleクラスがあります。それぞれのクラスはareaメソッドをオーバーライドして図形の面積を計算しています。リスト内の異なるオブジェクトでも同じメソッド名で面積を計算できるため、ポリモーフィズムが実現されています。

インタプリタ型・コンパイラ型

 インタプリタ型とコンパイラ型は、プログラミング言語の処理方法に関する概念です。

 インタプリタ型言語はプログラムコードを1行ずつ解釈し実行していく言語のことです。これに対し、コンパイラ型言語は、1度すべてのコードを翻訳(コンパイル)してから実行される言語のことです。

一般的に、インタプリタ型言語は開発速度が速く、スクリプトや小規模なプロジェクトに適しています。一方、コンパイル型言語は実行速度や最適化に重点を置いたプロジェクトに適しており、大規模なアプリケーションの開発に使用されることが多いです。