|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 向西而笑 于 2017-7-22 17:19 编辑
这两节课时尤其是那个闭包实在不好理解 ,@醉酒青牛 写的笔记给了我很大的帮助,非常感谢
------------------------------------------------------------------------------------------------------
Python只有函数没有过程Python函数就算如果没有用return返回某个值,它还是有返回值的,返回值是none,例如:
- >>> def cul():
- 1+2
- >>> cul()
- >>> type(cul)
- <class 'function'>
- >>> print(cul())
- None
复制代码
函数可以返回多个值利用列表元组可以返回多个值,例如:
- >>> def xxx():
- return 1,4.14,'哈哈'
-
- >>> xxx()
- (1, 4.14, '哈哈')
复制代码
全局变量和局部变量局部变量就是函数内部定义的变量,出了这个函数外就不能调用,它的作用域是这个函数内部;全局变量就是作用域是整个代码段。例如:
- >>> def discount(price,rate):
- print('在函数体内访问全局变量old_price的值',old_price)
- new_price = price*rate
- print('这里输出局部变量new_price的值',new_price)
-
-
- >>> old_price = 100
- >>> discount_rate = 0.7
- >>> discount(old_price,discount_rate)
- 在函数体内访问全局变量old_price的值 100
- 这里输出局部变量new_price的值 70.0
- >>> print('这里试图访问函数内部变量',new_price)
- Traceback (most recent call last):
- File "<pyshell#6>", line 1, in <module>
- print('这里试图访问函数内部变量',new_price)
- NameError: name 'new_price' is not defined
复制代码
当要在函数体内改变全局变量时,会生成一个名字一样的局部变量,从而达到保护全局变量的作用。如:
- >>> def modify():
- num = 50
- print('输出全局变量letter的值',letter)
- print('输出函数体内重新修改后的num的值',num)
-
-
- >>> num = 100
- >>> letter = 'A'
- >>> modify()
- 输出全局变量letter的值 A
- 输出函数体内重新修改后的num的值 50
- >>> num
- 100
复制代码
global关键字:要想在函数体内修改全局变量,在该变量前加个global表明这个变量是全局变量,如:
- >>> def myfun():
- num = 100
- print(num)
- >>> num
- Traceback (most recent call last):
- File "<pyshell#4>", line 1, in <module>
- num
- NameError: name 'num' is not defined
- >>> num = 0
- >>> num
- 0
- >>> def myfun():
- global num
- num = 100
- print(num)
-
- >>> num = 0
- >>> myfun()
- 100
- >>> num
- 100
复制代码
内嵌函数
内嵌函数也可以叫内部函数,就是函数中的函数。内部函数作用域都在外部函数作用域之内,出了外部函数就不能调用内部函数
- >>> def fun1():
- print('fun1正在被调用')
- def fun2():
- print('fun2正在被调用')
- fun2()
- >>> fun1()
- fun1正在被调用
- fun2正在被调用
- >>> fun2()
- Traceback (most recent call last):
- File "<pyshell#10>", line 1, in <module>
- fun2()
- NameError: name 'fun2' is not defined
复制代码
闭包(closure):如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。
例子1:
- def fun1():
- a = 2
- def fun2(b):
- return (a*b)
- return fun2
- >>> fun1()(5)
- 10
- >>> x = fun1()
- >>> x(5)
- 10
复制代码
例子2
- def fun1(a):
- def fun2(b):
- return (a*b)
- return fun2:
- >>> fun1(2)(5)
- 10
- >>> x = fun1(4)
- >>> x(5)
- 20
复制代码
nonlocal:如果想要在内部函数修改外部函数内的变量就要用到nonlocal关键字,如:
- >>> def fun1():
- num = 0
- print('fun1中的值:',num)
- def fun2():
- nonlocal num
- num = 100
- print('fun2中的值:',num)
- fun2()
- print('调用fun2后的值:',num)
-
-
- >>> fun1()
- fun1中的值: 0
- fun2中的值: 100
- 调用fun2后的值: 100
复制代码
|
评分
-
查看全部评分
|