Python 関数の基本の紹介

巴扎黑
巴扎黑オリジナル
2017-08-05 16:10:171843ブラウズ

この記事では、ステートメントを関数に編成する方法と、パラメーターの概念とプログラムでの使用方法を紹介します。必要な方は参考にしてください。

Pythond 関数は、def と def という新しいステートメントで記述されます。 is executable ステートメント -- 関数は、Python が def を実行するまで存在しません。

関数は代入によって渡され、パラメータは代入によって関数に渡されます

def ステートメントは関数オブジェクトを作成し、それを変数名に代入します。 def ステートメントの一般的な形式は次のとおりです。

Copyコード コードは以下の通りです:


def function_name(arg1,arg2[,...]):
ステートメント
[戻り値]

return ステートメントがない場合、戻り値は必要ありません。 Python はデフォルトで値 None を返します。

関数名の命名規則:

関数名はアンダースコアまたは文字で始まる必要があり、文字、数字、アンダースコアの任意の組み合わせを含めることができます。句読点は使用できません。

関数名では大文字と小文字が区別されます。

関数名に予約語を使用することはできません。

Python は、オブジェクトを格納するために名前空間の概念を使用します。この名前空間は、オブジェクトが異なるスコープに存在する領域です。以下は、さまざまなオブジェクトのスコープ ルールです:

各モジュールには独自のグローバル スコープがあります。

関数によって定義されたオブジェクトはローカル スコープに属し、関数内でのみ有効であり、グローバル スコープ内のオブジェクトには影響しません。

global キーワードを使用して宣言されない限り、割り当てられたオブジェクトはローカル スコープ内にあります。

LGB ルールは、Python が名前を検索するためのルールです:

1. ほとんどの名前参照は、最初にローカル (ローカル)、2 番目にグローバル (グローバル)、3 番目に組み込みの 3 つのスコープで検索されます。 (組み入れる)。

コードをコピーします コードは次のとおりです:


>>> b=2
>>> .. test= a*b
... Return test
>>>print test(10)
20


b はローカル スコープで見つかり、a はグローバル スコープで見つかります。

2. ローカル スコープ内のグローバル スコープのオブジェクトを変更する場合は、global キーワードを使用する必要があります。

コードをコピーします

コードは次のとおりです:

#globalを使用しない場合の状況

>>> name="Jims"
>>> . name="ringkee"
>>> set()
>>> print name
Jims

#globalを使用した後の状況
>>> "
> >> def set1():

... グローバル名

... name="ringkee"
...
>>> set1()
>>> print name
ringkee


3. 「global」宣言は、割り当てられた名前をそれを含むモジュールのスコープにマップします。

関数のパラメータは、関数と外部の世界との間の橋渡しとなり、外部から渡される値を受け取ることができます。パラメータの受け渡しのルールは次のとおりです:

4. 関数内でパラメータ名を割り当てても、呼び出し元には影響しません。

コードをコピーします

コードは次のとおりです:

>>> a=1>>> def test(a):

... a=a+1

.. . 印刷します
...
> により。


コードをコピーします
コードは次のとおりです:


>>> a=1
>>> b=[1,2]

>>> b):

... a=5

... b[0]=4

... print a,b...>test(a,b)

5 [4, 2]

>>>
1
>例:


コードをコピーします
コードは次のとおりです:


>>> def test(a,b):
... return a+b
...
>>> ; test(1 ,2) #数値型
>>> #文字型
'ab'

>>> 11]) # リスト内のパラメーター

[12, 11]

関数は、渡された値を受け取ります。パラメーターは、次のようなデフォルトのパラメーターに分割できます。

def function(*ARG)
辞書パラメータ:

def function(**ARG)
いくつかの関数ルール:

デフォルト値は、デフォルト以外のパラメータの後に来る必要があります。タプルパラメータ (*ARG) とディクショナリパラメータ (**ARG) を使用できます。

タプルパラメータは接続パラメータとデフォルトパラメータの後に来る必要があります。

辞書パラメータは最後に定義する必要があります。

1. よく使用される関数

1.abs(x)


abs() は数値の絶対値を返します。複素数が指定された場合、戻り値は複素数の法です。

コードをコピー

コードは次のとおりです:

>>>print abs(-100)

100
>>>print abs(1+2j)
2.2360679775


2。 callable(object )

callable() 関数は、オブジェクトが呼び出し可能であるかどうかをテストするために使用され、そうでない場合は 0 (false) を返します。呼び出し可能なオブジェクトには、関数、メソッド、コード オブジェクト、クラス、および「呼び出し」メソッドが定義されたクラス インスタンスが含まれます。

コードをコピーします

コードは次のとおりです:

>>> print callable(a)

0
>>> chr)
1


3.cmp(x,y)

cmp() 関数は、2 つのオブジェクト x と y を比較し、xy の場合は 1 を返し、x==y の場合は 0 を返します。

コードをコピーします

コードは次のとおりです:

>>>a=1

>>>b=2

>>>c=2
>>> ; print cmp (a,b)
-1
> print cmp(b,a)
1
>>gt;> print cmp(b,c)
0

4.pmod( x,y )

pmod(x,y) 関数は除算演算を完了し、商と余りを返します。

コードをコピーします

コードは次のとおりです:

>>> pmod(10,3)(3, 1)

>>> pmod(9,3)

(3, 0)


5.isinstance(object,class-or-type-or-tuple) -> bool

オブジェクトの型をテストします

コードをコピーします

コードは次のとおりです:

>>> ; a='is インスタンス テスト '>>> b=1234>>> is インスタンス (a,str)

>>> > isinstance(b,int)

True


次のプログラムは isinstance 関数の使用法を示しています:


コードをコピー
コードは次のとおりです:


def displayNumType(num ; まったく数値です。 '
displayNumType(-69)

displayNumType(9999999999999999999999999L)

displayNumType(565.8)

displayNumType(-344.3+34.4j)

displayNumType('xxx')

コードは次のとおりです:



コピーcode
コードは次のとおりです:


-69 は型の数です: int
9999999999999999999999999 は型の数です: long
565.8 は型の数です: float
(-344.3+34.4j) は型の数ですtype : complex
xxx はまったく数値ではありません!!!

6.len(object) -> integer

len() 関数は文字列とシーケンスの長さを返します。

コードをコピーします

コードは次のとおりです:



>>> len("aa")
2
>>> len([1,2])
2

7 .pow( x,y[,z])

pow() 関数は、x を底、y を指数として累乗した値を返します。 z 値が指定された場合、関数は z を法として y 乗した x の値を計算します。

コードをコピーします コードは次のとおりです:


>>> print pow(2,4)
16
>>> print pow(2,4,2)
0
> ;> > print pow(2.4,3)

13.824

8.range([ lower,]stop[,step])

range() 関数は、パラメータに従って整数の連続リストを生成できます。

コードをコピーします

コードは次のとおりです:


> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
> >> 範囲(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 範囲(1,10,2)

、5、7、9]

9.round(x[,n])

round() 関数は、浮動小数点数 x の四捨五入された値を返します。n 値が指定されている場合、それは小数点以下の桁数を表します。

コードをコピーします コードは次のとおりです:


>round(3.333)
3.0
>3.0
>round(5.9) )
6.0

10.type(obj)

type() 関数はオブジェクトのデータ型を返すことができます。

コードをコピーします コードは次のとおりです:

>>> type 'list'>
>>> type(copy)
>>> type(1)



11.xrange([ lower,]stop[,step])

xrange() 関数は次のようになりますrange() ですが、xrnage() はリストを作成せず、リストのように動作する xrange オブジェクトを返しますが、この機能により、リストが大きい場合にメモリを節約できます。

コードをコピーします

コードは次のとおりです:

>>> print a[0]

0
>> [1]
1
>>> print a[2]
2


2. 組み込みの型変換関数
1.chr(i)

chr() 関数は ASCII に対応する文字列を返します。コード。

コードをコピーします

コードは次のとおりです:

>>> print chr(66)

B

>>> chr(65) )+chr(66)
AB


2.complex(real[,imaginary])

complex() 関数は、文字列または数値を複素数に変換できます。

コードをコピーします

コードは次のとおりです:

>>> complex("2+1j")(2+1j)>>> complex("2")

(2+0j )

>>> complex(2,1)
(2+1j)
>>> complex(2L,1)


3.float( x)

float() 関数は、数値または文字列を浮動小数点数に変換します。

コードをコピーします

コードは次のとおりです:

>>> float("12")

12.0>>> (12.2) 12.199999999999999


4.hex(x)

hex() 関数は整数を 16 進数に変換できます。


コードをコピーします
コードは次のとおりです:

>>> hex(16)

'0x10'

>>> hex(123)

'0x7b'

5.long (x[ ,base])


long() 関数は、数値と文字列を長整数に変換します。base はオプションの基数です。


コードをコピーします
コードは次のとおりです:

>>>long("123")

123L

>>>long(11)

6.list(x) )

list() 関数は、シーケンス オブジェクトをリストに変換します。例:


コードをコピーします
コードは次のとおりです:

>>> list("hello world")

['h', 'e', 'l', 'l' 、'o'、' '、'w'、'o'、'r'、'l'、'd']

>>> list((1,2,3,4))

[1 , 2, 3, 4 ]

7.int(x[,base])

int() 関数は、数値と文字列を整数に変換します。base はオプションの基数です。


コードをコピーします
コードは次のとおりです:

>>> int(3.3)

3

>>> int(3L)

3

>>> 13") 13>>> int("14",15)

19



8.min(x[,y,z...])

min() 関数は最小値を返します指定されたパラメータのうち、パラメータはシーケンスにすることができます。


コードをコピーします
コードは次のとおりです:

>>> min(1,2,3,4)

1

>>> (2, 3,4))

(1, 2, 3)

9.max(x[,y,z...])

max() 関数は、指定されたパラメーターの最大値を返します。シーケンスにすることもできます。


コードをコピーします
コードは次のとおりです:

>>> max(1,2,3,4)

4

>>> (2, 3,4))

(2, 3, 4)

10.oct(x)

oct() 関数は、指定された整数を 8 進数に変換できます。

コードをコピーします コードは次のとおりです:


>>> oct(8)
'010'
>>> oct(123)
'0173'

11.ord (x)

ord() 関数は、文字列パラメータの ASCII コードまたは Unicode 値を返します。

コードをコピーします コードは次のとおりです:


>>> ord("a")
97
>> ord(u"a")

12。 str(obj )

str() 関数は、オブジェクトを印刷可能な文字列に変換します。

コードをコピーします コードは次のとおりです:

>>> str("4")
'4'
>>> str(4)
'4'
>> ;> str(3+2j)
'(3+2j)'

13.tuple(x)

tuple()関数はシーケンスオブジェクトをタプルに変換します。

コードをコピーします コードは次のとおりです:

>>> tuple("hello world")
('h', 'e', 'l', 'l', ' o', ' ', 'w', 'o', 'r', 'l', 'd')
>>> タプル([1,2,3,4])
(1, 2) , 3, 4)

3. シーケンス処理関数

1. len()、max()、min() などの一般的に使用される関数もシーケンスに使用できます。

2.filter(function,list)

filter() が呼び出されると、シーケンス内の各項目に関数が適用され、関数が true 値を返した場合はすべての項目が返されるため、すべての項目が false 値から除外されます。

コードをコピーします コードは次のとおりです:

>>> def nobad(s):
... Return s.find("bad") == -1
...
> ;> s = ["悪い","良い","悪い","我々"]
>>>['良い', '我々']


この例では、 nobad() 関数を s シーケンス内のすべての項目に適用し、「bad」を含むすべての項目をフィルターで除外します。

3.map(function,list[,list])

map() 関数は、シーケンス内のすべての項目に関数を適用し、リストを返します。

コードをコピーします

コードは次のとおりです:

>>> s=["python","zope","linux"]

>> ;>map (string.capitalize,s)
['Python', 'Zope', 'Linux']


map() は複数のリストに同時に適用することもできます。例:

コードをコピーします

コードは次のとおりです:

>>> s=[1,2,3]; 1]

> ;>> map(operator.mul,s,t) # s[i]*t[j]

[3, 4, 3]


関数の代わりに None 値を渡す場合、次に、map( ) は各シーケンス内の対応する要素を結合してタプルを返します。例:

コードをコピー

コードは次のとおりです:

>>> a=[1,2];b=[3,4];c=[5,6]> >>map(None,a,b,c)

[(1, 3, 5), (2, 4, 6)]



4.reduce(function,seq[,init])

reduce () 関数が取得されました シーケンス内の最初の 2 つの項目が取得され、指定された関数に渡されます。結果を取得した後、シーケンス内の次の項目が取得され、結果とともに関数に渡されます。これがすべての項目が取得されるまで続きます。処理された。

コードをコピーします

コードは次のとおりです:

>インポート演算子>>>gt;>reduce(operator.mul,[2,3,4,5]) # ((2) *3) *4)*5

120

>reduce(operator.mul,[2,3,4,5],1) # (((1*2)*3)*4)* 5
120
>>>reduce(operator.mul,[2,3,4,5],2) # (((2*2)*3)*4)*5
240


5 .zip( seq[,seq,...])

zip() 関数は、2 つ以上のシーケンスで対応するアイテムを結合し、それらをタプル形式で返すことができ、すべてのアイテムを最短のシーケンスで処理した後、停止します。

コードをコピーします

コードは次のとおりです:

>>> zip([1,2,3],[4,5],[7,8,9])[(1, 4, 7 ), (2, 5, 8)]


パラメーターがシーケンスの場合、zip() は次のようなタプル形式で各項目を返します。

コードをコピー

コードは次のとおりです。

> >> zip((1,2,3,4,5))[(1,), (2,), (3,), (4,), (5,)]

>> zip([1,2,3,4,5])

[(1,), (2,), (3,), (4,), (5,)]

4. 他の
def ステートメントは、実行時に、新しい関数オブジェクトを作成し、変数名に割り当てます。 独立したコンパイル時間はありません。

これはステートメントであるため、def はステートメントが出現できる場所ならどこにでも出現できます (他のステートメント内にネストされていても可):

コードをコピーします コードは次のとおりです:

if test:
def fun():
.. .
else:
othername=func()
othername()
組み込みの呼び出し可能関数を使用して、関数が呼び出し可能かどうかを判断できます:


コード

コードは次のとおりです:

>>> import math
> ;>> del ステートメント定義関数:

コードは次のとおりです:

>>> return 'Hello, '+name+'!'>>> print hello( 'world')

Hello, world!

>>> print hello('Gumby')
こんにちは、ガンビー!


フィブナッチ数列関数を作成します:


コードをコピーします
コードは次のとおりです:

> ;>>:

result=[0,1] for i in range(num-2): result.append(result[-2]+result[-1])

結果を返します

>>> fibs(10)
[0, 1, 1、2、3、5、8、13、21、34]
>>fibs(15)
[0、1、1、2、3、5、8、13、21、34、55 、89、144、233、377]


関数内のパラメータに値を代入しても、外部変数の値は変更されません:

コードをコピー

コードは次のとおりです。 > def try_to_change(n):

n='Mr.Gumby'>>> try_to_change(name )>>> 「Mrs.Entity」


文字列(およびタプルと数値)は不変であるため、パラメータを作成しても変更されませんが、変数であるリストなどのデータ構造をパラメータとして使用するとどうなるか:


コードをコピーします
コードは次のとおりです:


>>> name='Mrs.Entity'
>>> try_to_change(name)
>>> '

>>> def change(n):

n[0]='Mr.ガンビー'

>>> name=['Mrs.Entity', 'Mrs.Thing']> ;>>change(name)>>> name

['Mr.Gumby', 'Mrs.Thing']



これが前の例との重要な違いです

関数を使用せずにもう一度実行します:


コードをコピーします

コードは次のとおりです:

>>> name=['Mrs.Entity','Mrs.Thing' ]>> > n=name #もう一度パラメータの受け渡し動作をシミュレートします>>> n[0]='Mr.Gumby' #変更リスト

>>>[' Mr.Gumby', 'Mrs.Thing']



2 つの変数が同時にリストを参照する場合、この状況を回避するには、シーケンス内のリストのコピーを作成します。スライスするときに返されるスライスは常にコピーなので、リスト全体のスライスをコピーすると、コピーが得られます:


コードをコピー
コードは次のとおりです:


>>> =['Mrs .Entity','Mrs.Thing']
>>> n=names[:]
>>> n は名前です
>>>

True

この時点で n を変更しても名前には影響しません:

コードをコピーします コードは次のとおりです:


>>> n[0]='ミスター・ガンビー'
>>> n
['ミスター・ガンビー', 'ミセス・シング']
>>> 'Mrs.Entity', 'Mrs.Thing']
>>>change(names[:])
>>> names
['Mrs.Entity', 'Mrs.Thing']

キーワードパラメータとデフォルト値

パラメータの順序は、パラメータ名を指定することで指定できます (ただし、パラメータ名と値は対応している必要があります):

コードをコピー コードは次のとおりです:

>> > def hello (挨拶、名前):
print '%s,%s!'%(挨拶、名前)
>>> こんにちは(挨拶='こんにちは'、名前='世界!') 、世界!!


キーワード パラメータの最も強力な点は、パラメータにデフォルト値を指定できることです:

コードをコピーします

コードは次のとおりです:

>>> hello_1(greeting='hello',name= 'world!'):

print '%s,%s!'%(greeting,name)

>>> hello_1()

hello,world! !>> :



コードをコピー
コードは次のとおりです:


>>> def print_params_2(title,*params):

print title

print params

>>> ',1,2,3)params:(1, 2, 3)

>>> print_params_2('Nothing:')

Nothing :
()

アスタリスクは「残りの位置情報を収集する」ことを意味しますコレクションに要素が指定されていない場合、params は空のタプルです

が、キーワード パラメータは処理できません:

コードをコピー

コードは次のとおりです:



>>> print_params_2('Hmm ...',something=42)

トレースバック (最後の呼び出し):

ファイル ""、 の 1 行目
print_params_2('うーん...',something=42 )
TypeError: print_params_2() が予期しないキーワード引数 'something' を取得しました

"**" を使用してみてください:

コードをコピーします コードは次のとおりです:

>>> **params):
print params

>>> print_params(x=1,y=2,z=3)

{'y': 2 , 'x': 1, 'z': 3}

>>> def parames(x,y,z=3,*pospar,**keypar):
print x,y,z
print pospar
print keypar

>>> ,2,3,5,6,7,foo=1,bar=2)
1 2 3

(5, 6, 7)

{'foo': 1, 'bar': 2}

>> > parames(1,2)

1 2 3

()

{}>>> def print_params_3(**params): print params

>>> y=2,z=3)

{'y': 2, 'x': 1, 'z': 3}
>>> #Return タプルではなく辞書です
>>> ; #'#' と '##' を結合します
>>> print_params_4(x,y,z=3,*pospar,**keypar):
print x,y,z
print pospar
print keypar

>>> print_params_4(1,2,3,5,6,7,foo=1,bar=2)

1 2 3

(5 , 6, 7){'foo': 1, 'バー': 2}>>> print_params_4(1,2)

1 2 3

()
{}

;

以上がPython 関数の基本の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。