ホーム     戻る

第6章 関数(function) メソッド 文字列メソッド

"白石かずこ さん"詩集「浮遊する母、都市から」 から美しいコトバを拾ってみました。

てのひらにのせてあげるから こっちへ

むかうみちは そこでとぎれている

ひらり ひらひら 雪のふる夜は

ひらひら 雪よりひらひら ひいやり

ひらひら雪泣きやめず

ふり ふり ふりつづけ

 コンセプト関数とは 

関数:決まった仕事を繰り返しできるように、コマンドをまとめておく方法。
    pythonで用意された関数は組込関数という。
    自分で必要な関数をつくるには、モジュールという仕組みを使う。
関数名:変数と同じ規則。英単語で区切りたい場合はアンダースコアを使う
引数: 
複数の引数を書きたい場合はカンマで区切る。デフォルト値を持つ引数 
    は「引数名=値」として引数定義の最後に記述する。
戻り値:return文を使う。複数の値を戻す場合はreturn
文でリストなどを返す。

関数:サブルーチン・プロシージャ:コードの再利用:プログラムの分割:プログラ
    ムの行うべき処理作業に対応し、「対象物」に対応しない。「対象物」に対
    応するのは「クラス」:関数もオブジェクト
ビルトイン関数pythonにあらかじめ用意されている関数:組込関数
関数:len(y)のように名前(引数,・・・)の形式で表現する。
ファンクション:名前があり、呼び出す際に引き渡す引数のリストがある。処理を
         実行した結果を呼び出し側に返す機能を備える。

関数名
:関数オブジェクトへの「リファレンス」になる
呼び出し側:関数が呼び出されると関数の処理が終わり、呼び出し側に制御が
        戻されるまで、中断される。
引数:関数に引数が渡されるとき「代入」の処理が行われる:オブジェクトへのリ
    ファレンスが渡される:呼び出し側のコードと関数はリファレンスにより同
    じコードを共有する

サブルーチンプログラムの部分、手続き。プログラムの一部を切り離したもの。引数(入力)を得て、何らかの、手続きを実行して、戻り値(出力)を返すという全体として一つの関数として機能する。

サブルーチン関数:function:機能:あるプログラムの一部を何回も使いまわ
         す。

呼び出し側:関数が呼び出されると関数の処理が終わり、呼び出し側に制御が
        戻されるまで、中断される。
引数:関数に引数が渡されるとき「代入」の処理が行われる:オブジェクトへのリ
    ファレンスが渡される:呼び出し側のコードと関数はリファレンスにより同
    じコードを共有する

関数の定義 def文とreturn文

def hai_ko(kei):
 
 if kei <= 400000 :
  return 380000
 elif kei < 750000 :
  return 380000-(kei-380000)
 elif kei < 760000 :
  return 30000

 

range関数

>>> range(100,105)
[100, 101, 102, 103, 104]
>>> range('101','105')         数値のみを使う。文字はエラーみなる

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    range('101','105')
TypeError: range() integer start argument expected, got str.
>>>

(1)関数を作って使う def   :

>>> def number(x,y,z):
        menseki=(x+y)*z/2     
台形の面積
        return menseki     
   戻り値menseki

>>> number(3,4,6)             引数3,4,6
21

>>> def times(x,y):     関数オブジェクト作成: times:関数名
      return x*y     ボデイ部分:呼び出されると実行 

>>> times(2,4)         呼び出し:関数名():引数(オブジェクト)指定:変数
                
 に代入される
8                  戻り値

>>> x=times(3.14,4)      戻り値を変数に代入して利用する場合
>>> x
12.56
>>> times('ni',4)        文字列を繰り返す
'nininini'

>>> def sum(n1=0,n2=0,n3=0) : 引数が省略されたときのデフォルト値を設定
      return n1+n2+n3

>>> print sum(2,5,7)
14
>>> print sum(3,8)
11
>>> print sum(4)
4
>>> print sum()
0

>>> def digits(k=0,h=0,d=0,n=0) :             キーワード引数
      return k*1000+h*100+d*10+n         与えられた引数を特定

>>> print digits(5,8,4,3)
5843
>>> print digits(k=2,d=9)
2090
>>> print digits(3,n=6)             引数が指定されないとき最初の
                                      引数に代入される
3006
>>>

>>> def muladd(a,b) :              複数の値を返す
      return a*b,a+b

>>> print muladd(3,2)
(6, 5)                       タプルにまとめている
>>> i,j = muladd(4,5)              2以上の値を2以上の変数に同時に代入
>>> print i,j
20 9                        それぞれの変数の値

>>> a,b,c=[3,2,1]                リストの3つの要素を3つの変
                          数に同時に代入できる
>>> print a
3
>>> print c
1
>>> print c
1

>>> def times2(n) :
      n *= 2
      print "inside",n

 
>>> n=3
>>> times2(n)
inside 6                 関数のなかのローカル変数の値
>>> n=3
>>> print "outside:",n        グローバル変数には影響がない
outside: 3
>>>

>>> def times2(a) :
      global n           グローバル宣言をしたので、外部のn変
                          数にアクセスできる
 
 
>>> n=3                 nはグローバル変数
>>> times2(n)
inside 6
>>> print "outside",n
outside 6                 ファンクション内部の変数nが外部の変
                           
数nと同じになる:トラブル原因:実際に
                           は使わない

>>> def changelist(l) :         lは小文字のエル
      l[3] = 3

 
>>> alist =[1,2,3,4,5]
>>> print "before:", alist
before: [1, 2, 3, 4, 5]
>>> changelist(alist)
>>> print "after:",alist
after: [1, 2, 3, 3, 5]        引数として与えたリストの内容が変更されて
                        いる。リストを引数として渡すと「ポインタ」が
                        渡される。要素がリストの場合だけ内容が変
                        更できる

>>>

>>> def sanjyo(x) :                    xは仮引数       関数の名前部分
      return x**3          関数の本体
>>> print sanjyo(3)            3は実引数     関数の呼び出し
27

>>> def even_odd(x):
 if x % 2 ==0:
  print x ,' is even.'
 else:
  print x, ' is odd.'

  
>>> even_odd(33)
33  is odd.
>>> even_odd(22)
22  is even.

>>> def sum(data):          dataは仮引数
      total=0
      for x in data:
  total=total+x
 return total

>>> print sum([1,2,3])       1,2.3は実引数
6

>>> >>> def func(x):         x仮引数、局所変数、funcの専用変数
 x = x +1
 print 'func:= ',x

 >>> x=10               メインプログラム
>>> y=10
>>> func(y)
func:=  11
>>> print x,y            メインプログラムのx、yの値は変わらない
10 10

(2)メソッドを使う

print ' to be or not tobe'
 to be or not tobe

この場合のprintメソッドのオブジェクトはプログラム自体

1・クラスオブジェクトを使う

>>> class Myclass:            
Myclass. iとMyclass.fが属性参照として有効  
      
 'A example class'
       i = 12345
       def f (self):        
クラスのインスタンス化:関数表記:
                      クラスオブジェクトを、クラスのイン
                            スタンスを返す引数の         
                            ない関数のように書く 

         return 'hello world'

 
>>> x = Myclass()     新しいクラスが生成されローカル変数xに代
                     入される

>>> x.f()           属性参照形式:オブジェクト・name:
                     第1引数としてインスタンスのオブジェクトが
                渡される:x.fのコールはMyclass.f(x)と等  
                     価。

'hello world'

2・インスタンスメソッドを使う

>>> "10,20,30,40".split(",")
['10', '20', '30', '40']          
リストのインデックスを返す

>>> [1,2,3,4,5,6].index(3)       リストの3のインデックスは0から数えて2
2                       インデクス

3。クラスメソッドを使う

関数的メソッド:レシーバの状態によって結果が変わらない

 >>> print "hello"
hello

4.メソッドの定義

 >>> def hello():                         メソッドの名前
      print "hello python"     メソッドの本体


>>> hello()                 メソッドを呼び出す
hello python
>>>

>>> def volume(x,y,z):          仮引数 x y z 名前
      return x*y*z
                 メソッド本体

>>> print volume(2,3,4)         実引数2,3,4
24
>>> print volume(10,20,30)
6000

>>> def area(x,y,z):
      xy=x*y
      yz=y*z
      zx=z*x
      return (xy+yz+zx)*2

>>> print area(2,3,4)
52
>>> print area(10,20,30)
2200

>>> def sum(x,y):
      x+y
      print x+y

 
>>> sum(45,87)
132
>>> def diff(x,y
):
      i=x-y
      print i

 
>>> diff(54,23)
31

メソッドの形式:オブジェクト名.メソッド名(引数・・・)
オブジェクト>レシーバ>オブジェクトにメソッドを送る>オブジェクトはメッセージを受け取る>引数とともにメッセージを送る

4.メソッド特選

(1)pow()             累乗算

>>> y=0
>>> val =pow(x,y)
>>> x = 2
>>> for y in range(0,11):
      print pow(x,y)
 
1                    2の0乗は1
2
4
8
16
32
64
128
256
512
1024
>>>

(2)sys   dir (__ builtins__)組み込み関数のリストを表示

>>> import sys              sysモジュールを呼び出す
>>>
print dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__debug__', '__doc__', '__import__', '__name__', 'abs', 'all', 'any', 'apply', 'basestring', 'bool', 'buffer', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']


(3) さらなる演算メソッド

>>> print 5**2              **2は2乗のこと。
250
>>> print 5**0.5             
**0.5は平方根をもとめる。
2.2360679775
>>> print 7/3               /では、剰余は出力されない。

>>> print 7 % 3             
剰余が出力。
1
>>> 365/7
52
>>> print 365%7             一年が52週間と1日
1
>>> print abs(5-2)            
 abs()は絶対値を返します。
3
>>> print abs(2-5)
3

>>> math.sqrt(5)
2.2360679774997898           
#5の平方根を出力する。

>>> import math                          mathモジュール
>>> print math.pi              
円周率
 
3.14159265359
>>> angle=45.0*math.pi/180      
45度をラジアンに変換
>>> print math.sin(angle)       
 
サイン関数 
0.707106781187


5.文字列 関数 メソッド

center(n) ljust(n) rjust(n)  
swapcase() upper()  lower()    capitalize() 
reverse() find() ord() chr() .split() join()
len() str()  eval() raw_input() rstrip() lstrip() strip()

(1)文字列の書式

 返される文字列の長さを受け取り、文字列を左寄せ、右寄せにして余白をスペースで埋める。

>>> ' aunty habart is '.center(7)
' aunty habart is '
>>> 'sit in the food rack '.center(30)
'    sit in the food rack      '
>>> 'she is eating a card and a hoee '.center(35)
  she is eating a card and a  hoee   '
>>> 'a spider came there '.center(50)
'               a spide came there                 '
>>> 'sit on her side '.center(3)
' sit on her side '
>>> 'a poor dog run away'.center(30)
'     a poor dog run away
      '
(初めてのプログラミング・Chris Pine著・西山伸訳・オライリージャパン)

>>> str ='---> sentence <---'
>>> print str.ljust(10)
---> sentence <---
>>> print str.center(50)
                ---> sentence <---               
>>> print str.rjust(20)
  ---> sentence <---
>>> print str.ljust(10) +str.rjust(30)
---> sentence <---            ---> sentence <---

(2)大文字と小文字の操作’アルファベット変換操作)

uper()メソッド lower()メソッド swapcase()メソッド
capitalize()メソッド   
 

>>> letters='aAbBcCdDeE'                
文字列を作ります。

>>> letters.upper()                文字列を大文字にします。

'AABBCCDDEE'

>>> letters.lower()                文字列を小文字にします。

 'aabbccddee'

>>> letters.swapcase()      lettersをコピーして大文字を小文字に小
                           文字を大文字にしたものを返す
                                   

'AaBbCcDdEe'

>>> letters.capitalize()       最初のアルファベット文字を大文字に
                            残りを小文字に。

'Aabbccddee'

(3)文字列の置き換え

 reverse()              リストの並びを反転し、リスト自体を書き換える。
>> a = [1234,456,789]
>>>
a.reverse()
>>>
a
[789, 456, 1234]
>>> s1 = ['deliver','rapaid','desert']
>>> s1.reverse()
>>> s1
['desert', 'raoid', 'deliver']

(4)部分文字列の取得

>>> digits='123'                                  
>>> digits[2]                
インデックスを使って文字列を取り出す  

>>> str='Humpty Dempty'
>>> str[2]
'm'

>>> str[7:4]
''
>>> str[0:7]
'Humpty '
>>>                        

(5)文字列の検索

>>> digits='123'
>>> digits.find('23')  
1                          
要素2に存在    
>>> digits.find('76')               
要素は不存在           
-1

>>> str='Albert Einstain'

>>> str.find('Ei')
7
>>> str.find('bert')
2
 

(6)文字とキャラクターコード変換

>>> str='Martin'
>>> ord(str[1])               
キャラクタコードに変換
97
>>> ord(str[0])
77
>>> str2=str+chr(77)           文字に変換
>>> str2
'MartinM'

(7)  コンマ区切り   :共通フォーマットに対応した文字列を作る 

>>> c = " "
>>> s = 'a short string '
>>>
import string
>>> print string.split(s,c)
['a', 'short', 'string', '']

>>> import string

>>> times="MORNING:EVENING:AFTERNOON"
>>> periods = string.split(times,":")
 >>> print "Good ----",periods[1]
Good ---- EVERNING                           
配列1はEVENING
                                                                   0は
MORNING
                                    2は
AFTERNOON

split() join()

split()文字列メソッド

>>> y=['a,b,c','d,e,f','g,h,i']
>>> y[0]
'a,b,c'
>>> y[0].split(',')
['a', 'b', 'c']
>>> y[1]
'd,e,f'
>>> y[1].split(',')
['d', 'e', 'f']

join(seq)文字列メソッド  連結したseqを返す

>>> x=['a','b','c']  
>>> ch=','       
        ch減数    
>>> ch.join(x)
'a,b,c'
>>> ch=':'
>>> ch.join(x)
'a:b:c'
>>> ':'.join(x)             
変数を使わずに
'a:b:c'
>>> ','.join(x)
'a,b,c'

>>> s=':ok:'
>>> t=s.join('qwerty')
>>> print t
q:ok:w:ok:e:ok:r:ok:t:ok:y


(9)文字列の字数カウント

len(container)   一連の内容に含まれているアイテムの数を返す。
str(obj)
                          objの簡潔で判読可能な文字列表現を返す。

    
>>>print '貴方のフルネームは何ですか'
 
 貴方のフルネームは何ですか

>>> name = raw_input('>')      
>Mitiya Tobari

>>> len(name)

13                        nameの文字数です。

>>> str(name)

'Mitiya Tobari'

>>> str(len(name))

'13'

>>> print '貴方の名前が' + str(len(name)) + '文字だって'

貴方の名前が13文字だって

>>> print '知っていました? '+str(name) + 'さん'

知っていました? Mitiya Tobariさん


 

(10)文字列メソッド特選
 
(a) raw_input:("prompt'') :

標準出力にプロンプト(">等")を書き出し、標準入力から一行を読み取りその行を文字列として返す。

>>>  print raw_input("何か入力してください.。>")
>何か入力してください。>
      
かっこ内の文字列をそのまま、出力
                                                                       しユー
ザの入力を待つ。

(b)メソッド

>>> def say_goodnight(name):                  メソッドの名前
      return 'good night' +name       メソッドの本体


>>> print say_goodnight (" Mori Hnae  san")
good night  Mori Hnae  san
>>>

(c)eval関数  文字列でpythonの式を受け取って実行する

>>> eval('"a,b,c".split(",")')
['a', 'b', 'c']

>>> x=1
>>> eval('x+1')
2

(11)オブジェクト

(a)pythonはあらわれるすべてのデータを、それぞれの個性を一旦無

視して、すべてを一律「もの」とみなす。

(b)変数にはどんな「もの」も入れることができる。

(c)「もの」をオブジェクトという。

>>> a='x,y,z'
>>> a
'x,y,z'
>>> a.split(',')
['x', 'y', 'z']
>>>
dir()
['__builtins__', '__doc__', '__name__', 'a']
>>>b=10

>>> def f(a,b) :                f メソッドの名前
      return a+b

>>> import sys
>>>
dir()
['__builtins__', '__doc__', '__name__', 'a', 'b', 'f', 'sys']
>>> a
'x,y,z'
>>> b
10
>>> f
<function f at 0x00CB77B0>
>>> sys
<module 'sys' (built-in)>
>>>

(d)文字列両端の空白を刈り込む

>>> s ='   model  '
>>> s.
rstrip()
'   model'
>>> s.
lstrip()
'model  '
>>> s.
strip()
'model'

コンセプト

メソッドとは

メソッド:手続きをモジュール化して再利用する仕組み:クラスの中に書いた関数を普通の関数と区別してメソッドと呼ぶ:普通の関数とは違って、メソッドの第一引数には特別の意味があって、このメソッドが呼び出されたときのインスタンスが渡ってくる:この引数はどんな名前で定義してもよいが、慣習的にselfという名前をつけることが強く推奨されている上平・即効python

メソッド゙あるオブジェクトが別のオブジェクトにメッセージを渡す。受け
      取ったオブジェクトがメッセージに対応する操作をする。この
      操作をメソッドという。オブジェクトを扱うための手続き。
      メソッドに渡す情報を引数という。
メソッド:クラス専属のファンクション
メソッドは名前.名前(引数,・・・)。
      動詞のようなもの:関数のようなもの

オブジェクト対象物:名詞のようなもの。文字列、数値、時刻など様々
                なデータすべてのメソッドにはオブジェクトが必要である。
       プログラム全体もオブジェクトである

シーケンスとは

有限数の要素アイテムを一つずつ取り出すことのできるコンテナー
インデクシング、スライシングlen()に渡せるもの。
すべての反復可能体はループ文min,max・zip、sum、str、join等で使える.

>>> def fuyasu(x):                  メソッドの名前
 return x+1                 メソッド本体

>>> y=10
>>> y=fuyasu(y)              メソッドの呼び出し
>>> print y
11
>>> def nijyo_sanjyo(x):         メソッドの名前

 return [x**2,x**3]            メソッド本体
>>> [x2,x3]=nijyo_sanjyo(10)            メソッドの呼び出し

>>> print x2,x3
100 1000

>>> def func(y,b):                          メソッドの名前と仮引数y、b
      y=y*2.0
      b.append(3)

 
>>> x=10.0                メインプログラム
>>> a=[0,1,2]               リストa
>>> func(x,a)               実引数x、aでメソッドを呼び出す
>>> print x,a
10.0 [0, 1, 2, 3]           メインプログラムのxの値は変更されない。
                           リストaの値はappendで変更された

コンセプト

関数とは

関数:サブルーチン・プロシージャ:コードの再利用:プログラムの分割:プログラ
    ムの行うべき処理作業に対応し、「対象物」に対応しない。「対象物」に対
    応するのは「クラス」:関数もオブジェクト
ビルトイン関数:pythonにあらかじめ用意されている関数:組込関数
関数:len(y)のように名前(引数,・・・)の形式で表現する。
ファンクション:名前があり、呼び出す際に引き渡す引数のリストがある。処理を
         実行した結果を呼び出し側に返す機能を備える。

関数名
:関数オブジェクトへの「リファレンス」になる
戻り値:呼び出し側に渡される値:リターン値:return
呼び出し側:
関数が呼び出されると関数の処理が終わり、呼び出し側に制御が
        戻されるまで、中断される。
引数:関数に引数が渡されるとき「代入」の処理が行われる:オブジェクトへのリ
    ファレンスが渡される:呼び出し側のコードと関数はリファレンスにより同
    じコードを共有する

サブルーチン:プログラムの部分、手続き。プログラムの一部を切り離したもの。引数(入力)を得て、何らかの、手続きを実行して、戻り値(出力)を返すという全体として一つの関数として機能する。

サブルーチン:関数:function:機能:あるプログラムの一部を何回も使いまわ
         す。


ホーム     戻る