Pythonインタラクティブシェルでファイルをモジュール名を付けずにimportする方法
>>> from foo import *
これでfoo.pyの全てのメソッド、変数をimport出来る。ちょっとメソッドの挙動を調べたいときに便利。
パイプとリダイレクトについて
パイプ
$ echo foofoo | mail hoge@example.com # 出力をmailコマンドに渡す $ ps aux | grep bash # psの出力をgrepコマンドに渡す 1437 0.0 0.0 2461044 928 s000 S 10:20PM 0:00.13 -bash 4463 0.0 0.0 2443044 804 s000 S+ 11:17PM 0:00.00 grep bash
次のコマンドに出力を受け渡すのがパイプ。
リダイレクト
$ echo 1st > test.txt $ cat test.txt 1st $ echo 2nd > test.txt $ cat test.txt 2nd # '>'は上書き $ echo 3rd >> test.txt $ cat test.txt 2nd 3rd # '>>'では追記される $ echo 4th >> test.txt $ cat test.txt 2nd 3rd 4th
ファイルに出力するのがリダイレクト。'>'だと上書き、'>>'だと追記される。'>>'を'>'で書き間違えるとヤバそう。
参考
lein replで便利な技 (Clojure)
毎回忘れるのでメモ。
ファイルの再読み込み
律儀にrequireですると、
(require '[foo.bar :refer :all] :reload)
長くて面倒だからuseを使うと、
(use 'foo.bar :reload)
複数ファイルを読み込む時は、
(use 'foo.bar 'foo.baz :reload)
みたいにスペースで区切れば良い。
'や[]を忘れやすいから要注意。
また、一気に複数ファイルを読み込んでくれるtools.namespaceというライブラリもあるらしい。
参考
ネストしたメソッドから外側の変数を参照したいができない(Ruby)
ダメな例
def twice(x) def inner(y) return x + y end return inner(x) end
> twice(2) NameError: undefined local variable or method `x' for main:Object
Rubyではdefしたらスコープが切り替わるため、defの外側のスコープを参照できない。
参考: Ruby のネストしたメソッドと、変数のスコープ | すぐに忘れる脳みそのためのメモ
解決策
def twice(x) inner = lambda {|y| return x + y } return inner.call(x) end
> twice(2) => 4 > twice(3) => 6
ブロックをlambdaでオブジェクト化し、それをローカル変数に代入する。callメソッドで呼び出すときの引数がブロック変数に渡される。関数じゃないけど第一級関数みたいでおもしろい。
参考: 楽しいRuby第4版 p417-p420
innerはアローを使って次のようにも書ける
inner = ->(y) {
return x + y
}
こっちは無名関数みたい。
参考: Matzにっき(2010-06-16)
まとめ
ネストしたメソッドはRubyではあまり意味がない。代わりにブロックを使う。
小数の10進数を2進数で表す方法
基本情報技術者試験に向けて勉強していて、小数の10進数を2進数で表す問題があった。整数部分は知っていたけど、小数部分については知らなかったのでメモ。
例)を2進数で表わせ 。
まず整数部分と小数部分に分けて考える。
整数部分の7について
1になるまで2で割ってき余りを記録していく。図のように書くのが簡単。
そして図の矢印のように記録した順と逆に余りをならべて
小数部分の0.75について
小数部分に2をかける。出てきた数の整数部分を記録し、再び小数部分に2をかける。この操作を出てくる数が1になるまで繰り返す。図のように書くのが簡単。
そして図の矢印のように記録した順に並べて
以上より
今日したこと
Vimの勉強
新たに学んだコマンド
- インデント
>G
すごく便利そう! - 別ファイルを開く
:e ファイルのパス
パスを./
とするとカレントディレクトリ内のファイルの一覧が表示される。 - 次の行に挿入
o
A<return>
と同値 - 行内で前方検索+カーソル移動
f<文字>
;
で次へ行く、,
で前に戻る、後方検索はF
後方検索の場合;
と,
の向きが逆になる。(当たり前?) - 削除して挿入
s
- 文書で前方検索+カーソル移動
/<文字>
n
で次へ行く、N
で前に戻る、後方検索は?
- 置換
:s/対象の文字列/置換後の文字列
&
で次へ行く - 文書で置換
:%s/対象の文字列/置換後の文字列
最後に/g
をつければ全部置換される。最後に/c
をつければ1つずつ置換される。
参考 vim 文字列置換 基本的な事 - Qiita
毎日やること
実践Vimを5TIPSずつする。121TIPSあるから25日後には終わっているはず。
今日したこと
今週のお題「好きなアイス」: パルム
deinのインストール
リポジトリ
GitHub - Shougo/dein.vim: Dark powered Vim/Neovim plugin manager
vimrcの設定を参考にした。自動インストールが便利。
Vim入門(1): Vimのプラグインを管理するdein.vimの使い方 | Simplie Post
VimClojureのインストール
参考にした。
Markdown記法まとめ(見出し、段落、改行、水平線、強調、引用、コード)[1/3] - はしくれエンジニアもどきのメモ
deinを使ってのVimClojureのインストールはvimrcに
call dein#add('vim-scripts/VimClojure')
を追加して再起動。シンタックスがついて見やすくなった。
clojureの勉強
contains?はListに対しては使えない。
(def a-set #{:a :b :c}) (def b-list '(:a :b :c)) (class a-set) ;=> clojure.lang.PersistentHashSet (class b-list) ;=> clojure.lang.PersistentList (contains? a-set :c) ;=> true (contains? b-list :c) ;=> IllegalArgumentException contains? not supported on type: clojure.lang.PersistentList clojure.lang.RT.contains
vimの勉強
新たに学んだコマンド
先頭挿入 : I
やり直し : ctrl + r
入力補完 : ctrl + p