Python の背景知識
動画チュートリアルの付録 1 - Python 構文: https://singtown.com/learn/50061/
Pythonを使用する利点
OpenMV は二次開発に Python を使用できます。いくつかの利点があります。
- 簡単に始められます
- メモリの適用と解放を考慮する必要がない
- 直接使用できる MicroPython ライブラリが多数あります (PC 上の Python モジュールとは互換性がありません)。
- 開発チームは、OpenMV のさまざまなアルゴリズムとモジュールを開発しました。
Python は非常に一般的に使用される言語であり、画像処理、機械学習、ネットワーク プログラミングで広く使用されています。また、Python は非常に簡単に始めることができる言語です。他の言語 (C、C++、Java など) のプログラミングの基礎があれば、簡単に始めることができます。
C/C++/Java (またはその他の言語) でのプログラミング経験がある場合に推奨\ Liao Xuefeng の Python チュートリアル
プログラミング経験がない場合に推奨\ 愚かな方法で Python を学ぼう
REPLとシリアルポート
OpenMV の IDE には、OpenMV に接続するためのシリアル ポート アシスタントが付属しており、Arduino、pyboard、esp8266 などの他のシリアル ポートに接続することもできます。
まず、OpenMV を IDE から切断します。そうしないと、シリアル ポートが競合します。
OpenMVでツールを開く → ターミナルを開く → 新しいターミナル
ターミナルに入力します
print("hello OpenMV!")
表示されます
hello OpenMV!
Python の構文
出力
print() を使用して括弧内の文字列を追加し、指定したテキストを画面に出力します。たとえば、「hello, world」を出力するコードは次のとおりです。
print('hello, world')
hello, world
print() 関数は、カンマ「,」で区切られた複数の文字列を受け入れて、それらを連続して出力することもできます。
print('The quick brown fox', 'jumps over', 'the lazy dog')
The quick brown fox jumps over the lazy dog
print() は各文字列を順番に出力します。カンマ「,」が出現すると、出力文字列は次のように綴られます。
The quick brown fox jumps over the lazy dog
print() は整数や計算結果を出力することもできます。
print(300)
300
print(100 + 200)
300
したがって、100 + 200 の計算結果をより美しく出力できます。
print('100 + 200 =', 100 + 200)
100 + 200 = 300
100 + 200 の場合、Python インタプリタは結果 300 を自動的に計算することに注意してください。ただし、「100 + 200 =」は数式ではなく文字列であり、Python はそれを文字列として扱います。
変数
Python では、等号 = は代入ステートメントです。次のように、同じ変数を繰り返し代入できます。
a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)
このように変数の型が固定されていない言語を動的言語と呼び、これに対応する言語を静的言語といいます。静的言語では、変数を定義するときに変数の型を指定する必要があります。値を割り当てるときに型が一致しない場合は、エラーが報告されます。たとえば、Java は静的言語であり、代入ステートメントは次のとおりです (// はコメントを表します)。
int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量
このため、動的言語は静的言語に比べて柔軟性が高くなります。
リストリスト
Python の組み込みデータ型の 1 つは list: list です。リストは、要素をいつでも追加および削除できる、順序付けられたコレクションです。\ たとえば、クラス内のすべての生徒の名前をリストするには、リストを使用してそれを表すことができます。
classmates = ['Michael', 'Bob', 'Tracy']
classmates
['Michael', 'Bob', 'Tracy']
変数同級生はリストです。 len() 関数を使用してリスト要素の数を取得します。
len(classmates)
3
インデックスを使用して、リスト内の各位置の要素にアクセスします。インデックスは 0 から始まることに注意してください。
classmates[0]
'Michael'
classmates[1]
'Bob'
classmates[2]
'Tracy'
classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
インデックスが範囲を超えると、Python は IndexError を報告するため、インデックスが範囲外にならないようにしてください。最後の要素のインデックスは len(classmates) - 1 であることに注意してください。
最後の要素を取得したい場合は、インデックス位置を計算するだけでなく、インデックスとして -1 を使用して最後の要素を直接取得することもできます。
classmates[-1]
'Tracy'
類推すると、最後から 2 番目と最後から 3 番目を取得できます。
classmates[-2]
'Bob'
classmates[-3]
'Michael'
classmates[-4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
もちろん、下から4番目がラインを越えた。
List は変更可能な順序付きリストであるため、リストの末尾に要素を追加できます。
classmates.append('Adam')
classmates
['Michael', 'Bob', 'Tracy', 'Adam']
インデックス番号 1 などの指定した位置に要素を挿入することもできます。
classmates.insert(1, 'Jack')
classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
リストの末尾にある要素を削除するには、pop() メソッドを使用します。
classmates.pop()
'Adam'
classmates
['Michael', 'Jack', 'Bob', 'Tracy']
要素を別の要素で置き換えるには、その要素を対応するインデックス位置に直接割り当てることができます。
classmates[1] = 'Sarah'
classmates
['Michael', 'Sarah', 'Tracy']
リスト内の要素のデータ型は、次のように異なる場合もあります。
L = ['Apple', 123, True]
リストに要素がない場合、それは空のリストとなり、長さは 0 になります。
L = []
len(L)
0
タプル タプル
別の種類の順序付きリストはタプルと呼ばれます。タプルはリストとよく似ていますが、タプルは一度初期化すると変更できません。たとえば、クラスメートの名前もリストされます。
classmates = ('Michael', 'Bob', 'Tracy')
現在、クラス タプルは変更できず、append() や insert() などのメソッドもありません。要素を取得するその他の方法はリストと同じです。classes[0] およびclasses[-1] を通常どおり使用できますが、これらを他の要素に割り当てることはできません。
不変タプルには何の意味があるのでしょうか?タプルは不変であるため、コードはより安全です。可能であれば、リストの代わりにタプルを使用してください。
タプルのトラップ: タプルを定義する場合、次のようにタプルの要素を定義時に決定する必要があります。
t = (1, 2)
t
(1, 2)
ただし、要素が 1 つだけのタプルを定義するには、次のように定義します。
t = (1)
t
1
定義されているのはタプルではなく、t は整数変数であり、変数 t の値は 1 です。これは、括弧 () が数式内のタプルと括弧の両方を表すことができるため、曖昧さが生じるためです。したがって、Python では、この場合は括弧に従って計算が実行され、計算結果は当然 1 になると規定されています。
したがって、要素が 1 つだけあるタプルを定義する場合は、曖昧さを排除するためにコンマを追加する必要があります。
t = (1,)
t
(1,)
また、Python では、要素が 1 つだけのタプルを表示するときにカンマを追加して、数学的計算の意味での括弧と誤解されるのを防ぎます。
条件判断
if ステートメントの完全な形式は次のとおりです。
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
例えば:
age = 20
if age >= 6:
print('teenager')
elif age >= 18:
print('adult')
else:
print('kid')
サイクル
Python には 2 種類のループがあります。1 つは for...in ループで、リストまたはタプル内の各要素を順番に繰り返します。
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
このコードを実行すると、名前の各要素が順番に出力されます。
Michael
Bob
Tracy
したがって、for x in... ループは単に各要素を変数 x に代入し、インデントされたブロック ステートメントを実行します。
1 から 100 までの整数の合計を計算したい場合、1 から 100 まで書くのは少し難しいです。幸いなことに、Python には整数シーケンスを生成できる range() 関数が用意されており、これを次のように変換できます。 list() 関数によるリスト。たとえば、 range(5) によって生成されるシーケンスは、0 から始まり 5 未満の整数です。
list(range(5))
[0, 1, 2, 3, 4]
range(101) は、次のように計算された 0 ~ 100 の整数シーケンスを生成できます。
sum = 0
for x in range(101):
sum = sum + x
print(sum)
2 番目のタイプのループは while ループです。たとえば、100 以内のすべての奇数の合計を計算したい場合、while ループを使用してこれを実現できます。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
===== データ型変換 =====
Python に組み込まれている一般的に使用される関数には、データ型変換関数も含まれています。たとえば、 int() 関数は他のデータ型を整数に変換できます。
>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> str(100)
'100'
>>> bool(1)
True
>>> bool('')
False
===== 機能 =====
Python で関数を定義するには、def ステートメントを使用し、関数名、括弧、括弧内のパラメーター、コロン: を記述し、インデントされたブロック内に関数本体を記述し、return ステートメントを使用して戻り値を返します。機能。
まず、x2 を計算する関数を作成しましょう。
def power(x):
return x * x
power(x) 関数の場合、パラメーター x は位置パラメーターです。
power 関数を呼び出すときは、パラメータ x を 1 つだけ渡す必要があります。
パワー(5)\ 25\ パワー(15)\ 225
では、x3 を計算したい場合はどうすればよいでしょうか?別のべき乗関数を定義することもできますが、x4、x5 を計算したい場合はどうすればよいでしょうか?無限関数を定義することはできません。
xn を計算するには、power(x) を power(x, n) に変更して、次のようにすればよいと考えたかもしれません。
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
この修正されたべき乗(x, n) 関数では、任意の n 乗を計算できます。
パワー(5, 2)\ 25\ パワー(5, 3)\ 125
変更された power(x, n) 関数には、x と n の 2 つのパラメーターがあります。両方のパラメーターは、関数を呼び出すときに、渡された 2 つの値が位置の順序でパラメーター x と n に割り当てられます。 。
スライス
リストまたはタプルの一部の要素を取得することは、非常に一般的な操作です。たとえば、リストは次のとおりです。
L = ['マイケル'、'サラ'、'トレイシー'、'ボブ'、'ジャック']
最初の 3 つの要素を取得し、1 行のコードでスライスを完了します。
L[0:3]\ [「マイケル」、「サラ」、「トレイシー」]
L[0:3] は、インデックス 0 からインデックス 3 までを意味しますが、インデックス 3 は含まれません。つまり、インデックス 0、1、2 はちょうど 3 つの要素です。
最初のインデックスが 0 の場合は、省略することもできます。
L[:3]\ ['マイケル'、'サラ'、'トレイシー']
インデックス 1 から開始して 2 つの要素を取り出すこともできます。
L[1:3]\ ['サラ'、'トレイシー']
タプルもリストの一種ですが、唯一の違いはタプルが不変であることです。したがって、タプルはスライスによって操作することもできますが、操作の結果は依然としてタプルです。
(0, 1, 2, 3, 4, 5)[:3]\ (0, 1, 2)
文字列「xxx」はリストとみなすこともでき、各要素は文字です。したがって、文字列もスライスできますが、結果は依然として文字列です。
'ABCDEFG'[:3]\ 'ABC'
物体
Python は LED ライトなどのオブジェクト指向プログラミングです
from pyb import LED
red_led = LED(1)
red_led.on()
LED はクラス、red_led はオブジェクトであり、このオブジェクトに対してオン、オフ、値の表示などの操作を実行できます。