ないぶかんすう
内部関数ないないないかんすう:関数に含まれる関数のシェイプかんすに含まれるかんすに含まれるけいじ
lambda, map()
ex)
Lambda関数:関数を1行に簡略化します. lambdaパラメータ1、パラメータ2、...:パラメータ式
ラムダ関数ラムダかんすう:単純な関数を作成するには
名前のない関数で、ラムダ式とも呼ばれます.
匿名関数:anonymous function
ラムダ関数はパラメータと関数の機能しか持たない.
map()関数 lambda関数の利点はmap()関数とともに使用する場合に見られる. map()は、2つの引数を持つ関数です. 最初のパラメータ関数:関数名 第2パラメータiterable:1つのメンバーのオブジェクト(list、str、tuple) を一度に返すことができます. map()関数iterableのすべての要素に関数を適用し、関数によって変更された反復器 を返します.
フィルタ内蔵関数
複数のデータからデータの一部を抽出するために使用します.
ex)
Ramda関数でフィルタ
条件関数のコードが長い場合は、上記のように関数を宣言しますが、関数が短い場合はramda関数を使用して簡単なコードを作成できます.
結果データを返す
List Comprehension
これは
tupleを取得するには、
その他のフィルタ関数
1)関数範囲と条件を指定する際のフィルタ関数の使用
reduce関数は、iterableの要素を関数に代入し、結果値を返す関数です.
ex) function : func, iterable : [a_1, a_2, a_3, a_4]
返される結果値:func(func(a 1,a 2),a 3,a 4)
参考資料 https://www.daleseo.com/python-filter/ Pythonカリキュラムリソース、ch 09機能モジュールおよびlambda関数-更新
lambda, map()
ex)
def outFunc(v1, v2):
def inFunc(num1, num2):
return num1 + num2
return inFunc(v1, v2)
print(outFunc(10,20))
outFunc()関数の外部コールでinFunc()関数を使用中にエラーが発生しました.Lambda関数:関数を1行に簡略化します.
def hap(num1, num2):
res = num1 + num2
return res
print(hap(10,20))
hap2 = lambda num1, num2 : num1 + num2
print(hap2(10,20))
hap3 = lambda num1 = 10, num2 = 20 : num1 + num2
print(hap3())
print(hap3(100, 200))
パラメータが指定されていない場合はデフォルトに設定され、パラメータが渡された場合はデフォルトは無視されますラムダ関数ラムダかんすう:単純な関数を作成するには
名前のない関数で、ラムダ式とも呼ばれます.
匿名関数:anonymous function
ラムダ関数はパラメータと関数の機能しか持たない.
(lambda [매개변수1, 매개변수2, ...] : [표현식])(인자1, 인자2, ...)
インラインramda関数:呼び出し文にramda関数の機能を追加できます.print('100과 200의 합 : ', (lambda x, y : x + y)(100, 200))
map()関数
r = map(function, iterable, ...)
a = [1,2,3,4]
b = [17,12,11,10]
list(map(lambda x, y : x + y, a, b))
フィルタ内蔵関数
複数のデータからデータの一部を抽出するために使用します.
filter(조건 함수, 순회 가능한 데이터)
filter()
関数は、2番目のパラメータのデータのうち、1番目のパラメータを満たす条件関数のデータのみを返します.ex)
users = [{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Madison Martinez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'}]
# 함수를 인자로 받기 때문에, is_man() 함수 선언
def is_man(user):
return user["sex"] == "M"
# 첫 번째 인자 : is_man(), 두 번째 인자 : users
for man in filter(is_man, users):
print(man)
# 결과
# {'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'}
# {'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'}
Ramda関数でフィルタ
条件関数のコードが長い場合は、上記のように関数を宣言しますが、関数が短い場合はramda関数を使用して簡単なコードを作成できます.
users = [{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Madison Martinez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'}]
# 함수를 인자로 받기 때문에, is_man() 함수 선언
def is_man(user):
return user["sex"] == "M"
for woman in filter(lambda u: u["sex"] != "M", users):
print(woman)
結果データを返す
filter()
関数を使用して、listまたはtupleタイプのデータを格納する必要があります.filter()
関数は、filter
のタイプで結果を返します.filter()
関数の結果値をlistに変換する最も簡単な方法は、list()
内蔵関数を使用することです.users = [{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Madison Martinez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'}]
print(list(filter(lambda u: u["mail"].endswith("@gmail.com"), users)))
# 결과
[{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'}, {'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'}, {'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'}, {'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'}]
tuple()
内蔵関数を使用してtupleに変換できます.users = [{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Madison Martinez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'}]
print(tuple(filter(lambda u: u["mail"].endswith("@gmail.com"), users)))
# 결과
({'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'}, {'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'}, {'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'}, {'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'})
List Comprehension
これは
filter()
関数を用いるよりもPythonのようなデータ抽出方法である.users = [{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Madison Martinez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'}]
print([user for user in users if user["sex"] == 'M'])
# 결과
[{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'}, {'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'}]
リストは結果値がリストタイプであることを理解するため、他のタイプの変換は必要ありません.tupleを取得するには、
tuple()
内蔵関数を使用するだけです.users = [{'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Madison Martinez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'},
{'mail': '[email protected]', 'name': 'Karen Rodriguez', 'sex': 'F'},
{'mail': '[email protected]', 'name': 'Amber Rhodes', 'sex': 'F'}]
print(tuple(user for user in users if user["sex"] == 'M'))
# 결과
({'mail': '[email protected]', 'name': 'Brett Holland', 'sex': 'M'}, {'mail': '[email protected]', 'name': 'Michael Jenkins', 'sex': 'M'})
x)二乗出力a = [1,2,3,4,5]
a = [x**2 for x in a]
print(a)
# 결과
[1, 4, 9, 16, 25, 36, 49]
ex)複数の整数文字列を受信しint()関数を使用して整数値リストに変換するlist_array = [int(x) for x in input('정수를 여러개 입력하세요 : ').split()]
print(list_array)
ex)2つのリストの積機能product_xy = [x * y for x in [1, 2, 3] for y in [2, 4, 6]]
# 결과
[2, 4, 6, 4, 8, 12, 6, 12, 18]
ex)2と3の倍数を求めるname = [n for n in range(1, 31) if n % 2 == 0 if n % 3 == 0]
print(name)
# 결과
[6, 12, 18, 24, 30]
その他のフィルタ関数
1)関数範囲と条件を指定する際のフィルタ関数の使用
ages = [34, 39, 29, 19, 13, 44]
print('성년 리스트 : ')
for a in filter(lambda x : x >= 19, ages):
print(a, end = ' ')
2)Ramda関数による負値抽出機能n_list = [-30, 45, -5, -90, 20, 54, 77]
minus_list = list(filter(lambda x : x < 0, n_list))
print("음수 리스트",minus_list)
reduce関数
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value
reduce関数はfunctionであり、iterableは渡さなければならない.initializerはオプションである.reduce関数は、iterableの要素を関数に代入し、結果値を返す関数です.
ex) function : func, iterable : [a_1, a_2, a_3, a_4]
返される結果値:func(func(a 1,a 2),a 3,a 4)
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value
result1 = reduce(lambda x, y : x + y, ['2','4','6','8','10','12'],'add : ')
print(result1)
# 결과
add : 24681012
参考資料
Reference
この問題について(ないぶかんすう), 我々は、より多くの情報をここで見つけました https://velog.io/@chang626/내부-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol