書き込みおよび呼び出し機能、複数の値を持つ、再帰関数、デフォルトのパラメータを定義/変数パラメータ| Python関数[]入門

1、関数を呼び出します

Pythonは便利な機能の多くを建て、我々は直接呼び出すことができます。

関数を呼び出すには、このような絶対値関数ABSを求めるなどの名前と機能のパラメータを、知っている必要があり、それはパラメータを受け取ります。

直接からのPythonの公式サイトのドキュメントを表示します。

ラインも対話型コマンドのヘルプ(ABS)の助けにより、abs関数を表示することができます。

abs関数を呼び出します:

>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34

関数を呼び出すときに、パラメータの数が間違って渡された場合、間違ったTypeError例外が報告されます、とPythonは明らかにあなたを教えてくれます:ABS()は唯一つのパラメータを持っていますが、2を与えます:

>>> abs(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (2 given)

渡されたパラメータの数は右ですが、パラメータは機能、また、報告はTypeErrorミスの種類によって受け入れられ、およびエラーメッセージを与えることができない場合:strのパラメータの型が間違っています:

>>> abs('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'

比較関数CMP(x、y)は、2つのパラメータを取る場合X <Y、-1を返す場合のx == yの、0を返す場合、X> Y、リターン1:

>>> cmp(1, 2)
-1
>>> cmp(2, 1)
1
>>> cmp(3, 3)
0

Pythonは組み込み関数さらに、INT()関数のような一般的なデータ型変換関数は、他のデータ型に変換することができる含む整数です。

>>> int('123')
123
>>> int(12.34)
12

strの他のタイプを変換するSTR()関数:

>>> str(123)
'123'
>>> str(1.23)
'1.23'


タスク:
SUM()関数のパラメータとしてリストを受け取り、結合されたすべての要素のリストを返します。計算して下さい

1 * 1 + 2 * 2 + 3 * 3 + ... + 100 * 100。

コード:

L = []
x = 1
N = 100
while x <= N:
    L.append(x*x)
    x=x+1
print sum(L)

ここに画像を挿入説明

機能を書く2

Pythonでは、
順次関数名、丸括弧、大括弧および結腸パラメータを書き込みDEFステートメントを使用する関数を定義する:
すると、本体が後退している機能ブロックを記述し、関数がreturnステートメントによって返された値を返します。

ここでは、例としてmy_abs関数の絶対値をカスタマイズします。

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

実行時の関数本体内のステートメントは、ということに注意してください
一度戻すために実行され、機能の実装が完了し、結果が返されます。
したがって、内部関数は、条件によって決定され、サイクルが非常に複雑なロジックを達成することができます。

ノーリターン文の場合は、関数が終了した後に実行結果を返しますが、結果はNoneです。

  • 戻りなしリターンに省略することはできません。


タスク:
定義 square_of_sumリストを取る関数を、リスト内の各要素の2乗を返します。

コード:

def square_of_sum(L):
    return sum([i * i for i in L])

print square_of_sum([1, 2, 3, 4, 5])
print square_of_sum([-5, 0, 5, 15, 25])

ここに画像を挿入説明



3、複数の値を返します

機能は、複数の値を返すことができますか?答えはイエスです。

例えば、ゲームにしばしば別の点座標に一点から移動する必要が与えられ、変位角は、新しい座標を計算することができます。

数学パッケージは罪()およびCOS()関数を提供し、我々は最初に使用し、インポートを、それを参照してください。

import math
def move(x, y, step, angle):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

同時に、我々は戻り値を得ることができるように:

>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
151.961524227 70.0

しかし、これは錯覚で、Pythonの関数は、単一の値の遺骨を返します。

>>> r = move(100, 100, 60, math.pi / 6)
>>> print r
(151.96152422706632, 70.0)

印刷と戻り結果の印刷、オリジナルの戻り値はタプルです!

Pythonの戻り複数の値が実際のタプルを返すが、書き込みをより便利ので、ただし、文法には、返しタプル括弧を省略してもよく、複数の変数を同時にタプルを受け取ることができる、場所によって割り当てられた値に対応。


タスク:
二次方程式が定義される:ax²+ BX + C = 0

2つのソリューションの二次方程式を返す関数を記述してください。

注:Pythonの数学パッケージはSQRT()関数は、平方根を計算するために使用されて提供されます。

コード:

import math

def quadratic_equation(a, b, c):
    d = b * b - 4 * a * c
    x1 = (-b +  math.sqrt(d))/(2*a)
    x2 = (-b - math.sqrt(d))/(2*a)
    return x1, x2
print quadratic_equation(2, 3, 0)
print quadratic_equation(1, -6, 5)

要約:

  • 関数を定義する、決定する必要がある関数名パラメータの数を
  • 必要な場合は、パラメータのデータ型のチェックを行うことができます。
  • 関数の結果を返すように戻すためにいつでも使用することができる機能。
  • 機能の完了は、文、自動復帰なしを返さなかったとき。
  • 機能は、同時に複数の値を返すことができますが、実際にタプルです。



4、再帰関数

関数内、あなたは他の関数を呼び出すことができます。関数が自分自身の中に自分自身を呼び出す場合は、この関数は再帰関数です。

例えば、我々は、n = 1 * 2 * 3 * ... * nは、関数事実(N)で表されることを見ることができるの階乗を計算!:

事実(N)= N!= 1 * 2 * 3 * ... *(N-1)* N =(N-1)!* N =事実(N-1)* N
従って、実際には(N)のように表すことができます。 N *事実(N-1) 、 n = 1で、唯一の特別な処理を必要とします。

だから、実際には、(n)は、再帰的な方法で書かれています:

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

上記は、再帰関数です。あなたは試すことができます。

>>> fact(1)
1
>>> fact(5)
120
>>> fact(100)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000L

我々は事実(5)を計算する場合は、次のように計算定義の関数として見ることができます。

===>事実(5)

===> 5 *事実(4)
===> 5 *(4 *事実(3))
===> 5 *(4 *(3 *事実(2)))
===> 5 *(4 *(3 *(2 *事実(1))))
===> 5 *(4 *(3 *(2 * 1)))
===> 5 *(4 *(3 * 2))
== => 5 *(4 * 6)
===> 5 * 24
===> 120

利点は、単純な再帰関数、明確なロジックを定義することです。理論的には、すべての再帰関数は、循環方式で書き込むことができますが、良いとして再帰ループロジックが明確でないとして。

再帰関数は、スタックオーバーフローを避けるように注意する必要があります。
コンピュータでは、関数呼び出しが、このデータ構造スタック(スタック)を介して達成されるたびにスタックへの関数呼び出しスタックフレームが1だけ増加され、各時間関数戻り、スタックは、一つのスタックフレームを減少します。スタックのサイズは無制限ではないので、あまりにも再帰呼び出しの数は、スタックオーバーフローを引き起こす可能性があります。事実(10000)を計算してみてください。

タスク:

ハノイの塔モバイル再帰関数も見ることができます。

私たちは、列番号A、B、C、Cに行くように記述することができますから、すべてのディスク:

ディスクは一つだけを持っている場合、それはCに直接移動することができます。

Nが存在する場合、ディスクは、ディスク(シャーシ)+(N-1)番目のディスク、(N-1)への最初の必要Bへ番目のディスク移動が存在するように、その後で見ることができます最後に、ディスクは、次いで、C、B、(N-1)からc番目のディスクの移動に移動されます。

機能、所与の入力nは、A、B、C、プリントを移動させるステップを記述してください。

移動(N、A、B、C)

例えば、入力された移動(2、 'A'、 'B'、 'C​​')、プリントアウトします。

A - > B
A - > C
B - > C

リファレンスコード:

#-*- coding:utf-8 -*-
# move(n, a, b, c)表示的是有n个盘子在a柱子上,将要移到b柱子上面去
def move(n, a, b, c):
# 如果a柱子上面只有一个盘子,则直接移到c柱子上面去并输出路径,结束递归
    if n == 1:  
        print a, '-->', c
        return
# 表示的是将n-1的盘子从a柱子上面移到b柱子上面去
    move(n-1, a, c, b)
# 输出最下面个盘子移从a移到c的路径
    print a, '-->', c
# 将b柱子上面的n-1个盘子移动到c柱子上面
    move(n-1, b, a, c)

move(4, 'A', 'B', 'C')

ここに画像を挿入説明



5、デフォルトパラメータの定義

定義された機能には、あなたはまた、デフォルトのパラメータを持つことができます。

例えば、Pythonはint型()関数は、実際には、二つのパラメータがあり、私たちはいずれかのパラメータを渡すことができ、そして2つのパラメータを渡すことができています:

>>> int('123')
123
>>> int('123', 8)
83

渡された場合に渡されたパラメータを用いて、デフォルトの小数(ベース= 10)を通過しない場合、INT()は、第二のパラメータバイナリ変換の関数です。

目に見える、デフォルトのパラメータの機能の役割があるの呼び出しを簡単にするために、あなただけのパラメータを渡すために持っている必要があります。必要なときにでも、彼らは、デフォルトのパラメータ値を上書きするために追加のパラメータを渡すことができます。

私たちは、xの乗であるNの関数を定義します。

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

二乗計算の最大数を仮定し、我々は、Nのデフォルト値は2に設定されて変更することができます。

def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

その結果、二つの引数の二乗を計算する必要はありません。

>>> power(5)
25

デフォルトパラメータのみを後で必要なパラメータを定義することができますので、関数パラメータの試合は、左から右へので:

# OK:
def fn1(a, b=1, c=2):
    pass
# Error:
def fn2(a=1, b):
    pass


タスク:

渡されない場合は、デフォルトのパラメータが含まれている挨拶()関数を定義し、「こんにちは、世界を」印刷、渡された場合は、印刷「こんにちは、XXXを」。

コード:

def greet(name='world'):
    print 'Hello,' + name + '.'

greet()
greet('Bart')

ここに画像を挿入説明

図6に示すように、可変パラメータの定義

あなたは関数が任意の数のパラメータを受け入れることができますしたい場合は、我々は変数のパラメータを定義することができます。

def fn(*args):
    print args

可変パラメータの名前の前にアスタリスクを持って、
我々は可変パラメータに0、1以上のパラメータを渡すことができます。

>>> fn()
()
>>> fn('a')
('a',)
>>> fn('a', 'b')
('a', 'b')
>>> fn('a', 'b', 'c')
('a', 'b', 'c')

可変パラメータは非常に神秘的ではない、Pythonのインタープリターのようなタプル引数として直接、関数内で、従って、可変パラメータの組に変数をアセンブリに渡されるパラメータのセットを通過します。

変数のパラメータを定義するだけでなく、通話を簡素化することを目的。私たちは、あなたが可変のパラメータを定義することができ、任意の数の平均値を計算したいと仮定します。

def average(*args):

    ...

このように、あなたが呼び出すとき、あなたが書くことができます。

>>> average()
0
>>> average(1, 2)
1.5
>>> average(1, 2, 2, 3, 4)
2.4

タスク:
書き込みの平均は、可変パラメータ()関数を受け入れてください。

コード:

def average(*args):
    sum = 0.0
    if len(args) == 0:
        return sum
    for x in args:
        sum = sum + x
    return sum / len(args)
print average()
print average(1, 2)
print average(1, 2, 2, 3, 4)

ここに画像を挿入説明

公開された20元の記事 ウォンの賞賛0 ビュー409

おすすめ

転載: blog.csdn.net/yipyuenkay/article/details/103976942