文章目录
嵌套函数/内部函数
在函数内部定义的函数
nonlocal关键字
nonlocal 用来声明外层的局部变量
global 用来声明全局变量
#测试nonloacl/global关键字的用法
a=100
def outer():
b=10
def inner():
nonlocal b #声明外部函数的局部变量
print("inner b:",b)
b=20
global a #声明全局变量
a=1000
inner()
print("outer b:",b)
outer()
print("a:",a)
LEGB规则
Python在查找“名称”时,是按照LEGB规则查找的:Local–>Enclosed–>Global–>Build in
Local 指的是函数或者类的方法内部
Enclosed 值得是嵌套函数(一个函数包裹另一个函数,闭包)
Global 指的是模块中的全局变量
Build in 指的是Python为自己保留的特殊名称
如果某个name映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域(enclosed)进行搜索,若也没有找到,python就会到全局(global)命名空间内进行查找,最后会在内建(build in)命名空间搜索(如果一个名称在所有命名空间中都没有找到,就会产生一个NameError)。
面向对象编程
面向对象(object oriented programming,OOP)编程的思想主要是针对大型软件设计而来,面向对象编程使程序的扩展性更强,可读性更好,使得编程可以像搭积木一样简单。
面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率。
Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能,例如:继承/多态/封装等。
Python中,一切皆对象。
注:Python支持面向过程/面向对象/函数式编程等多种编程范式。
面向对象和面向过程
- 都是解决问题的思维方式,都是代码组织的方式
- 解决简单问题可以使用面向过程
- 解决复杂问题宏观上使用面向对象把握,微观处理上仍然是面向过程。
类
类将行为和状态打包在一起,我们通过类定义数据类型的属性(数据)和方法(行为)。
如果把对象比做一个饼干,类就是制造这个饼干的模具
对象是类的具体实体,一般称为类的实例。从一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属性值(不共享状态),即:方法代码是共享的,属性数据不共享。
类名一般首字母大写,多个单词采用驼峰原则。