プログラム

Python

関数デコレータ

def decof(f):
    def newf(*args,**kwargs):
        print(f(*args,**kwargs))
    return newf

@decof
def myf(n,m):
    r=0
    for i in range(n,m+1):
        r += 1
    return r

myf(1,10)

処理の流れ
13行目 myf(1,10)により、関数myf(n,m)が呼び出す。
本来なら、次にmyf(n,m)を実行と進むところだが、そうはいかない。

def myf(n,m)の1行上に@decofというものがついているからだ。

これは、何を意味しているかというと、
myf=decof(myf)
という処理がされるということが隠されているのだ。

したがって、myf(n,m)を実行する前に、上記の処理を考えなくてはならない。

myf=decof(myf)の処理は下記のとおりとなる。

decof(f)のfにmyfが代入される。
newfが戻り値として返され、myfに代入される。
ここで、注意すべきは、newfには、myfという情報に加えて、f=myfという情報も代入されるということだ。
(myfを囲むスコープ(ここでは、decof(f))内の変数(ここでは、f)の定義時(代入時)の情報(ここでは、f=myfということ)も戻り値の中に含まれる。これは、Pythonの仕組みである。)
オブジェクト変数myfには、オブジェクトnewfが代入されるが、さらに、f=myfという情報も代入されるということだ。

ここまでの前処理が終わってから、いよいよ、myf(n,m)の実行を考えることになる。

myf(1,10)の実行

myfは、前処理によって、newfが代入されている。
したがって、
実際には、newf(1,10)が実行される。

newf(*args,**kwargs)が呼び出されると。
まず、*argsに(1,10)というタプルが代入される。呼び出し側の引数に、キーワード引数はないので、辞書型**kwargrgsは、空{}となる。

つぎに、print文の中のf(*args,**kwargs)が実行されるのだが、ここで、fは、実際には、myfである。先ほど説明したように、f=myfという情報をmyfが持っているためである。
本来であれば、fは、decof(f)の呼び出しdecof(myf)による処理が終わった時点で、f=myfという定義は消滅(変数の寿命)しているはずのところを、myfに付加情報として、与えることで、myfの実行を可能にしているのである。)

つまり、
f(*args,**kwargs)は、引数も代入して考えると、
myf((1,10),{})ということになる。

呼び出された、myf(n,m)は、タプル型の引数をアンパックして、受け取る。n=1,m=10となる。

次にrに0が代入される。

range(n,m+1)のnに1,mに10が代入され、range(1,11)という 1,2,…,10 のシーケンス(要素の羅列)が作成され、この要素を1つずつiに代入して、for文内の処理が繰り返される。
(for in 文においては、内部処理として、inの後の集合的なオブジェクトにiter関数が適用されることにより、イテレーション可能なオブジェクトとなる。
これにより、next()メソッドが適用されることで、順にiへの変数代入がなされている。)

for文がi=1から10まで10回実行され、rに足しこまれる。最終的には、55が返される。

<まとめ>
今回は、関数decofの中に追加処理らしきものは、書かれていないのでわかりづらいが、
関数デコレータの目的は、myfという基本機能を持った関数をそのままにして、decofという追加機能の関数を作るということだ。

呼び出し側は、myf()という呼び方で変化がないのに、実際には、myf()を含んだdecof()が呼び出されるという仕組みになっている。

ポイントは、
@decof
def myf(n,m):

は、myf=decof(myf)を意味しているということと、

上記のmyfに代入されるものが、returnで返されるnewfに加えて、f=newfという情報もあるということだ。

Pythonにおいては、裏でどのような処理がなされているかということを暗記しておかないと、コードを解析することは困難である。

<ファンクションクロージャー>

def outer()
     x=1
     def inner()
          print(x)
     return inner

foo=outer()

foo.__closure__

foo()

<解説>
outer()でouter()を呼び出す。
x=1
inner(x=1という情報)が返り値として、返ってきて、fooに代入される。
foo.__func_closure__で、fooが持っている情報を表示
(出力:

foo()(つまり、inner()を呼び出す。

innner()内の処理
x(中身は1)を出力

CSS

セレクタ
a,b aとb両方
a b aの下にあるbだけ
a>b aの直下の子bだけ
a+b aの次にあるbのみ
ab aかつbのもののみ

SQL

1対多
1が親エンティティ
多が子エンティティ

エンティティ=テーブル

あるテーブルのフィールドのうち、他のテーブルの主キー担っているものを外部キーという。

親テーブルの主キーが、子テーブルの主キーに含まれている。
→従属エンティティー(依存エンティティ)
親エンティティなしでは、存在できない。

php

改行 ブラウザ上 ”

ソース上  ”\n”
両方 “
\n”

str_replace(“山田”,”佐藤”,”私は山田です。”)
特定の単語 ”山田”などを置換

$str=”PHP Product”
preg_replace(“/PHP/”,”MySQL”,$str”)
正規表現(上記の例では、/PHP/)によって、対象文字列($str)をチェックして、該当文字列があれば、”MySQL”に変換する。

テキストファイルの場所
phpプログラム
$file=fopen(“test.txt”,”r”)

macの場合
/Applications/MAMP/htdocs/プロジェクトフォルダ名/test.txt

フルパスで書く場合
$file=fopen=”/Applications/MAMP/htdocs/プロジェクトファルダ名/test.txt”,”r”)

/にエスケープはいらない


prepareメソッドを実行すると、PDOStatementクラスのインスタンスが生成される。
fetch()メソッドは、1件だけ読む
fetchAll()メソッドは全権読む

C言語

構造体 異なる型をまとめて扱う
    1レコード

C++

<参照渡し>

呼び出し func(a) aは通常の変数(int型など)
関数   func(int& b)など

アドレスと値をまとめて、それ自体を受け取っているイメージ
呼び出し側は、値だけを渡しているように見えるが、受け側の関数で、仮引数に、&がついていることで、このような特殊な動きをする。

上記の例では、aを参照渡しで、bという変数名で受け取っている。
この場合、aとbは、実態は全く同じもので名前が違うだけ。
b=10;
などと関数内で変更すると、aそのものが変更される。

<ポインタ渡し>
int i=10;
呼び出し func(&i)
関数   func(int *p)

iという名前のついた入れ物のアドレスのコピーをpで受け取っているというイメージ。
定義時(int *p)の*はポインタ型であることを示す。
プログラム中で、使う*は、関節演算子。
この場合の、*pは、pに入っているアドレスの場所にある入れ物(上記のケースで言えば、iという名前のついたint型の入れ物という意味になる。
*p=20;
などとすれば、iの値が書き換わる。

Java

抽象クラス abstract は、newできない。

抽象メソッドは、サブクラスで必ずオーバーライドしなくてはいけない。

hrタグ(水平線)のプロパティ編集について

hr(水平線)のイメージ



hrタグのプロパティの編集は、style.cssで行います。

テーマtwentytenを例に説明します。

赤枠の部分を編集することで、「水平線」のスタイルを変更することができます。

background-color: 線の色

height: 線の太さ

編集例
[code]
hr {
border: 0;
border-top:dotted 3px #000000;
clear: both;
height: 10px;
margin-bottom: 18px;
}

[/code]
dottedは、細かい点線

XcodeでC言語を記述して、実行するまでの手順

1 Xcodeを起動する。
2   Create a new Xcode projectをクリックする。
新規投稿を追加_‹_WordPress_Fan_—_WordPress
3 しばらくすると、下記の画面が表示されるので、左のOS XのApplicationを選択して、
右側のCommand Line Toolを選択して、右下のNextをクリックする。
スクリーンショット_2015_01_23_21_47
4 次にProduct NameとCompany identifierの蘭に任意の文字を入力し、TypeでC言語を選択する。そして、右下のNextをクリックする。
スクリーンショット_2015_01_23_21_49
5 次に、このプロジェクトを保存する場所を選択して、右下のCreateをクリックする。
スクリーンショット_2015_01_23_21_50
6 するとプロジェクトが作成され、下記のような画面が展開する。
左のmain.cを選択すると、右側に編集画面が表示される。
すでに、Hello Worldを表示するプログラムが記入されている。
赤枠で囲んだ部分が、そのプログラムなので、必要ないときはこの部分を消して、自分が作成したいコードを記入していく。
プログラムを実行するときは、左上の▷ボタンをクリックすると実行される。

test_xcodeproj_—_main_c_と_新規投稿を追加_‹_WordPress_Fan_—_WordPress_と_LaTeXコマンド集_-_上線・下線__overline_underline__と__Users_ike_Desktop_C言語プロジェクト_cwork
7 プログラムの実行結果は、右下の赤枠のように表示される。
test_xcodeproj_—_main_c_と_新規投稿を追加_‹_WordPress_Fan_—_WordPress_と_LaTeXコマンド集_-_上線・下線__overline_underline__と__Users_ike_Desktop_C言語プロジェクト_cwork

WP Latexプラグインを使用した例

$latex i\hbar\frac{\partial}{\partial t}\left|\Psi(t)\right>=H\left|\Psi(t)\right>$

$latex \sum_{i=1}^{n}i$

$latex x^2 – 6x + 1 = 0$

$latex {\Large x = \frac{a}{b}}$

CSSを変更した後、Safariで確認する手順

1 Safariメニューで「開発」→「キャッシュを空にする」を選択します。

2 command + R で再表示します。

「開発」が表示されていない場合は、こちらを見て表示させてください。