○回繰り返す >>> for i in range(0, 5): ... print u"%d回目" % (i + 1), ... 1回目 2回目 3回目 4回目 5回目 >>> >>> for i in xrange(0, 5): ... print u"%d回目" % (i + 1), ... 1回目 2回目 3回目 4回目 5回目 range() はリストを作って繰り返します。xr…
cursesというのは端末操作用のライブラリです。キーボードから入力を受け取ったり、画面に文字を表示したり、サブウィンドウを作ったり、カーソルを自由に移動させたりできます。もしかしたら vim っぽいものも作れるかもしれません。僕には vim は無理っぽ…
反復可能なオブジェクト for i in x: print i l = [n for n in x if n % 2] x は要素を一つずつ取り出せる反復可能なオブジェクトです。反復可能なオブジェクトは __iter__() でイテレータオブジェクトを返す必要があります。 class Test: def __iter__(self…
クラス定義とインスタンスの作成 class Test: pass 何もしないクラスを定義しています。 クラス名を関数のように呼び出して、インスタンスを作ります。 t = Test() print t #=> <__main__.Test instance at 0x009AD3A0> インスタンスメソッド class Test: def __init__(self, x=0, y=0): self.x = x</__main__.test>…
数値のリストから偶数だけを取り出して新しいリストを作ります。 nums = range(1,10) list1 = [] for n in nums: if not n % 2: list1.append(n * n) print list1 #=> [4, 16, 36, 64] 同じことをリスト内包表記を使って書くと、以下のようになります。 list…
とりあえずブクマをチェックします。そして「これはひどい」というタグがたくさん付けられていたら、ホッとしてしまいます。自分は普通なんだ。自分は多数派なんだ。そう思って安心してしまいます。はてブの利用者なんて社会全体から見れば少数派であるにも…
仮引数にデフォルト値を設定する def test1(a, b, c=3): print a * b * c test(1, 2, 6) #=> 12 test(1, 2) #=> 6 a と b は必須、c はデフォルト値が設定されているので省略可能です。 デフォルト値が設定されるのは1回目の関数呼び出しの時だけです。つま…
def test(a, b, c=0, d=0, e=0): print "a=%d" % a, print "b=%d" % b, print "c=%d" % c, print "d=%d" % d print "e=%d" % e という関数があるとします。a、b は必須の引数、c、d、e はデフォルト値の設定されたオプションの引数です。 値だけを渡す test(…
lxml を使ってItemSearchの結果をパースしてみます。 etree でXMLをパースする from lxml import etree root = etree.parse(sorce, parser=etree.XMLParser()) print root #=> <lxml.etree._ElementTree object at 0x01292850> source に指定できるのは、Fileオブジェクト、Fileオブジェクトと同じ read() </lxml.etree._elementtree>…
str1 = "ほげ" str2 = r"ほげ" これらは文字列ですが、正確に言うと、指定された文字コードで変換されたバイト列というものです。 文字単位ではなくバイト単位で処理されるので、日本語のように1文字を2バイト以上で表すものを正しく扱うことができません。 …
文字列の扱いが Perl と少し違っていて戸惑ったのでメモ。 print は改行される print "hoge" print "hoge" hoge hoge 改行させたくない場合は、最後にカンマを置きます。 print "hoge", print "hoge hoge hoge ダブルクォートとシングルクォートの区別はない…
急にPythonをいじってみたくなったのでインストールしました。とりあえずECS 4.0からデータを取ってくるスクリプトを書いてみます。 #!python # vim: fileencoding=utf-8 1行目はPerlと同じです。2行目はソースコードの文字コードを指定しています。必要なの…
#body { margin:0 auto; width:600px; } IEの場合はドキュメント宣言が必要。
UTF8フラグが付いていると、テンプレートに渡したときに文字化けするので、UTF8フラグを落とす。 sub get_browse_node { my ($self, $browse_node_id) = @_; my $browse_node_file = File::Spec->catfile( $self->param("browse_node_dir"), "$browse_node_i…
とりあえずトップページを表示するところまで完成。が、行き当たりばったりなもので、明日には少しばかり中身が変わっているかもしれない。 # トップレベルのブラウズノードとその子ノードを表示 sub do_index { my $self = shift; # テンプレートに渡すデー…
設定ファイルを使うのを止めて、トップレベルのブラウズノードだけ別ファイルから読み込むことにする。 sub cgiapp_init { my $self = shift; # トップレベルのノードのリストを読み込む eval { $self->{__TOP_LEVEL_NODE_LIST} = YAML::Syck::LoadFile("top…
変数は直接記述せずに、設定ファイルから読み込むことにする。 # 設定ファイルにYAMLファイルを使用するためのプラグイン use CGI::Application::Plugin::Config::YAML; # インスタンス作成時に呼び出されるメソッド sub cgiapp_init { my $self = shift; # …
CGI::ApplicationはWebアプリを作るためのフレームワーク。やることは大きく分けて三つ。 何種類のページを作るかを決める 各ページに対応するメソッドを、CGI::Applicationのサブクラスで定義する。 2のクラスのインスタンスを作成し、runメソッドを呼び出…
スタイルシートで font-family: sans-serif を指定すると文字化けしなくなった。 <select style="font-family: sans-serif;"> <option value="hoge">hoge</option> <option value="j-hoge">ほげ</option> </select>
引数を取らないオプション use Getopt::Long; my $flag = 0; my $count = 0; GetOptions( "flag" => \$flag, # --flagで$flagを1にする "flag!" => \$flag, # --noflagで$flagを0にする(反転オプション) "count+" => \$count # --countの数だけ$countを増…
バッファとはデータを一時的に保存しておく場所。バッファリングとはデータをバッファに保存すること。print関数はバッファリングを行い、データがある程度溜まってから、まとめて出力するようになっている。 ファイルに出力する場合は一定のバイト数を超え…
正しいことだとわかっているのにできないことがある。 わかっているのになんでできないんだ、と言われる。 できないということは、本当はわかっていないのかもしれない。 わかっているつもりなのに、できていないことを指摘されると痛い。 痛いから無視する…
#!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); my @al = qw(1 2 3); my @bl = qw(a b c); my @list; for my $a (@al) { for $b (@bl) { push @list, [$a, $b] } } print dump(@list); ( [1, "a"], [1, "b"], [1, "c"], [2, "a"], [2,…
#!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Cookie; use CGI::Session; my $q = CGI->new; # セッションIDを取得 my $sid = $q->param("CGISESSID") || undef; # セッションIDからCGI::Sessionオブジェクトを作成 my $session = CGI::Ses…
というモジュールを作ってみた。XML::SimpleやXML::LibXML::Simpleを使った方が楽なんだけど、 $xml->{BrowseNodeResponse}->{BrowseNodes}->{BrowseNode}; というふうに書くのが面倒なので、XML::LibXMLを使って任意のハッシュデータを作るようにしてみた。…
ResponseGroupにItemAttributesを指定して、ItemAttributes/IsAdultProductが1ならアダルト商品。
#!/usr/bin/perl use strict; use warnings; use URI; use LWP::UserAgent; my $uri = URI->new("http://webservices.amazon.co.jp/onca/xml"); $uri->query_form( Service => "AWSECommerceService", Version => "2008-04-07", AWSAccessKeyId => $access_k…
#!/usr/bin/perl use strict; use warnings; package Hoge; sub new { my $class = shift; return bless {}, $class; } sub mk_accessor { my ($self, $accessor) = @_; my $class = ref $self || $self; my $code = sub { my $self = shift; $self->{$acces…
型グロブは識別子の前に*を付けて表し、別名を付ける時などに使う。 *bar = *foo; これで、fooという識別子でアクセスできる変数やサブルーチンに、barという識別子でもアクセスできるようになる。 $foo = "hoge"; @foo = (1, 2, 3); %foo = (a => 1, b => 2…
例えば、$strの値が"hoge"だとして、 print $$str; # $hogeの値を表示 push @$str, 1; # @hogeに要素を追加 $str->{a} = 1; # $hoge{a}に代入 &$str(); # &hoge()を呼び出す というようなことができるのが、シンボリックリファレンス。使い方は普通のリファ…