【python】関数の気持ちになって考える。
おじさんが言うように、ラズベリーパイでIoTプログラミングをするにも、Pythonで書かれていたりするし、何といっても「読みやすい」というのが私もpythonを気に入ってるところです。
pythonの入門書は何冊か読みました。
言語の基本自体はさほど難しいとは感じませんでしたが、少し頭がこんがらがる部分がありましたので、二つほど、ご紹介したいと思います。
最初に「??」となったのが、文字列の部分取得。
文字列変数の後ろに[ ]書きをすることにより、文字の一部分を取り出すことができます。この取り出す際の位置指定がわかりづらいんです。
str = "ABCDEF"
print(str[1:3]) # "BC"
目的は、"BC"を取り出したい。
"A"が0文字目なので、"B"が1文字目。そこから二文字を取りたいので、
print(str[1:2])
と書きたいのだが!違うというね。str[1:2]の出力結果は、"B"になります。
コロンの右側の数字は、取り出したい最後の文字の位置+1を指定する、って書いてあったりしますが、「そんな覚え方はしたくない。」と脳が反射的に返事をしてきます。
文字を0から数えはじめる時点で脳みそに無理させてるのに、そのほかにも頭ひねるなんてまっぴらごめんです。笑
で、ストンと脳に収まったのが、下記の考え方。
定規をイメージして、Aの前に0センチメートルがあって、AとBの間に1センチメートルのメモリがある。Cまで取りたいとすれば、CとDの間にある目盛り、3センチメートルを指定して切り取る、という概念みたいです。
|A|B|C|D|E|F|
0 1 2 3 4 5 6
str = "ABCDEF"
print(str[1:3]) #"BC"
print(str[4:6]) #"EF"
スライスっていうみたいですね。基本を覚えろよーってことですね。すみません。
あと頭を抱えたのが、これ。
def counter():
count = 0
def inner_counter():
nonlocal count
count += 1
return count
return inner_counter
cnt = counter()
print(cnt()) #1
print(cnt()) #2
print(cnt()) #3
クロージャー(closure)という説明の中のサンプルコードでして、ここではクロージャーについては説明しませんし、クロージャーはわかるのです。
しかし、
なのに出力結果は、常に1ではなく、なぜ1ずつ上がっているのか。
このサンプルコードを眺め続け、やがて睡魔に襲われてしまう日々。苦笑
よくわからないので、関数の気持ちになって考えてみます。
cnt = counter()
これで、
cnt君は、counter関数というものがどんなものかを理解するため、お散歩に出ます。
def counter():
count = 0
def inner_counter():
nonlocal count
count += 1
return count
return inner_counter
覚えたぞ!
print(cnt())
ドキドキ・・・
自分が返す値は、inner_counter関数の結果だったな。
def inner_counter():
nonlocal count
count += 1
return count
return inner_counter
答えは1だよ。
よし、もういっちょ!
print(cnt())
自分が返す値は、inner_counter関数の結果だったな。
def inner_counter():
nonlocal count
count += 1
return count
return inner_counter
答えは2だよ。
よし、もういっちょ!
print(cnt())
関数の立場に立てば、何となく考え方も、気持ちも、わかったような気がします・・・。
これでいいのか悪いのか。笑
とりあえずこれで理解しときますが、きちんとご説明をしていただけるマルタスフリークの方がもしいらっしゃいましたら、コメントやメールいただけたら幸いです。
では!ノシ
こんにちは。
設定が保存されない項目は、いくつかの項目でしょうか、それとも全部でしょうか。
当方の環境では再起動しても保存されているように見受けられます。
もう少しおしえていただければ幸いです。
ムヴカソ君ver1.3,1.2 両方とも再起動時に設定が保存されない状況に見舞われております。
ページ違いだとは思いますが、対応策等ありましたら教えていただけると助かります。
win10 homeでの環境です。