嵌套函数
在函数内部定义的函数。
一般在什么情况下使用嵌套函数?
1.封装-数据隐藏
外部无法访问“嵌套函数”。
2.贯彻DRY(Don’t Repeat Yourself)原则
嵌套函数,可以让我们在函数内部避免重复代码。
3.闭包
嵌套函数实例一
#测试嵌套函数(内部函数)的定义
def outer():
print("outer running")
def inner01():
print("inner01 running")
inner01()#只为outer()函数服务
outer()
inner01()#无法调用
嵌套函数实例二
def printName(isChinese,name,familyName):
def inner_print(a,b):
print("{0} {1}".format(a,b))
if isChinese:
inner_print(familyName,name)#只为printName()函数服务
else:
inner_print(name,familyName)
printName(True,"一一","张")
printName(False,"Ivanka","Trump")
nonlocal 关键字
nonlocal 用来声明外层的局部变量
global 用来声明全局变量
声明后即可使用(赋新值等)
#测试nonlocal、global关键字的用法
a=100
def outer():
b=10
def inner():
nonlocal b#声明外部函数的局部变量(声明后即可使用(赋新值等))
print("inner b:",b)
global a#声明全局变量(声明后即可使用(赋新值等))
a=1000
b=20
inner()
print("outer b:",b)
outer()
print("a:",a)
LEGB规则
Python在查找“名称”时,是按照LEGB规则查找的:Local->Enclosed->Global->Built in。
Local 指的就是函数或者类的方法内部
Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global 指的是模块中的全局变量
Built in 指的是Python为自己保留的特殊名称
下面的例子进行了优先级进行排序(1、2、3、4)
#测试LEGB
str()#4 Built in
str="global str"#3 Global
def outer():
str="outer"#2 Enclosed
def inner():
str="inner"#1 Local
print(str)
inner()
outer()
类的定义
定义类的语法格式如下:
class 类名:
类体
要点:
1.类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。
2.类体中我们可以定义属性和方法。
3.属性用来描述数据,方法(即函数)用来描述这些数据相关的操作。
class Student:
def __init__(self,name,score):#self必须位于第一个参数
self.name=name
self.score=score
def say_score(self):#self必须位于第一个参数
print("{0}的分数是:{1}".format(self.name,self.score))
s1=Student("meidi",22)#通过类名调用构造函数
s1.say_score()
构造函数__init__()
一个Python对象包含如下部分:
1.id(identity识别码)
2.type(对象类型)
3.value(对象的值)
(1)属性(attribute)
(2)方法(method)
创建对象,我们需要定义构造函数__init__()方法。构造方法用于执行“实例对象的初始化工作”,即对象创建后,初始化当前对象的相关属性,无返回值。
__init__()的要点如下:
1.名称固定,必须为__init()__
2.第一个参数固定,必须为:self。self指的就是刚刚创建好的实例对象。
3.构造函数通常用来初始化实例对象的实例属性,如下代码就是初始化实例属性:name和score。
4.通过“类名(参数列表)”来调用构造函数。调用后,将创建好的对象返回给相应的变量。
5.__init__()方法:初始化创建好的对象,初始化指的是:给实例属性赋值。
6.__new__()方法:用于创建对象,但我们一般无需定义该方法。