python学习日记(十)

挤出时间来学了两天,这几天真的是忙死了,越到年底越能体会到时间的珍贵,唯一开心的是双十二抢到衣服了

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
>>> 

猜你喜欢

转载自blog.csdn.net/Yelzagubei/article/details/84970612