---
# System prepended metadata

title: Pythonの学習メーモ
tags: [日本語, backend]

---

# Pythonの学習メーモ

[toc]

## 基礎構文

Pythonで宣言されたエレメントのタイプは全てオブジェクトです。
Pythonは指向プログラミングではないので、抽象クラスという概念を持っていません。抽象クラスを利用したい場合は、”abc”というこう構文をインポートするのは必要です。

ZPQ9JFRQ34EQHA9T

* C++、C#と同じ、メモリを節約する特性がある。
* 宣言されたエレメントは全てオブジェクトタイプ。

以下に勉強の過程で理解しにくいだと考えている概念をメモしています。

## Lambda

Lambdaは関数作成の方法の一つです。無名関数と呼ばれている。
defとlambdaの違いはdef宣言文（ステートメント）であり、lambdaは式です。defを使う場合、事前に宣言が必要となります。

**def分の記述**
```python=
def square(x):
    result=x**2
    return result
y=square(2)
print(y)

結果：4
```

**lambda文の記述**

```python=
y = lambda x: x**2
print(y(2))

結果：4
```

## AbstractClassについて

継承を利用して抽象基底を定義して、プログラムの再利用性を確保したり、構成をはっきり分けてお互いを干渉しないようにする。

#### インプット

```python=
from abc import abcmeta #type

class Person(metaclass = abcmeta):
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def conbine(self)
            pass
class Student(Person)
    def __init__(self, name, age):
        super().__init__(name, age)
    def conbine(self)
        print('{0} is a student with age {1}'.format(self.name, str(self.age)))

Yamato = Student('Yamato', 20)
Yamato.conbine()

```

#### アウトプット
```
Yamato is a student with age 20.
```

## Unit Test
プログラムー構成が完成したら、プログラムーの機能を正しく果たすかどうかを検証する必要がありますので、こういう個々機能を検証するテストはユニットテストと呼ばれます。

ユニットテストには三つのステップがあります。

:::info 
1. Test Case
2. Test Suite
3. Test Runner
:::

### Test Case, Test Suite, Test Runnerの実例:
* Test Case
```python=

#method that want to test.
def BMI(x,y):
    return round(x/y**2,2)

def transToM(c):
    return round(c/100,2)

#test suite program started.    

if (__name__ == '__main__'):
    import unitTest
    class unitTestStart(unittest.TestCase)
    # The first Test Suite
    def test_bmi(self):
        result = calculate(170, 72)
        self.assertEqual(24.55, result)
    # The second Test Suite
    def test_transToM(self):
        result = calculate(1202)
        self.assertEqual(1.2, result)
    # Added those test methods into array
    arrayTests = [
        unitTestStart('test_bmi'),
        unitTestStart('test_transToM')
    ]
```
* Test Suite

```python=
# Adding the suite setting and which suite want to test.
suite = unitTest.TestSuite()
suite.addTests(arrayTests)
```

* Test Runner
```python=
# Adding the runner program to start testing.
runner = unitTest.TextTestRunner()
runner.run(suite)
```

## Pythonでファイルの読み込みと書き込み

:::info
構文：
open(file, mode='r', buffering=-1, encoding=Node, newline=None, closefd=True, opener=None)
:::

| 文字 | 意味 |
|-----|------|
|'r'|読み込み用に開く|
|'w'|書き込み用に開き、まずファイルを切り詰める|
|'x'|排他的な生成に開き、ファイルが存在する場合は失敗する|
|'a'|書き込み用に開き、ファイルが存在する場合には末尾に追記する|
|'b'|バイナリモード|
|'t'|テキストモード（デフォルト）|
|'+'|更新用に開く（読み込み、書き込み用）|

* デフォルトのモードは'r'。
* 'w+' と 'w+b' はファイルを開いて上書きします。
* 'r+' と 'r+b' はファイルを上書きせずに開きます。

bufferingはオプションの整数で、パッファリングのポリシーを設定するために使われる。
* バッファリングを無効化するためには０を渡してください。
* 行単位でのバッファリングには１を設定してください。

## 練習

#### Bublle sor algorithm

```python=
class AbstractClassForComparation(metaClass=ABCMeta):
    @abstractmethod
    def count(self, array):
        pass

# The method to compare the numbers in the array.

class CompareTwoNumber(AbstractClassForComparation):
    def count(self, array)
        n = len(array)
        for i in range(n):
          print('i is {0}'.format(i))
          for j in range(0, n-i-1):
            if array[j] > array[j+1]:
              array[j], array[j+1] = array[j+1], array[j]
        return array

simple = [1129, 9201, 102, 149, 1476, 0, 1901]

print('the result is {0}'.format(ComparetwoNumber().count(simple)))

```