【python】sys.argv で引数をとる

コマンドラインで引数を渡すことができる。

hoge.pyというPYファイルがあって中身が

import sys


if len(sys.argv) > 1:
 if sys.argv[1] > '1':
  print 'Bigger than 1'
 else:
  print 'Smaller than 1'

だったとする。

コマンドライン

>>>python hoge.python 2

とか打つと2が引数としてわたされる。

>>
import sys

【python】classメソッドを呼び出す

たとえば

class Hoge():
 def huga(self,txt):
  print txt

というクラスがあったとして
def hugaを呼び出したい場合。

>>>a = Hoge()    #class Hogeインスタンスを作る。
>>>a.huga('bbbb') #メソッドを呼び出して引数を渡す
bbbb

pyファイル内にある場合

def _test():
 a = Hoge()
 a.huga('bbbb')

if __name__ == '__main__':
_test()

と一番ケツに書いておくと
スクリプトファイルとして実行された時にだけdef _test()が実行されるらしい。

【python】class使い方

# coding:utf-8


testRes = []

class Seiseki():
 def __init__(self):
  self.a = 100
  self.b = 200
 def getSeiseki(self):
  return self.a, self.b

 def setAData(self, val):
  self.a = val

 def setBData(self, val):
  self.b = val

 def getAve(self):
  return (self.a + self.b)/2


class UpperSeikseki(Seiseki):
 def __init__(self):
  self.__c = 150

 def getCData(self):
  return self.__c

 def setCData(self, val):
  self.__c = val

 def getAve2(self):
  return (Seiseki.self.a + Seiseki.self.b + self.c) / 3



if __name__ == '__main__':

 us = UpperSeikseki()
 print us.getCData()

 print dir(us)



 print "-" *80
 print "-" *80
 data1 = Seiseki()
 print data1.getSeiseki()
 data1.setAData(300)

 data2 = Seiseki()
 data2.setBData(50)
 print "data2:", data2.getSeiseki()
 print "data1:", data1.getSeiseki()

 print data2.getAve()

 print "-" *80

 global testRes

 testRes.append(100)
 testRes.append(200)
 print testRes

 print (testRes[0] + testRes[1]) / 2

【python】文字列メソッド一覧

S.split()
  文字列Sを区切りリストにして返す。

>>> "abc def ghi".split()
['abc', 'def', 'ghi']
>>> "abc,def,ghi".split(",")
['abc', 'def', 'ghi']
>>> a = "abc,def,ghi"
>>> a.split(",")
['abc', 'def', 'ghi']

S.join()
シーケンス中の要素を連結して文字列にして返す

>>> "".join(['abc', 'def', 'ghi'])
'abcdefghi'
>>> a = ['abc', 'def', 'ghi']
>>> "".join(a)
'abcdefghi'

【django】多対多の (many-to-many) リレーション

多対多の (many-to-many) リレーションを定義するには ManyToManyField を使います

例えば、海鮮丼をつくるとき Gohan には複数の Guzai オブジェクトを持たせられます。すなわち、ある Guzai は複数のごはんの上に置けて、逆にそれぞれのごはんには複数の具材を置けるというわけです。このリレーションを表すには次のようにします:

class Guzai(models.Model):
  # ...

class Gohan(models.Model):
  # ...
  guzais = models.ManyToManyField(Guzai)

詳しい使い方:


model:

 class Guzai(models.Model):
  guzai = models.CharField(max_length=200)
  def __unicode__(self):
   returnself.guzai
  class Meta:
    ordering = ('guzai',)


 class Gohan(models.Model):
  gohan = models.CharField(max_length=200)
  guzais = models.ManyToManyField(Guzai)

  def __unicode__(self):
   return self.gohan

  class Meta:
   ordering = ('gohan',)

Sample API

>>> from Kdon.don.models import Guzai, Gohan
  
具材をつくって保存する
>>> neta1 = Guzai(guzai='ikura')
>>> neta1.save()


>>> Guzai.objects.all()
[]


>>> neta2 = Guzai(guzai='shake')
>>> neta2.save()
>>> neta3 = Guzai(guzai='uni')
>>> neta3.save()

ごはんを作って保存する
>>> mesi1 = Gohan(gohan='siromesi')
>>> mesi1.save()
>>> mesi2 = Gohan(gohan='genmai')
>>> mesi2.save()
>>> mesi3 = Gohan(gohan='kayaku')
>>> mesi3.save()

飯1(白飯)にネタ1(いくら)をのっける
>>> mesi1.guzais.add(neta1)

飯2(玄米)にネタ1とネタ2(シャケ)をのっける
>>> mesi2.guzais.add(neta1,neta2)

飯2(玄米)にネタ2(うに)をのっける
>>> mesi2.guzais.add(neta3)

新しいエビという具材を作って飯2の上にのっける
>>> new_guzai = mesi2.guzais.create(guzai='ebi')

飯1の上のネタ
>>> mesi1.guzais.all()
[]

飯2の上のネタ
>>> mesi2.guzais.all()
[, , , ]

すべての具材(エビが増えている)
>>> Guzai.objects.all()
[, , , ]

ネタ2が乗っている全てのごはん
>>> neta2.gohan_set.all()
[]

ネタ1が乗っている全てのごはん
>>> neta1.gohan_set.all()
[, ]
>>>
>>>
ネタ1が乗っている全てのごはんに飯3を足す
>>> neta1.gohan_set.add(mesi3)


ネタ1が乗っている全てのごはん
>>> neta1.gohan_set.all()
[, , ]

【django】チュート4 ビューの作成

ビューを書きましょう。
プロジェクト名.アプリ名.views.py(仮mysite/polls/views.py) というファイルを開いて編集します。

よくあるのは下記のパターン

例:
from django.shortcuts import render_to_response
from mysite.polls.models import Poll

def index(request):
  latest_poll_list = Poll.objects.all()
  return render_to_response('polls/index.html',{'latest_poll_list': latest_poll_list})

                                                                                                                                                                    • -

from django.shortcuts import render_to_response
from プロジェクト名.アプリ名.models import モデル名

def ビュー名(request):
  内容
  return render_to_response('template内htmlのroot',渡したい辞書)

【django】チュート3 URL 構造の設計

公開用のインタフェース、ビュー(view) の作成をするのですが、
そのまえにviewとURLを結びつける必要があります。

プロジェクト名/urls.py(仮:mysite/urls.py) を編集します

基本的には
urlpatterns = patterns('',

)
の中身に

urlpatterns = patterns('',
(r'^URL(例 poll)', 'プロジェクト名.アプリ名.views.関数名(def indexならindex)(例mysite.polls.views.index)'),

)

を書き足します。

さらに例えば "/polls/23"とURLにいれて23というの引数をで渡したい場合

(r'^polls/(?P\d+)/$', 'mysite.polls.views.detail')

とすれば
Django は以下のような引数で detail() を呼び出します:

detail(request=, poll_id='23')

poll_id='23' の部分は、 (?P\d+) からきています。パターンを丸括弧で囲うと、パターンにマッチしたテキストを「キャプチャ」して、ビュー関数の引数として送り込みます。 ?P はマッチしたパターンを識別するための名前をつけています。 \d+ は数字の列 (すなわち番号) にマッチする正規表現です。