defステートメントを用いて定義します。
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def rec(x):
return 1 if x==0 else x*rec(x-1)
for (i,x) in enumerate(range(7)):
print "%d!=%d" % (i,rec(x))
出力例
$ python sample.py
0!=1
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
デフォルト引数の指定
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def func(x='default'):
print x
func(123)
func()
出力例
$ python sample.py
123
default
複数の値を引数として渡す (Rubyの多値相当)
関数定義でアスタリスクを使用
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def printTuple(*arg): # タプル化
print arg
def printDict(**arg): # ディクショナリ化
print arg
printTuple(1,2,3,4)
printDict(a=1, b=2, c=3)
実行例
$ python sample.py
(1, 2, 3, 4)
{'a': 1, 'c': 3, 'b': 2}
関数呼び出しでアスタリスクを使用
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def func(a,b,c):
print a,b,c
T = tuple("str")
D = dict(zip(['a','b','c'],[1,2,3]))
func(*T)
func(**D)
出力例
$ python sample.py
s t r
1 2 3
動的な関数定義
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
if False:
def func(x): return x*2
else:
def func(x): return x+2
print func(10)
出力例
$ python sample.py
12
変数への代入
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def func(x,y): return x+y
ref = func
print ref(7,8)
出力例
$ python sample.py
15
グローバル変数の利用
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
x = 128
def func():
global x
x = 256
func()
print x
出力例
$ python sample.py
256
クロージャ
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def getFact(base):
def fact(x):
return base**x
return fact
ref = getFact(1)
print ref(10)
ref = getFact(2)
print ref(10)
出力例
$ python sample.py
1
1024
ラムダ式を用いたクロージャ
いわゆるラムダ式です。Perlでは無名関数と呼ばれていたものです。
なお、ラムダ式内には一つのステートメントしか記述できません。
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def getFact(base):
return (lambda x: base**x)
ref = getFact(1)
print ref(10)
ref = getFact(2)
print ref(10)
出力例
$ python sample.py
1
1024
0
プログラミング教育者。ScratchやPythonを教えています。
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。


