day_08関数

6712 ワード

1.関数の戻り値
a.関数が呼び出し元に返す値b.returnキーワードの後の式の値c.関数呼び出し式の値
pythonの各関数には戻り値があります
1.2.キーワードreturn
a.returnの後の値を、関数呼び出し式b.終了関数に返す(関数実行中にreturnに遭遇したら終了する)
1.3.関数呼び出し式
pythonの各関数呼び出し式には値があり、戻り値はreturnの後の値です.関数にruturnがない場合、関数の戻り値はNoneです.
1.4.関数の呼び出し
a.         
b.         
c.     
d.      ,              
e.         
def func1():
    print('aaa')


a = func1()  #        
print(a, func1())

def my_sum(x, y):
    return  x+y


print(my_sum(1, 2))


#   :    ,              (    )
def is_adult(age):
    if age >= 18:
        return True
    else:
        return False


if is_adult(19):
    print('     ')
else:
    print('        ')

1.5.関数の終了:
a.関数体実行完了b.returnに遭遇
def func2():
    print('123')
    return 10
    print('321')


print(func2())

"""
    :           
def download(url):
          
    if    :
        return None
         
        
        
"""
#   : 1+2+3+...+N,     10000
def my_sum2():
    sum1 = 0
    number = 1
    while True:
        if sum1 + number >= 10000:
            return sum1,number-1  # python    return      (     ),        
        sum1 += number
        number += 1
        # sum1 += number
        # if sum1 > 10000:
        #     return number-1
        # number += 1


print(my_sum2())

2.作用域
変数が使用できる範囲は、この変数の役割ドメイン(関数とクラスが変数に影響を与える役割ドメイン)グローバル変数です.宣言からファイルの終了まで、ローカル変数:関数(クラス)で宣言された変数を使用できます.役割ドメインは宣言の開始から関数の終了までです
2.1.グローバル変数
a = 10  #     

for x in range(10):
    b = 100  #     
    print(a)

print('==', b)
def func2():
    print(b)
func2()

2.2.ローカル変数
def func3():
    aaa = 100  #     ,      
    print(aaa)
func3()
# print(aaa)  #   :NameError

2.3.globalとnonlocal
global:関数でグローバル変数の個数を宣言または変更する:global変数名変数名=値
abc = 'abc'  #     
bcd = 'bcd'
def func4():
    abc = 'aaa'  #          ,               ,            ,
    print(abc)

    global bcd  #   bcd       
    bcd= 200
    print(bcd)
func4()
print(abc)
print(bcd)

#   :      ,           
count = 0
def func_():
    global count
    count += 1
    print('aaa')

func_()
func_()
func_()
print(count)

nonlocal:関数で関数を宣言する場合にのみ使用できます.
def func_11():
    a_11 = 10
    print('  ', a_11)

    # python          
    def func_12():
        nonlocal a_11  #      ,        
        a_11 = 100
        print('  ', a_11)
        print('    ')

    func_12()
    print('  ', a_11)

func_11()

3.匿名関数
匿名関数:別の簡単な方法で宣言
匿名関数の宣言:関数名=lambdaパラメータリスト:戻り値-->結果は関数変数
Lambda:匿名関数を宣言するキーワード
#        
def my_sum1(x, y):
    return x+y

print(my_sum1(10, 20))

#     
my_sum2 = lambda x,y:x+y
print(my_sum2(1, 2))

#
funcs = []
for i in range(5):
    funcs.append(lambda  x: x*i)

"""
funcs = [lambda  x: x*i, lambda  x: x*i, lambda  x: x*i, lambda  x: x*i, lambda  x: x*i]
         ,            
"""
print(i)
print(funcs[1])
print(funcs[2](2))
print(funcs[3])
print(funcs[4](2))

4.変数として関数
関数を宣言することは、変数を宣言することです.関数名は変数として使用できます.タイプは、functionは印刷することができて、値を割り当てることができて、タイプを見ることができて、関数のパラメータとすることができて、関数の戻り値とすることができます
#    func1        
def func1(a):
    print(a)
    return 10

print(func1, type(func1))

#    func1    a,    a      
a = func1
b = func1(10) + 100
a('aaa')

#   func1       
functions = [func1, func1(10)]
functions[0]('bbb')

4.1.関数をパラメータとして使用
def my_sum(*numbers):
    sum1 = 0
    for item in numbers:
        sum1 += item
    return sum1

def my_mul(*numbers):
    sum1 = 1
    for item in numbers:
        sum1 *= item
    return sum1

def operation(method, a, b):
    """
    method = my_sum
    numbers = (1, 2, 3)

    :return my_sum((1, 2, 3))
    """
    return method(a, b)

#  1+2  
result1 = operation(my_sum, 1, 2)
#  1*2  
result2 = operation(my_mul, 1, 2)
#   1    2
result3 = operation(lambda x, y: x > y, 1, 2)
#           
result4 = operation(lambda x, y: x if x > y else y, 1, 2)

print(result1, result2, result3, result4)

4.2.pythonの3つの演算子
値1 if式else値2-->式がTrueであるかどうかを判断し、式全体の結果が「値1」であり、そうでない場合は「値2」である
a = 1 if 1 < 2 else 2
print(a)

4.3.関数を関数の戻り値として使用
#          (+,-,*,),         
# + -->     
# - -->     
# ....
func_a = lambda x, y: x + y
def func_b(x, y):
    return x + y
def get_method(char):
    if char == '+':
        # return func_a
        # return func_b
        return lambda x, y: x + y
    elif char == '-':
        return lambda x, y: x - y
    elif char == '*':
        return lambda x, y: x * y
    elif char == '>':
        return lambda x, y: x > y
    elif char == '')(10, 20))
print(get_method('%')(10, 20))


5.再帰関数
5.1.再帰とは
再帰関数かいきかんすう:関数の関数ボディで関数自体を呼び出すかんすのかんすうたいで呼び出す
理論的には循環できることは、再帰的にもできる.
再帰的な要件:関数呼び出しを必要としないプロセスは、スタックを押すプロセスです(関数を呼び出すたびに、システムはメモリスペースを割り当て、関数の宣言変数やパラメータなどを格納します.この内に関数呼び出しが終了すると自動的に破棄されます).
#     
def fun1():
    print('===')
    fun1()

5.2.再帰関数の書き方
a.探臨界値(飛び出しサイクル-->return)b.探関係:現在の関数に対応する機能が実現されたと仮定し、f(n)-f(n-1)の関係を見つけるc.f(n-1)と前(b)の関係を用いてf(n)の機能を実現する
#          :1+2+3+...+N
def my_sum1(n):
    sum1 = 0
    for x in range(1, n + 1):
        sum1 += x
    return sum1
print(my_sum1(3))

#     
def my_sum2(n):
    # 1.    
    if n == 1:
        return 1
    # 2. my_sum2(n) my_sum2(n-1)   
    """
    my_sum2(n):1+2+...+(n-1)+n
    my_sum2(n-1):1+2+...+(n-1)
      :my_sum2(n) = my_sum2(n-1) + n
    """
    #   my_sum2(n-1)   my_sum2(n)   
    return my_sum2(n-1) + n
print(my_sum2(3))
"""
my_sum2(3)
my_sum2(3)   n = 3   return my_sum2(2)+3
my_sum2(2)   n = 2   return my_sum2(1)+2
my_sum2(1)   n = 1   return 1
"""

#     2*4*6*...*n(n   )
def mul(n):
    # 1.    
    if n % 2:
        print('    ')
        return None
    if n == 2:
        return 2
    # 2.   
    return mul(n-2)*n
print(mul(6))

def my_mul(n):
    if n == 1:
        return 2
    return my_mul(n-1)*(2*n)

print(my_mul(3))

"""
n = 3
***
**
*
"""
def print_(n):
    if n == 1:
        print('*')
        return
    print('*'*n)
    print_(n - 1)


print_(5)

def print_str(n):
    if n == 1:
        print('*')
    else:
        print_str(n-1)
        print('*'*n)

print_str(3)