挤出时间来学了两天,这几天真的是忙死了,越到年底越能体会到时间的珍贵,唯一开心的是双十二抢到衣服了
1.有返回值的叫函数,没有的叫过程
如果没有使用return语句指定返回值,Python也不是什么都不返回的,Ta会返回一个None对象,所以我们说Python所有的函数都有返回值。
2.严格来说,python只有函数,没有过程
3.函数变量的作用域(变量的可见性):全局变量、局部变量
在函数里面定义的参数都是局部变量
全局变量的作用域是整个代码段
4.如果试图在函数中修改一个全局变量的值,python会自动创建一个新的局部变量代替,名字和原先的全局变量一样。
5.global关键字:将局部变量变成全局变量
在嵌套的函数中,如果希望在内部函数修改外部函数的局部变量,应该使nonlocal
6.闭包:函数式编程的重要语法形式
如果在一个内部函数里,对在外部作用域(但是不是在全局作用域)的变量进行引用,那么内部函数就被称为闭包
由于闭包的定义由内部函数而来,所以不能在外部函数外面对内部函数进行引用
>>> def funx(x):
def funy(y):
return x*y
return funy
>>> i=funx(8)
>>> i
<function funx.<locals>.funy at 0x000001F95FCD5950>
>>> type(i)
<class 'function'>
>>> i(5)
40
>>> funx(8)(5)
40
此时,funy就是一个闭包,i被定义为了函数
7.这里在funy()里修改了全局变量x,是不能的.
>>> def funx():
x=5
def funy():
x*=x
return x
return funy()
>>> funx()
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
funx()
File "<pyshell#78>", line 6, in funx
return funy()
File "<pyshell#78>", line 4, in funy
x*=x
UnboundLocalError: local variable 'x' referenced before assignment
使用nonlocal关键字可以在内嵌函数里修改外围函数的变量值
>>> def funx():
x=5
def funy():
nonlocal x
x*=x
return x
return funy()
>>> funx()
25
>>> def funx():
x=5
def funy():
nonlocal x
x*=x
return x
print('example:',x)
return funy()
>>> funx()
example: 5
25
>>>