Python基础知识(7)
嵌套函数
1.封装——数据隐藏,外部无法访问嵌套函数
2.嵌套函数可以让我们在函数中避免重复代码
3.闭包
nonlocal、global关键词
内层函数使用外部函数的局部变量时需要用nonlocal来声明
函数使用全局变量时需要使用global来声明
a = 100 #全局变量
def outer():
b = 200
def inner():
nonlocal b
print('inner b:', b)
b = 20000
global a
a = 10000
inner()
print('outer b:{}'.format(b))
outer()
print(a)
输出:
inner b: 200
outer b:20000
10000
LEGB规则
python在查找名称时,按照函数内部—嵌套函数—全局变量—python为自己保留的特殊名称
类
类:
类将行为和状态打包在一起
如果把对象比作是饼干,类就是制造饼干的模具
类名必须符合‘标识符’原则,首字母大写,多个单词使用驼峰原则
属性用来描述数据,方法用来描述这些数据相关的操作
构造函数 init( )
要点一、名称固定,必须为__init__()
要点二、第一个参数必须为self。self指的是刚刚创建好的实例对象
要点三、构造函数通常用来初始化实例对象的实例属性
通过类名()来调用构造函数,调用后,将创建好的对象返回给相应的变量
class Student:
company = '尚学堂'
count = 0 #类属性
def __init__(self, name, score):
self.name = name #实例属性
self.score = score
Student.count += 1
def say_score(self): #实例方法
print('{}的成绩为:{}'.format(self.name, self.score))
s1 = Student('高琦', 80) #s1是实例对象,直接调用__init__函数
s1.say_score()
s2 = Student('张三',80)
s3 = Student('李四',60)
print('一共有{}个学生的成绩'.format(Student.count))
输出为:
高琦的成绩为:80
一共有3个学生的成绩
上述代码的运行逻辑图:
实例属性
实例属性:从属于实例对象的属性
self.实例属性名 来调用
创建实例对象后,通过实例对象访问
obj01 = 类名() #创建对象,调用__init__初始化属性
obj01.实例属性名 = 值 #可以给已有属性赋值,也可以新加属性并赋值
类对象、类属性、类方法
类也可以作为对象
类方法通过装饰器 @classmethod来定义
格式为:
@classmethod
def 类方法名(形参列表):
函数体
__call__方法
定义了call方法的对象,称之为可调用对象,即该对象一样可以被调用。
class SalaryAccount:
def __call__(self, salary):
yearsalary = salary*12
daysalary = salary//22.5
return dict(yearsalary=yearsalary, daysalary=daysalary)
s = SalaryAccount()
print(s(30000))
输出为:
{'yearsalary': 360000, 'daysalary': 1333.0}