1.関数の定義
特定の容器にパッケージされるコードの機能ブロックは、容器は、関数呼び出しの内部コードを実行する特定の機能を使用する必要があります。
def fun(参数):
函数块
return 返回值
1.1 形参
関数の定義されたパラメータ。
- 位置パラメータ
def fun(name, age, num):
pass
- キーワード引数
def fun(name = 'aaron', age = 20, num = '201620'):
pass
注意を払います
- 位置パラメータとキーワードパラメータミックスすると、位置パラメータはキーワード引数の前でなければなりません。
def fun(name, age, num = '201620'): pass
- 注意変数タイプで使用する機能のデフォルト値の場合。
# 如果想要给value设置默认值是空列表 # 不推荐 # 因为在建立函数时, 就已经创建了一个空列表. 在调用函数时, 若不传递value参数, 则调用的函数执行时, value指向同一个地址。 def func(data, value = []): pass # 推荐 def func(data, value = None): if not None: value = []
例
# 方法一 def func(data, value = []): value.append(data) return value v = func(1) v1 = func(1,[11,22,33]) print(v) v2 = func(2) print(v,v1,v2) # 输出结果 [1] [1, 2] [11, 22, 33, 1] [1, 2]
# 方法二 def func(data, value = None): if not value: value = [] value.append(data) return value v = func(1) v1 = func(1,[11,22,33]) print(v) v2 = func(2) print(v,v1,v2) #输出结果 [1] [1] [11, 22, 33, 1] [2]
特別なパラメータ
def func(*args, **kwargs): pass # 其中*args用来接受除字典以外的其他类型的参数, **kwargs用来接受字典类型的参数
1.2引数
あなたは、パラメータを渡す、関数を呼び出した場合。
def fun(name, age, num):
pass
fun('aaron', 20, '201620')
注意を払います
パラメータ伝達関数メモリアドレス(参照)。
1.3戻り値
誰が、戻り値、デフォルトの戻りなしを指定しないで、それに割り当てられた関数の戻り値、関数を呼び出します。
def fun(name, age, num):
return name, age, num
- 注意を払います
- 関数が呼び出されていない、内部関数のステートメントは実行されません!
- たびに関数呼び出しは、呼び出しがメモリを開放することで、メモリが使用する彼らの将来の値を保持することができます。
2.無名関数
定義
いわゆる無名関数は、関数名の関数ではないが、ラムダキーワードで定義します。
lambda x, y: x + y
- 上記の式は、次の関数と機能的に同等です。
def fun(x, y):
return x + y
3.再帰関数
- この関数は自分自身を呼び出します
def recursion():
num = input('请输入一个阿拉伯数字:')
if num.isdecimal():
print('输入成功')
else:
print('\n输入错误! 重新开始!\n')
recursion() # 在此处调用了自己
recursion()
4.閉鎖
定義
それ以降の実行のためのデータを提供し、機能(個人用の内部変数)用の領域を作成します。
name = 'oldboy'
def bar(name):
def inner():
print(name)
return inner
v1 = bar('alex') # {name = alex, inner} # 闭包
v2 = bar('eric')
v1()
v2()
例
- 例1
name = 'alex' def base(): print(name) def func(): name = 'eric' base() func() # 输出结果为 alex
- 例2
info = [] def func(i): def inner(): print(i) return inner for item in range(10): info.append(func(item)) info[0]() info[1]() info[4]() # 输出结果为 0 1 4
- 例3
name ='aaron' def fun(): def inner(): print(name) return inner() # 相当于 v = inner();return v inner无返回值,所以v = None, 调用fun()的返回值就为None # return inner # 若语句为左边所示,则最后的输出结果为inner函数所在的内存地址 r = fun() print(r)
注意を払います
# 不是闭包 def bar(name): def inner(): return 123 return inner # 是闭包: 封装值 + 内层函数需要使用 def bar(name): def inner(): print(name) return 123 return inner
5.組み込み関数
- 一般的な組み込み関数
id:# 查看地址值
type:# 查看类型
dir:# 获取当前数据内置的方法属性
len:# 求长度
range:# 生成一系列的数字
open:# 打开文件
input:# 输入
print:# 输出
help:# 帮助
'''
注意:关于上述提到的id是用来查看地址值的,这里补充一下is和==的区别。
is:用来判断两个变量的地址是否相同。
==:用来判断两个变量的值是否相同。
'''
高度な組み込み関数
- マップは、各要素の反復ループは、保存された実行結果の各イテレータ戻るに、対象とし、各要素の機能を実行することができます。
# 格式:map(函数, 可迭代对象) v1 = [1, 2, 3, 4, 5] # 将v1中的每个元素都加10 result1 = map(lambda x: x + 10, v1) # 将v1中的每个元素都乘10 result2 = map(lambda x: x * 10, v1) print(result1) result3 = [] for i in result1: result3.append(i) print(result3) print(result2) result4 = [] for i in result2: result4.append(i) print(result4) # 输出结果 <map object at 0x0000021384B5E940> [11, 12, 13, 14, 15] <map object at 0x0000021384B89FD0> [10, 20, 30, 40, 50]
- フィルタは、オブジェクトの各要素のための反復ループであり、そして、各要素の機能を実行することができる、各要素は機能イテレータ戻るに記憶された条件を満たしています。
# 格式:filter(函数, 可迭代对象) v1 = [11, 22, 'aa', 33, 'bb'] # 求v1中类型为int的元素 result1 = filter(lambda x: type(x) == int, v1) # 求v1中类型为str的元素 result2 = filter(lambda x: type(x) == str, v1) print(result1) result3 = [] for i in result1: result3.append(i) print(result3) print(result2) result4 = [] for i in result2: result4.append(i) print(result4) # 输出结果 <filter object at 0x00000175EADDD048> [11, 22, 33] <filter object at 0x00000175EBE5CBA8> ['aa', 'bb']
注意を払います
地図及びフィルタ戻り値があるイテレータ直接出力は、結果の値がアドレスである場合;その値を取得するサイクル動作、またはリストを使用する()は、直接、リスト・イテレータに直接キャストしますその値を取得します。
v1 = [11, 22, 'aa', 33, 'bb'] result = filter(lambda x: type(x) == int, v1) print(list(result)) # 输出结果 [11, 22, 33]
上記のpython3のリリースでは、実行結果は述べ、リリースPython2で、マップや戻り値はリストでフィルタする場合。
関数は、2つのパラメータを持っている必要があり、要素は、ループを繰り返しオブジェクト関数を実行することができる、低減、それぞれ2つのパラメータは、最初のパラメータは、第二が渡され(得られた以前の実行結果に渡され二つのパラメータ)、最終的な結果は、イテレータとリターンに保存されます。これは、その使用やマップ、フィルタに類似である代わりに、機能ブロックfunctoolsです。
# 格式:reduce(函数, 可迭代对象) from functools import reduce v1 = [1, 10, 100, 1000] # 求v1中元素的和 result1 = reduce(lambda x, y: x + y, v1) # 求v1中元素的乘积 result2 = reduce(lambda x, y: x * y, v1) print(result1) print(result2) # 输出结果 1111 1000000