Hatena::ブログ(Diary)

metabo346の日記

2010-04-02

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

18:42

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

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

しておいて

sys.argv[index]

で利用できるので、

Bigger than 1

となる。

引数が無い場合はエラーになるので

if len(sys.argv) > 1:

をしておくとよい。

2010-03-16

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

15:52

たとえば

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()が実行されるらしい。

2009-07-22

【python】class使い方

16:38

# 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

2009-07-15

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

13:22

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'

2009-07-14

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

20:48

多対多の (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()

[<Guzai: ikura>]


>>> 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()

[<Guzai: ikura>]

飯2の上のネタ

>>> mesi2.guzais.all()

[<Guzai: ebi>, <Guzai: ikura>, <Guzai: shake>, <Guzai: uni>]

すべての具材(エビが増えている)

>>> Guzai.objects.all()

[<Guzai: ebi>, <Guzai: ikura>, <Guzai: shake>, <Guzai: uni>]

ネタ2が乗っている全てのごはん

>>> neta2.gohan_set.all()

[<Gohan: genmai>]

ネタ1が乗っている全てのごはん

>>> neta1.gohan_set.all()

[<Gohan: genmai>, <Gohan: siromesi>]

>>>

>>>

ネタ1が乗っている全てのごはんに飯3を足す

>>> neta1.gohan_set.add(mesi3)


ネタ1が乗っている全てのごはん

>>> neta1.gohan_set.all()

[<Gohan: genmai>, <Gohan: kayaku>, <Gohan: siromesi>]