代码没有报错,不明白print('z =',z)所显示代码的意义
def f(x):
def g():
x = 'abc'
print('x =',x)
def h():
z= x
print('z =',z)
x = x+1
print('x =',x)
h()
g()
print('x =',x)
return g
x = 3
z = f(x)
print('x =',x)
print('z =',z)
z()
x = 4
z = 4
x = abc
x = 4
x = 3
z = <function f..g at 0x000001C72FCD7040>(不明白这段代码的意义)
x = abc
看注释
def f(x):
def g():
x = 'abc'
print('x =',x) #打印第一个x = abc
def h():
z= x
print('z =',z) #打印第一个z = 4
x = x+1
print('x =',x) #打印第一个x = 4
h()
g()
print('x =',x) #打印第二个x = 4
return g
x = 3
z = f(x) #第一次调用函数f,会把f内的代码按流程运行一遍,同时把函数g返回赋值给z
print('x =',x) #打印x = 3,因为x只在函数内变化,不会影响函数外的值
print('z =',z) #此时,z是一个函数g,不是一个具体的值
z() #此时z代表函数g,运行,会执行函数g内的代码,也就是给x赋值abc并打印
就是输出的时候告诉你输出的值是啥,如果直接print(z)你只能看到一个值,不利于阅读,引号里面的内容会原样输出,帮助你阅读
z = <function f..g at 0x000001C72FCD7040>(不明白这段代码的意义)
这个z是 z=f(x) 运行时f(x)的返回值
而f(x)中的return 返回的函数g,所以z是g函数的引用地址
你可以理解成调用这段函数以后,数据暂时的内存地址
z = f(x),而你的f函数返回值是一个函数,
z指向这个函数的地址,调用z就相当于调用g
直接打印z,打印出的是这个函数地址
这个我之前也出过,是因为你打出的Z这一段乱七八糟的是他在本机的地址,你要把他转化成值才可以进行正常输出