タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

Pythonとprogrammingとstudyに関するraimon49のブックマーク (123)

  • レキシカルスコープとダイナミックスコープ

    1. レキシカルスコープとダイナミックスコープの違い 言語によって、変数のスコープに関する仕様が異なる。スコープには、レキシカルスコープとダイナミックスコープがある。採用しているスコープにより、変数の参照の仕方が違う。 レキシカルスコープでは、プログラムとして書かれた字句を解析すれば、変数のスコープを把握できる。実行時のことは考えなくて良い。これに対して、ダイナミックスコープでは、実行時における関数の呼び出され方により、参照できる変数が異なる。 用語の説明を見る前に、具体例を見た方が理解しやすい。 Scope (computer science) - Wikipedia の Lexical scoping and dynamic scoping によると、 … if function f invokes a separately-defined function g, then under

  • HowTo/Sorting - Python Wiki

    Sorting Mini-HOW TO Original version by Andrew Dalke with a major update by Raymond Hettinger Python lists have a built-in sort() method that modifies the list in-place and a sorted() built-in function that builds a new sorted list from an iterable. There are many ways to use them to sort data and there doesn't appear to be a single, central place in the various manuals describing them, so I'll do

    raimon49
    raimon49 2012/03/16
    ビルトイン関数list.sort()とsorted()のレシピ集。sorted()はシーケンス型なら何でも受け取れるから非常に強力。
  • Bitbucket

    raimon49
    raimon49 2012/02/01
    エキPyのお題
  • 他の言語に慣れた人がRubyを使ったときにつまずきがちな9つのポイント - 西尾泰和のはてなダイアリー

    他の言語に慣れた人がPythonを使ったときにつまずきがちな9つのポイントの続編。ささださんも書いています see: だいありー 0は真, 空文字列も真 C言語などと違って、0は偽ではない。PythonJavaScript, PHPと違って空文字列も偽ではない。 >if 0 then print "true!\n" end true! > if "" then print "true!\n" end (irb):1: warning: string literal in condition true! 括弧がなくても0引数での関数呼び出しが起きる PythonJavaScriptでは式中に現れた関数名は関数を指す。しかしRubyでは0引数での呼び出しが行われる。 # Python >>> def foo(): print "foo!" ... >>> foo <function foo

    他の言語に慣れた人がRubyを使ったときにつまずきがちな9つのポイント - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/01/28
    真偽評価やクラス宣言で拡張してしまうところは、つまづきと言うかRubyの哲学を感じさせる部分
  • 他の言語に慣れた人がPythonを使ったときにつまずきがちな10のポイント - 西尾泰和のはてなダイアリー

    今日質問されて、以前Twitterで書いたのを思い出して、そして検索性が悪くて見つけ出すのに苦労した。こちらに転載しておく。詳細は気が向いたときに埋める。 オプション引数の評価タイミング Rubyではオプション引数は関数が呼ばれるたびに評価される。 def foo() print "foo!" end def bar(x=foo()) end bar #=> foo! と出力される bar #=> foo! bar #=> foo! Pythonでは関数の定義時に1回だけ評価される。 def foo(): print "foo!" def bar(x=foo()): pass #=> foo!と出力される bar() #=> 何も出力されない bar() 「引数が省略されたら今の日時」みたいな毎回評価したい場合はデフォルト値をNoneにしておいて「Noneだったら=省略されていたら」のif

    他の言語に慣れた人がPythonを使ったときにつまずきがちな10のポイント - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/01/26
    あるある集。nonlocalキーワードが使えない2.x系でのinner()側からの参照はリストを使う。1つのタプルに(1,)カンマが必要というのは意識していなかった。
  • 詳細 ECMA-262-3 第7章1節 OOP: 概説 - mixi engineer blog

    おはようございます。「 Dmitry 先生、言いたい放題」のコーナーへようこそ。大形尚弘です。 今回は最長、そして ECMAScript をどっかに忘れた Dmitry 先生が、オブジェクト指向というものを一般より一段抽象化したレベルから語ります。 誰あろう私がそうなのですが、オブジェクト指向や、その他の何であれプログラミングパラダイムを学ぶとき、大抵そのパラダイムを代表する実装や言語をベースに学習します。すると、パラダイム自体への理解が、その実装の制約に縛られることが多々あると思います。 私は主に ActionScript2/3 でオブジェクト指向を学習しましたので、 JavaScript は「オブジェクト指向言語では無い」と思ってしまっていたことがあります。これはこの章をお読みいただければ分かるとおり、全くの間違いです。正確に表現するならば、オブジェクト指向のための「理論的糖衣」が A

    詳細 ECMA-262-3 第7章1節 OOP: 概説 - mixi engineer blog
    raimon49
    raimon49 2012/01/20
    メッセージ応答性がプロトタイプベースモデルの特徴、カプセル化は隠す目的のために隠すのではない、など。長いけど勉強になった。
  • https://www.freia.jp/taka/blog/753/

    raimon49
    raimon49 2012/01/05
    2.5 / 2.6+ / 3 互換bytes
  • inforno :: Python,Rubyの言語内DSL構築力:PythonでRakeをまねる場合を例に

    Python で Rake を真似るとしたら という反応を頂いたので、それにまつわるお話を。 まず、CodeReposにコミットしてあるtasktoolsは distutils及びsetuptoolsを拡張する ということを念頭に置いています。ですのである程度distutils.core.Commandの思想というか、インターフェイスを残しています。 タスクをクラスで定義すること オプションの定義方法 sub_commands や finalize_options といったメソッド などなどは元のまんまです。 じゃあ、 distutils や setuptools を抜いて好きにRakeをPythonで真似るとしたら、というのが今回メインのお話。最初にこんな感じでコマンドを定義しますよ、というのを出してしまいます。 1from __future__ import with_statemen

  • all()とany()は意外と使える子かもしれない。 - podhmoの日記

    組み込み関数の中の使えない子 pythonの組み込み関数の中に以下の3つがあります。 reduce() all() any() これらの3つを組み込み関数のわりに使いどころが少ない。使えない子たちだと認識してました。 例えばall()、any()は、各シーケンス*1内の真偽値について、名前から推測できなそうな処理を行い、結果を真偽値で返すのですが all([True,True,True]) # => True all([True,True,False]) # => False any([True,True,False]) # => True any([False,False]) # => False 比較関数を引数として渡すことができません。sortedやsortなどの関数は、比較関数を引数として取れるのに不思議なものです。リスト内の全ての要素に対して評価を与えてその結果を真偽値として欲し

    all()とany()は意外と使える子かもしれない。 - podhmoの日記
    raimon49
    raimon49 2011/12/14
    map()を余り使わないところを出発点として気付くこと。reduce()さん…。
  • Re:Python とクロージャ - atsuoishimoto's diary

    @kumagi: @shomah4a 記法をちょっと改める事で回避出来るというのも謎ですし、なぜリストならクロージャ出来るのかわからないのですがどういう哲学でこんな設計になってるのでしょうorz http://d.hatena.ne.jp/shomah4a/20110909/1315542720 関数をネストできるようなプログラミング言語でスコープの扱いをどうするかという話だが、現実に可能な解決手段というのはそれほどないもので、いろんなパターンを考えてみて、それぞれのメリット・デメリットを考えてみれば、同意はできないにしろ理解はできるんじゃないかと思う。 ちなみにPythonのスコープ設計の論拠は PEP 227 -- Statically Nested Scopes にまとめられていて、この文書によれば親スコープの変数の再設定ができないのは主にGuidoの反対が理由だったようだ。私の記憶

    Re:Python とクロージャ - atsuoishimoto's diary
    raimon49
    raimon49 2011/09/18
    PEP 227 「それクラスで」
  • Python のセットがすごい

    ~$ python -m timeit -n 1000 "[x for x in range(1000) if x in range(500, 1500)]" 1000 loops, best of 3: 28.2 msec per loop ~$ python -m timeit -n 1000 "set(range(1000)).intersection(range(500, 1500))" 1000 loops, best of 3: 120 usec per loop リスト内包が約235倍時間かかりますね。リストをセットにするのも時間かからないので、合併や、交差は絶対 set() を使ったほうがいいですね。 Update range(500, 1500) を 1000回くらいよばれてしまっているので、一回呼び出すようにすると、 28.2msec が 18.2msec になった。ま

    raimon49
    raimon49 2011/09/08
    リスト内包 vs set()
  • 高階関数(クロージャ)とメソッド(クラス) - podhmoの日記

    (書いていたら当たり前な感じのことになった。) クロージャとオブジェクト こんな話がある。 クロージャ(閉包)があればオブジェクトは作れる。 クロージャとオブジェクトの機能としての豊かさは等価だ。 オブジェクトは状態を持つ。 あまり厳密な話をする気はないけれど、例えばpythonなどのクラスとクロージャの両方をサポートする言語を使うとき、どちらを使ったら良いか迷うことがあった。 普通にコードを書いている時には一定のガイドラインが頭の中にあるかもしれない。 クロージャもクラスも状態を持つ その状態を利用した機能が1つだけで十分な時にはクロージャを使う。 その状態を利用した機能が複数存在する時にはクラスにすることを考える。 具体的な話。 例えば以下のような感じ。 引数を受け取りその値を状態として保持する。次に適用する時には、保持した状態との和を返す。 そういう機能を持ったものを作りたい。機能は

    高階関数(クロージャ)とメソッド(クラス) - podhmoの日記
    raimon49
    raimon49 2011/08/09
    クロージャとクラスの使い分け クロージャでクラスの再発明
  • C#/Scala/Python/Ruby/F#でデータ処理はどう違うのか?

    ■概要 以前、C#でのデータ処理について解説した。今回は、同様のデータ処理を、C#以外のプログラミング言語ではどうしているのか、(C#も含めて)以下の5つの言語を比較しながら説明していく。 C# Scala Python Ruby F# 結果としてできることは似ているのだが、その内部的な実装方法は言語ごとにさまざまである。 ■データ処理のおさらい 概念的には、「データ処理」というのは、Figure 1に典型例を示すように、条件選択や変換など、小さな処理単位に分けて、それをつないでいく形を取る。

    C#/Scala/Python/Ruby/F#でデータ処理はどう違うのか?
    raimon49
    raimon49 2011/07/23
    mix-in, yield, 多重ループで値集合を生成する式の比較。濃い…。執筆者さんのフォロー記事も。http://bit.ly/no8Egb
  • Python学習に使えそうなPygameのサンプル集 | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

    みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー プログラミングに限らず,なにかを学んでモノにするには楽しく続けることが重要。学習を楽しく続けるためには,成果が見えるような仕組みをつくることがコツだと思う。 ゲームを作りながらプログラミングを学ぶ,という手法は,学習を楽しく続ける方法の一つとして使われることがある。プログラミングを学ぶ家庭で,成果物として実際に遊べるゲームができるので,目標を設定しやすいし,学習した成果も見えやすい。モチベーションを維持しながら,お勉強を続けてゆくことが出来る。 PythonにはPygameというゲーム作りに便利なライブラリがある。このPygameを使ってゲームを作る手助けとなるサンプルを見つけたので紹

    raimon49
    raimon49 2011/05/19
    当たり前だけどPythonで書いてもメインループで待ち受けるんだな
  • メソッドオブジェクトの不思議とid()の落とし穴 - atsuoishimoto's diary

    さて、@aroma_blackさんがこんなスクリプトで悩んでおられたのである。 class C(object): def foo(self): pass c = C() print id(c.foo) == id(c.__class__.foo) print c.foo is c.__class__.foo @aroma_blackさんはメソッドオブジェクトがどこに隠れているのか調べていたようだ。この二つのprint文で出力される結果はおわかりだろうか。 c.foo is c.__class__.foo まず、二番目のprint文から見てみよう。 c.fooは見た通り、Cクラスのインスタンス c からメソッド foo を取得する式である。 >>> c.foo <bound method C.foo of <__main__.C object at 0x02A8B3B0>> c.fooでは、

    メソッドオブジェクトの不思議とid()の落とし穴 - atsuoishimoto's diary
    raimon49
    raimon49 2011/05/01
    >Pythonではbound methodオブジェクトを参照されるたびに生成し、インスタンスにはbound methodオブジェクトへの参照を持たないようにしている
  • Python2のstrは死んだ - atsuoishimoto's diary

    Python3の概略をざっと聞くと、Python3ではPython2のユニコード型が文字列型になり、文字列型はバイト文字列型になった、というイメージを持ってしまう人も多いだろう。Python2の s="spamspamspam" は、Python3の s=b"spamspamspam" と同じだ、と。 しかし、Python3に"バイト文字列"なんて存在しない。あるのは "bytes"だ。複数形を示す "s"に注意しよう。bytesはバイトのコンテナであり、バイトとは整数値だ。バイトは文字ですらないのだ。 そう、だからもう認めよう。Python2のstrは死んだ。Python3にはもう存在しない。strは消え去った。お亡くなりになった。お隠れになった。成仏した。主の御許に召された。バージョン履歴に残るゴミクズとなった。その生涯は幕を閉じ、アンコールに応じることもないのである。 strとbyt

    Python2のstrは死んだ - atsuoishimoto's diary
  • Python でファイルを直接イテレータとして使うのが適切でない場合 - methaneのブログ

    Pythonでサブプロセスと対話する - 西尾泰和のはてなダイアリー Python のファイルは、通常のファイルの読み込みの効率を考えて大きめ(8192バイト)のバッファリングを行っているので、ソケット通信やパイプで問題になるケースがある。 問題になるケースの一つがファイルオブジェクトをイテレータとして使って行単位の処理をする場合で、 for line in fileobj: do_something(line) のようなコードを書くと、実際には fileobj の中にあるCのFILEから一気に読み込み、その中から改行文字を探して切り出していくので、8192バイト読み出せるかファイルの終端に到達するまでブロックしてしまう。 一方、 file.readline() は、改行を見つけるまで getc() を繰り返すか、(UnixでUniversal Newlineを使わない場合は)fgets

    Python でファイルを直接イテレータとして使うのが適切でない場合 - methaneのブログ
    raimon49
    raimon49 2011/04/24
    ソケット通信やパイプで大きめのファイルを扱いたければ素のファイルオブジェクトではなくiter(fileobj.readline, '')を
  • リストのかけ算 - atsuoishimoto's diary

    Python初学者が引っかかる落とし穴に、 seq = [[]] * 5 seq[0].append('A') print(seq) としたとき、どのような出力が出るか?というのがある。 一見、 [['A'], [], [], [], []] となりそうだが、実際には [['A'], ['A'], ['A'], ['A'], ['A']] となる。 seq = [[]] * 5 という文はちょっとごちゃごちゃして分かりにくいのでちょっと書き直してみると item = [] seq = [item] * 5 と同じだ。まず空のリストを一つ作成し、そのリストを要素とする長さ1のリストを作る。そして長さ1のリストを *5 して長さ5のリストを作成し、 seq に 代入する。Pythonスクリプトとして書き直すと: def list_mul(seq, n): ret = [] for i in r

    リストのかけ算 - atsuoishimoto's diary
    raimon49
    raimon49 2011/04/09
    >シーケンスのかけ算は、要素と同じ値のオブジェクトを作成するのではなく、同じ要素を乗数分持ったリストを作成する演算であることを憶えておこう。
  • func_closureのひみつ - atsuoishimoto's diary

    Pythonでデコレータで修飾した関数から、修飾される前の関数を取り出したいというニーズは多いようで デコレータ式を適用した関数から元の関数名を探す - gumi Engineer’s Blog デコレータを外す - logiqboard デコレータを取り除いて見たかった。 - podhmoの日記 のようなブログエントリが上がっているが、Pythonでは元の関数を取り出す確実な手法は用意されていないので諦めていただきたい。デコレータを使って関数を定義しても、Pythonはその情報をどこにも記録していない。 必要であれば http://docs.pylonsproject.org/projects/venusian/dev/ のようにデコレータ自身に細工をする、テスト対象モジュールのインポート時にフックを入れ、修飾せずに元の関数を返すデコレータに置き換えるなどとするしかないだろう。 自由変数

    func_closureのひみつ - atsuoishimoto's diary
    raimon49
    raimon49 2011/04/02
    func_closure/__closure__を見てもデコレート元関数を確実に見付けられる訳ではない理由。「自由変数を持つ関数がクロージャ」っていう定義がとても分かり易い。
  • Pythonで学ぶ「詳解 UNIXプログラミング」(その5) 第5章 標準入出力ライブラリ - atsuoishimoto's diary

    5.1 getc()とputc()を用いて標準出力へコピーする import sys while True: c = sys.stdin.read(1) if not c: break sys.stdout.write(c) 5.2 fgets()とfputs()を用いて標準出力へコピーする import sys for line in sys.stdin: sys.stdout.write(line) Pythonにはgetc()/putc()/fgetc()/fput()がないので、ここでは似たような機能で再実装してみた。 サンプル5.1 はsys.stdin.read()を使って、一文字ずつ読み込んでいる。サンプル5.2では、sys.stdinをfor文を使って読み込み、一行ずつ出力している。 5.3 さまざまな標準入出力ストリームのバッファリング方式を表示する 残念ながら、Pyth

    Pythonで学ぶ「詳解 UNIXプログラミング」(その5) 第5章 標準入出力ライブラリ - atsuoishimoto's diary
    raimon49
    raimon49 2011/03/19
    Cで言うところのgetc()/putc()/fgetc()/fput(), tempfileモジュール