python プログラミング作法
リストなど変数に代入するのは、参照のコピーでしかない。 これは、関数、メソッドの呼び出しで引数を渡すのも同じこと。 渡したつもりで、参照がコピーされただけなので、メソッドの中で引数が変化すれば参照元も変化して見える。 これを知らなければ、 >>> a=[1,2,3] >>> b=a >>> b [1, 2, 3] >>> b[1]=11 >>> a [1, 11, 3] >>> b [1, 11, 3] >>> という、不可解な現象に悩むことになる。 これは、bには、aから[1,2,3]への参照と同じ参照が渡されるだけだからだ。 これだけ見ると、どうしてこうゆう仕様になっているのか不思議だが、メソッドの引数渡しでもこの動きはあって、 def func_a(rec): rec[1]=22 a=[1,2,3] print a func_a(a) print a ーーーー [1, 2, 3] [1, 22, 3] からわかるとおり、メソッドの受け取った引数recはローカル変数かと思いきや、参照しか渡されていないので、メソッドの中で引数を変更すると、メインルーチン側でも変数が変化していることがわかる。 そうすると、メソッドと上位ルーチン間での引数、リターン値のやり取り方法にいくつか方法が考えられる。
結果 [1, 3000002, 3]elapsed_time:1574.20301437[ms] [1, 3000002, 3] elapsed_time:1273.03004265[ms] [1, 3000002, 3] elapsed_time:2094.46501732[ms] [1, 3000002, 3] elapsed_time:1342.04602242[ms] [1, 3000002, 3] elapsed_time:1299.40485954[ms] 一番早いのは、way4の、グローバル変数をメソッドの中でそのまま変更する方法。 だがこれは何やってるのかソースの可読性が悪い。 一番遅いのは、way2-1のループの中に代入がある方法。 普通は、way1の、引数とリターンを使う方法。 以上で分かるように、出来るだけ、値のコピーをしないほうが速度が向上する。 pythonの解析サイトで、「代入が参照なので、気をつけるように」というのはよく解説されていることだが、どうしてそうなっているのかの理由まで言及しているところが見当たらない。 現象としては、「代入文の右辺が左辺に影響される」という現象がよく言われるのだが、実はこれは副作用ではないかと思う。 やりたかったのは、メソッドへの引数をコピーなしに渡したい、ということではなかったかと思う。 代入文で右辺が左辺に影響されるというのは、バグを誘発する要因でしかないが、メソッドへの引数がコピーなしに渡せるというのは思想だと思う。 それだけに、その思想は理解しないと、変数のスコープが曖昧だというデメリットばかりが目にについてしまう。 先ほどの実験でも、なるべく値のコピーを発生させないようなコーディングのほうが早いというのが見て取れた。 引数渡しは、変数がグローバルかローカルかというのより上位の概念のようで、変数名にかかわりなく、参照がコピーされるだけだ。 プログラミング作法としては、メソッドの中の引数は、ローカルではなくグローバルのつもりでアクセスすることが必要だし、必要ない中間の変数をやたらと生成しないようにするほうが良い。 #
by studio_do
| 2019-12-31 19:58
| 機械室から
|
Comments(0)
2019年11月に逝去された、井上三郎氏が残された教則ビデオのうち、マンドリンの部を一覧にしました。 新しいものから古いものへと並んでいます。 |(52) Moonshiner Jam 201905 15 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of B - YouTube|(52) Moonshiner Jam 201905 14 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of A - YouTube |(52) Moonshiner Jam 201905 13 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G 通 - YouTube |(52) Moonshiner Jam 201905 12 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube |(52) Moonshiner Jam 201905 11 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube |(52) Moonshiner Jam 201905 10 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube |(52) Moonshiner Jam 201905 09 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube |(52) Moonshiner Jam 201905 08 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube |(52) Moonshiner Jam 201905 07 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube |(52) Moonshiner Jam 201905 06 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube |(52) Moonshiner Jam 201905 05 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube |(52) Moonshiner Jam 201905 04 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube |(52) Moonshiner Jam 201905 03 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube |(52) Moonshiner Jam 201905 02 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube |(52) Moonshiner Jam 201905 01 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) ごあいさつ - YouTube #
by studio_do
| 2019-11-25 23:32
| 音楽
|
Comments(0)
linux on androidのchroot環境では、カーネルの改変がやりにくいため、cifsをインストールするなどカーネルをいじるインストールが困難。
ファイルシステムが追加できないので、sambaクライアントの実装が出来ない。 samba自体は、ただn通信プロトコルであって、pythonでモジュールがある。 あとは、ファイルブラウザを作れば、sambaクライアント程度は実装出来そう。 pythonには、ttkモジュールにtreeviewウィジェットがあってファイル一覧が簡単に実現できる。 pythonのsambaには、 pysmb pysmbc の2つがある。 ここで使ったのは簡単な、pysmbcのほう。 #
by studio_do
| 2019-09-30 15:11
| 機械室から
|
Comments(0)
で、コードを考えるソフトを作ってみた。 Windows用であるが、開発はlinux/Python。 考えたいコードをクリックすると、使える音が仮想指板上に示されるので、「どこが押さえられるかな?」と考える。 考えたコードは、テキストファイルにして自分用のコードブックとして編集できる。 特徴的なのは、ダイアトニックモードであって、そのキーのダイアトニックコードを表示できる。 ジャズのややこしいコードが出てきたとき、「これはダイアトニックなのか、転調してるのか?」と悩む のに使う。 ウクレレとか、テナーギター(ビオラ、テナーバンジョー、マンドセロ)、マンドリン、ドブロに対応しているので、マンドリンでジャズをやりたいときに、C6ってどう押さえるなどと悩むのにも使える。 #
by studio_do
| 2019-07-05 07:51
| 音楽
|
Comments(0)
練習ではちょっとはマシに弾けるんだけど、本番になると右手が硬直して震えてしまい、特に指弾きが出来ないという理由について経験から書いてみます。 普通はメンタルなものなので、リラックスすることを心がけよ、と言われてしまいますが、ある程度のメカニズムはあるもんです。 1)本番の時だけ、ズボンの右のポケットに財布が入っている。 寝間着で練習している時と違って、本番ではズボンの右ポケットが何かで膨らんでいて、ギターの角度が寝かせ加減になってしまっているかもしれません。 こうなると、右手の小指側の腱が緊張して、手が震えやすくなります。 練習の時とギターの角度が同じかどうか確認しましょう。 2)右手の親指が、ニュートラルな位置に無い。 右手の初期ポジションが4弦側にずれているなど原因で、親指を6弦に置くために、筋肉を使って指を6弦側に持ち上げる必要があった場合、緊張でその筋肉が暴れることがあります。 そうなると、リラックスしては弾けなくなるので、右手のポジションを見直します。 3)右手のポジションを固定するために、薬指、小指を立ててボディや1弦に当てている場合。 ピック弾きのとき、手首をブリッジにおく癖のひとが指引きをやろうとする場合、位置を固定するために小指などをボディに突き立てたり、1弦を小指で抱き込んだりして固定しようとすると、手の平の筋肉が緊張し、震えることがあります。 特にアーチトップで顕著だと思います。 4)緊張している。 失敗するんじゃないか?、この間は失敗したじゃないか。 というループに入り込むと、なかなか抜けだせません。 リラックスすることが必要なので、リラックスした状態をホームポジションとして演奏が出来るように、ギターの位置、右手のポジションを見直します。 結局、ギター系弦楽器の右手の基本である、 「手をブランブランとさせて、どこにも力を入れず、肘関節だけの力で、右手を弦の上に載せた形がホームポジション」というのを忠実に見直すことが必要です。 これはピックでも指でも同じ。 しっかりした音を出すのに、力強くピッキングするのは必要ですが、定常的にどこかが緊張しているのはよくありません。 #
by studio_do
| 2018-06-17 18:09
| 音楽
|
Comments(0)
|
カテゴリ
以前の記事
2024年 03月 2024年 01月 2023年 06月 2023年 05月 2023年 02月 2022年 12月 2021年 11月 2021年 10月 2021年 07月 2021年 02月 2020年 10月 2019年 12月 2019年 11月 2019年 09月 2019年 07月 2018年 06月 2018年 02月 2017年 11月 2017年 10月 2017年 08月 2017年 07月 2017年 06月 2017年 03月 2017年 02月 2017年 01月 2016年 10月 2016年 09月 2016年 08月 2016年 06月 2016年 03月 2015年 06月 2015年 04月 2015年 03月 2014年 07月 2013年 12月 2013年 04月 2012年 09月 2012年 04月 2012年 03月 2012年 02月 2012年 01月 2011年 12月 2011年 11月 2010年 12月 2009年 09月 2009年 03月 2008年 12月 2008年 05月 2008年 01月 2007年 12月 2007年 04月 2006年 12月 2006年 10月 2006年 06月 2006年 05月 2006年 04月 2006年 03月 2006年 02月 2006年 01月 2005年 10月 2005年 03月 フォロー中のブログ
ライフログ
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||