python関数-15関数の役割ドメイン


関数の役割ドメイン
役割ドメインの定義:変数が使用できる範囲です.
1.グローバル変数
#    :
a = 100     #         :                 
print(a)     #>>>100

#    :
if True:
    b = 200   #       ,  if    ,    
print(b)      #>>>200
#   :           

#    :
flag = True
while flag:
    c = 300   #       
    flag = False
print(c)      #>>>300

#   :                   

2.ローカル変数----->関数に定義
#    :
def foo():
    print('hello')
    d = 400    #    
foo()
# print(fa)   #>>>    fa   
#   :a.                  .          
#       b.           

#    :
e = 500
def foo_1():
    print('hello')
    e = 600
    print(e)    #>>>600
foo_1()
print(e)   #>>>500
#   :             ,                

#    :
#                   ,     global
def foo_2():
    global f    
    f = 700     #f     
    print(f)   #>>>700
foo_2()
print(f)     #>>>700

#    :
# f  global        ,             .
def foo_3():
    print(f)   
foo_3()    #>>>700

3.関数を変数とする
#    :
#       
def foo_4():
    print('hello hanbo')
#       
foo_4()
#                  .               
g = foo_4
g()

#    :
def foo_5(name):
    return 'Hi'+ name
h = foo_5
#            ,                         
print(h('hanbo'))

4.関数を関数のパラメータとする
#   :             ,          
def cacul(num1, num2, fn):
    return fn(num1, num2)
def sum(*numbers):
    sum = 0
    for x in numbers:
        sum += x
    return sum
def mul(*numbers):
    sum = 1
    for x in numbers:
        sum *= x
    return sum
print(cacul(10, 20, mul))

#   :               ,            

5.関数を戻り値とする
#   :     ,     +,       ,     -,        .
def operation(char):
    def diff(*nums):    #          ,                   
        sum = nums[0]
        for x in range(1, len(nums)):
            sum -= nums[x]
        return sum

    def sum1(*nums):    #          ,                   
        sum = nums[0]
        for x in range(1, len(nums)):
            sum += nums[x]
        return sum

    if char == '-':
        return diff

    if char == '+':
        return sum1

print(operation('-')(10, 5, 2))   #>>>3
print(operation('+')(10, 5, 2))   #>>>17
# diff(10, 5, 2)   >>>            

6.匿名関数
(1)匿名関数の定義:関数のパラメータと関数の戻り値として用いる.
注意:匿名関数は関数の宣言だけで関数の実現はありません.
(2)匿名関数のフォーマット
LambdaパラメータリストLambdaパラメータリスト:戻り値式
#   :
fn = lambda x, y:x + y
print(fn(10, 20))

#   1:       
fx = lambda x:x ** 2
print(fx(6))

#   2:                     .
foo = lambda list1,index:list1[index]
print(foo([2, 3, 4, 5],1))

(3)匿名関数の使用
a.匿名関数を関数のパラメータとする
def cacul(num1, num2, fn):
    return fn (num1, num2)

result = cacul(10, 20, lambda x, y:x+y)
print(result)

b.匿名関数を戻り値とする
def operation(char):
    if char == '+':
        return lambda x, y:x+y
    if char == '-':
        return lambda x, y:x-y
    if char == '*':
        return lambda x, y:x*y
    if char == '/':
        return lambda x, y:x/y
result = operation('+')(9, 3)
print(result)