関数
1.機能紹介
1.1. 関数とは:
-
実際、これはコード セグメントであり、このコードは繰り返し実行でき、関数を介してコードを再利用できます。
-
関数は自発的に実行することはできず、呼び出す必要がある場合にのみ実行できます
パイソンモジュール
-
Pythonファイルはモジュールです
1.2、機能分類
-
グローバル関数: モジュールで直接定義された関数はグローバル関数です
-
ローカル関数: 関数内で定義されたサブ関数。そのような関数はローカル関数です
-
無名関数: ラムダ関数とも呼ばれ、実際には式です
-
メソッド: メソッドも関数ですが、関数は特性データ型にバインドする必要があります。
1.3、関数の定義と呼び出し
関数を定義する
1. def は英語の define の略語です
2. 関数名は関数カプセル化コードの機能を表現できるもので、後続の呼び出しに便利です
3. 関数名の命名は、識別子の命名規則に従う必要があります。
文字、アンダースコア、数字で構成できます。数字で
始めることはできません
。キーワードと同じ名前
def 函数名():
语句
语句
...
関数を呼び出す
def f1(): # 定义一个名为 f1的函数
print("1")
print("ok")
print("2")
print("start process...")
f1() # 调用函数 f1
print("over")
1.4、関数の実行結果
-
関数の出力: 関数で print を使用して結果を出力し、直接表示できます。
-
出力用: print
-
出力結果:直接印刷可能
-
-
関数の戻り値: 関数内で return を使用して 1 つ以上の結果を返します. この結果を使用して受け取ることができます. return が実行されると, return の後のコードは実行されません, つまり, 関数は直接終了し、メイン プログラムに戻って実行を継続する
-
戻る: 戻る
-
戻り値: メインプログラムで受け取ることができます. 複数の値が返された場合, 複数の値がタプルとして保存されます.
-
def userdate(): # 定义一个名为 userdate 的函数
num1 = int(input("请输入第一个数字:"))
num2 = int(input("请输入第二个数字:"))
if num1 > num2: # 如果num1 > num2 函数返回值为num1
return num1
else:
return num2 # 如果num1 < num2 函数返回值为num2
print(userdate()) # 输出函数的返回值
1.5 関数のドキュメント
-
一般に、各関数には、関数の機能と使用方法を説明するドキュメントが必要です。
-
関数のドキュメントを表示する方法
函数名.__doc__
変数のスコープ
-
ローカル変数: モジュールで定義された [メイン プログラム内の変数]、有効なスコープは、メイン プログラムと関数内を含む Python ファイル全体です。
-
ローカル変数: 関数内で変数を定義します。デフォルトの有効なスコープは関数内のみです
-
関数の実行が終了すると、関数内のローカル変数はシステムによって再利用されます
-
異なる関数で同じ名前のローカル変数を定義できますが、それぞれの使用は影響しません
-
組み込み変数: python 自体で定義
予防:
-
変数のスコープが小さいほど、優先度が高くなります
-
ローカル変数の優先順位 > ローカル変数
-
グローバル変数ではなくローカル変数を変更する
-
変数を見つけるプログラムのプロセスは、まず最も近い変数を見つけ、存在する場合はそれを直接使用し、存在しない場合は上位層まで検索します。
-
デフォルトでは、関数内の変数はローカル変数ですが、キーワード: global を使用して、変数をグローバルとして明示的に指定できます
x = 1 # 全局变量
y = 3 # 全局变量
def f1():
x = 2 # 局部变量
z = 5 # 局部变量
global y # 全局变量【将局部变量y转换为全局变量】
y = 0 # 为转换后的全局变量赋值 0
print(x,y,z)
print(x,y) # 输出 x 是 1,y 是 3
f1() # 将 x 改为 2,z 设置为5 ,然后输出x y z 也就是输出 2 3 5
print(x,y) # 输出 x 和 y, 此时 x 是 1,y 是 0
三、関数伝達パラメータ
3.1 関数のパラメータは仮パラメータと実パラメータに分けられる
- 定義中の括弧内のパラメーターは、「仮パラメーター」と呼ばれるパラメーターを受け取るために使用されます。
- 呼び出し時の括弧内のパラメーターは、「実際のパラメーター」と呼ばれる関数に渡すために使用されます
形参
定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
def 函数名(变量):
代码
パラメータのデフォルト値:
-
関数にパラメーターを渡す必要があるが、呼び出し時に渡されない場合、エラーが報告されます。
引数
调用函数时,小括号中的参数,是用来把数据传递到函数内部用的
def printWellcome(name="jack"): # name = “jack“ 这是为参数设置默认值
print("hello %s"%(name))
userInput1 = input("请输入姓名:")
printWellcome() # 调用函数,没有向函数传递参数,此时函数会使用参数的默认值
printWellcome(userInput1) # 调用函数,向函数传递参数,此时函数会使用传递进来的参数
キーワードに基づいてパラメーターを渡す
-
要件: 関数が定義されるときのパラメーターの名前は、呼び出されるときのパラメーターの名前と同じでなければなりません。
# 定义函数
def fun1(p1,p2,p3="nul"): # 此时参数的名字分别是p1 p2 p3
# 调用函数
fun1(p1=xx,p2=xx) # 此时必须明确指定p1=x p2=x p3=x
デモ
def fun1(p1,p2,p3="nul"):
if p3 == "nul":
print("姓名是 %s, 年龄是%s"%(p1,p2))
else:
print("姓名是 %s, 年龄是%s, 地址是%s" % (p1, p2, p3))
uname = input("name:")
uage = input("age:")
uaddr = input("addr:")
fun1(p2=uage,p1=uname)
3.2 パラメータの受け渡し
関数のパラメータ受け渡しは、基本的には実パラメータから仮パラメータへの代入操作です。Python では「すべてがオブジェクト」であり、代入操作はすべて「参照代入」です。したがって、Python でのパラメーターの受け渡しは、「値渡し」ではなく「参照渡し」です。特定の操作には次の 2 種類があります。
1. 元のオブジェクト自体に直接作用する「可変オブジェクト」に対して「書き込み操作」を実行します。
2. 「不変オブジェクト」に対して「書き込み操作」を実行すると、新しい「オブジェクト空間」が生成され、この空間が新しい値で埋められます。(他の言語の「値渡し」効果を果たしますが、「値渡し」ではありません)
1. 変数オブジェクトには、辞書、リスト、セット、カスタム オブジェクトなどがあります。 2.
2. 不変オブジェクト: 数値、文字列、タプル、関数など。
1. 変更可能なオブジェクトへの参照の受け渡し: 渡されたパラメーターは変更可能なオブジェクト (たとえば、リスト、辞書、その他のカスタムの変更可能なオブジェクトなど) であり、オブジェクトへの参照が実際に渡されます。関数本体でオブジェクトの新しいコピーを作成する代わりに、渡されたオブジェクトを直接変更できます。
2. 不変オブジェクトへの参照の受け渡し 渡されたパラメーターは不変オブジェクト (例: int、float、string、tuple、Boolean 値) であり、実際のオブジェクトは引き続き渡されます。「割り当て操作」では、不変オブジェクトは変更できないため、システムは新しいオブジェクトを作成します。
4番目に、任意のパラメーターを渡します
-
魔法の割り当て
method1 def fun1 (*パラメータ)
-
このメソッドは、任意の数のパラメーターを受け入れるために使用され、結果はタプルです
def fun1(*p1):
print(p1) # p1用于接收和保存传递进来的多个参数,多个参数是以元组的形式保存的
fun1("a","b") # 向函数传递多个参数
# 输出结果是('a', 'b')
メソッド 2 def fun2 (* *パラメーター)
-
このメソッドは、任意の数のパラメーターを受け入れるために使用され、結果は辞書です
def fun1(**p1):
print(p1) # p1用于接收和保存传递进来的多个参数, 数据是以字典的形式保存的
fun1(name="tom", age="18", addr="hebei")
# 输出结果是{'name': 'tom', 'age': '18', 'addr': 'hebei'}