関数値の転送問題

まず例を見てみましょう:

# -*- coding: UTF-8 -*-
def chagne_number( b ):
    b = 1000
b = 1
chagne_number(b)
print( b )

最終的な出力結果は次のとおりです:

1

ここで疑問を持つ人もいるかもしれません。なぜ b の値は関数 chagne_number で変更されないのでしょうか?変化がなく、出力結果が 1 のままなのはなぜですか? この問題は多くのプログラミング言語で議論されており、原理の説明も同様です。

これは主に、型オブジェクトである関数パラメータの転送についてです。Python の基本的なデータ型も以前に紹介しました。これらの型オブジェクトは、変更可能な型と変更不可能な型に分類できます。

Python では、文字列、整数、浮動小数点型、タプルは変更できないオブジェクトですが、リスト、辞書などは変更できます。

例:

変更不可能な型: 変数の代入 a = 1 は、実際には整数オブジェクト 1 を生成し、変数 a は 1 を指します。 a = 1000 の場合、実際には、別の整数オブジェクト 1000 を生成し、次に a の点を変更して、整数オブジェクト 1 を指すのではなく 1000 を指すようにします。最終的に 1 は破棄されます。

Changeable type: 変数の割り当て a = [1,2,3,4,5,6] はオブジェクト リストを生成します。リストには 6 つの要素があり、変数 a はリストを指します。a[2] = 5 はリスト a の 3 番目の要素を変更します。ここでの要素値の変更は上記とは異なり、a をリダイレクトするのではなく、リスト内の要素の値を直接変更します。

ca71dacdee25f4d37deb9d0275fb3ba.png

これは、関数でのパラメータの受け渡しにも影響します:

変更不可能な型: C の値の受け渡しと同様、次のようになります。整数、文字列、タプル。たとえば、 fun(a) は a の値を転送するだけで、 a オブジェクト自体には影響しません。たとえば、 fun(a) 内の a の値を変更すると、コピーされた別のオブジェクトが変更されるだけで、 a 自体には影響しません。

変更可能なタイプ: リストや辞書など、C に似た参照の受け渡し。例えば ​​fun (a) の場合、実際には a が渡されますが、変更すると外部の fun も影響を受けます

したがって、最初の例では、b = 1 として、整数オブジェクト 1 が作成されます。 , 変数 b がこのオブジェクトを指しており、関数 chagne_number を渡すと、変数 b が値によってコピーされます。渡されるのは b の値のみであり、b 自体には影響しません。詳細については、変更後の例を確認し、印刷結果を確認することでよりよく理解できます。

# -*- coding: UTF-8 -*-
def chagne_number( b ):
    print('函数中一开始 b 的值:{}' .format( b ) )
    b = 1000
    print('函数中 b 赋值后的值:{}' .format( b ) )
b = 1
chagne_number( b )
print( '最后输出 b 的值:{}' .format( b )  )

出力結果:

函数中一开始 b 的值:1
函数中 b 赋值后的值:1000
最后输出 b 的值:1

もちろん、パラメータが変更可能な型の場合、この関数を呼び出した後、元の値も変更されます。具体的な例は次のとおりです:

# -*- coding: UTF-8 -*-
def chagne_list( b ):
    print('函数中一开始 b 的值:{}' .format( b ) )
    b.append(1000)
    print('函数中 b 赋值后的值:{}' .format( b ) )
b = [1,2,3,4,5]
chagne_list( b )
print( '最后输出 b 的值:{}' .format( b )  )

出力結果:

函数中一开始 b 的值:[1, 2, 3, 4, 5]
函数中 b 赋值后的值:[1, 2, 3, 4, 5, 1000]
最后输出 b 的值:[1, 2, 3, 4, 5, 1000]
学び続ける
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!