pythonでのreturnの戻りと実行

7547 ワード

1印刷関数名と印刷関数の実行過程の違い
例1.1
def a():
    print(111)

print(a)  #   a       ,   a     ,a      
print(a())  #   a       ,   a      

印刷結果:
111
None
まとめ:
関数名print(a)を印刷した結果、その関数のメモリアドレスが印刷されました.
印刷関数の実行:print(a()は、その関数の実行プログラムのprintの部分を印刷し、最後にreturnの内容も印刷し、returnの関数を定義せずにNoneを印刷します.
 
例1.2
def a():
    print(111)
    return None
def b():
    return a()  #   a        ,  a      。  :111,  None

print(b)  #   b       
print(b())  #   b        ,  b      

印刷結果:
111
None
コード・プロシージャの解析は次のとおりです.
print(b)は変数b(関数)のメモリアドレスを印刷し、b関数に何の影響も与えず、b関数は実行されません.
 print( b() ) :
《1》まずb関数を実行する.b関数は本体内容を定義していないため、空に戻ります
『2』b関数の戻り値:return a()を印刷する.このときのb関数が実行されているため、return内の関数も実行されます.
《2.1》,a()を実行し,111を印刷する.
《2.2》,a()関数にはreturnの値が定義されていないため,noneをa()関数の戻り値として取り,このnone returnもb関数に与える.このときのb関数の戻り値もnoneなのでprint(b()=None
2、関数内容本体で実行する:
例2.
def a():
    print('aaaaaaaa')  #   :aaaaaaaa
def b():
    a()  #   a  

b()  #   b  

印刷結果:
aaaaaaaa
 
3、関数のreturnで実行します.
例3.
def a():
    print('aaaaaaaa')
def b():
    return a()

b()

印刷結果:
aaaaaaaa
まとめ:1つの関数が実行されると、その関数のreturn内容が実行可能なプログラムである場合、そのプログラムも正常に実行されます.ただし、この場合の戻り値の概念は、プログラムのprint部分を印刷し、関数の戻り値を返し、戻り値を定義しなければNoneを返すことです.
 
4,プリント関数名(本質はプリント変数名に対応するメモリアドレス:つまりその関数に対応するコンテンツ本体のメモリアドレス)
例4.
 
def a():
    print(111)  #   :111
print(a)  #   a       
def b():
    return a  #   a       
print(b)  #   b       

return a()の場合:今回のreturnはa()ですが、b()関数が呼び出されていないため、2つの関数のメモリアドレスが印刷されます.
 
5,関数のreturnの内容が定数と変数(実行可能な関数)の場合の関数実行問題
returnで定数の場合:b()関数の中は空です.returnのaは定数であり、メモリアドレスである.
例5.1.
def a():
    print(111)  #   :111
def b():
    return a  #   a       

b()  

returnは変数(実行可能な関数)で、b関数が実行されると、b関数の本体とreturnの中のプログラムが実行され、効果は以下の通りです.
例5.2
def a():
    print(111)
def b():
    return a()  #   a        ,  a      

b()

印刷結果:
111
 
6,伝達パラメータの高次関数の戻り値を印刷するには,a(f)がa関数を実行していることを理解しなければならない.
例6.1
def f():
    print(11111111)  #      11111111
    return None
def a(b):
    print(222222)  #      222222
    return b  #        b       

print(a(f))  #   a        ,  a      。  a        :222222,  a           f       

解析:a(f)関数を印刷するプロセス全体は、パラメータを持たないprint(a()を印刷するプロセスに相当する!!!すなわち、a(b)関数が実行され、戻り値が印刷される.
print(a(f):a関数で印刷された部分を印刷し、a関数の戻り値、すなわちprint(222222)およびprint(f)を印刷する
同じように、高次関数にパラメータを割り当てると、次のような関数も実行されます.
例6.2
def f():
    print(11111111)  #        :11111111
    return None
def a(n):
    print(222222)  #        :222222
    return f  #   f        ,  f      。    :111111 return None

b = a(f)

上記の例のb=a(f)は2つのステップに分けて理解される.
1,a(f)は、パラメータを持たないa()に相当し、a関数を実行することを意味し、a(f)はパラメータfをインポートした場合に実行する
2,b=a(f)は,a(f)関数の実行後の戻り値をbに与え,後続の変数bが呼び出す.      
転載先:https://www.cnblogs.com/xushuangwaiwai/p/10731197.html