一.嵌套函数示例代码
def printName(ischinese,firstName,lastName):
def inner(a,b):#封装和数据隐藏,在函数内部避免重复代码。
print(a,b)
if ischinese:
inner(firstName,lastName)
else:
inner(lastName,firstName)
printName(True,"王","小一")#输出:王 小一
printName(False,"Evencal","Trump")#输出:Trump Evencal
二.nonlocal声明示例代码
a = 10
def outer():
b = 20
def inner():
nonlocal b #声明外部函数的局部变量
print("inner b:",b) # 输出:inner b: 20
b = 2
global a #声明全局变量
a = 1
inner()
print("outer b:", b) # 输出:outer b: 2
outer()
print("a:", a) # 输出:a: 1
三.LEGB优先规则示例代码
print(type(str)) # B 输出:<class 'type'>
str = 'globle_str' # G
def outer():
Str = 'outer_str' # E
def inner():
str = 'inner_str' # L
print(str) # 输出:inner_str
inner()
outer()
四.类示例代码及其内存原理图
class Student: # 定义了类。若类好比是设计图纸,对象则是落地生产实体。
school = 'UFO' # 类属性
def __init__(self, name, score): # self(习惯)必须放第一个,作用相当于java的this
self.name = name # 实例类属性
self.score = score
def print_score(self): # self(习惯名称)必须放第一个
print("{0}成绩:{1}分".format(self.name, self.score))#输出bluski成绩:60分
stu = Student('bluski', 60) # 通过类名创建了一个对象。
stu.print_score()
Student.print_score(stu) # 此行是解释器翻译上行代码的实际过程,本质和上行代码一样
stu2 = Student('ski', 61)
print(id(Student), id(stu), id(stu2)) # 输出:31670427304 31670074776 31670474552
print(type(Student), type(stu)) # 输出:<class 'type'> ‘type’是所有类的抽象
![](https://i-blog.csdnimg.cn/blog_migrate/424a40b88932dc91a298dd94f1500d04.jpeg)
五.类的属性和方法示例代码
class Animal:
country = "CH" # 类属性
def __init__(self, name, age): # __init__初始化实例对象属性
self.name = name # 实例属性
self.age = age # 实例属性
def print_animal(self): # 实例方法
print("宠物名:{0},寿命:{1}".format(self.name, self.age))
@classmethod
def print_country(cls): # 类方法,是从属于“类对象”的方法。
print(cls.country)
@staticmethod # 静态方法,和在模块中定义普通函数没有区别.
def add(a, b):
return a+b
ani = Animal('ski','15') # 创建对象,背后用__new()__
ani.print_animal() # 输出:宠物名:ski,寿命:15
ani.print_country() # 输出:CH
print(ani.add(1,2)) # 输出:3
六.__del__:析构函数代码示例
class Person:
def __del__(self): # del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。
print("销毁对象{0}".format(self))
p1 = Person()
p2 = Person()
del p2 # 输出:销毁对象<__main__.Person object at 0x00000263116C43C8>
print("程序结束") # 输出:程序结束 + 销毁对象<__main__.Person object at 0x0011>
七.__call__函数示例代码
class SalaryAccount:
def __call__(self, salary):
print("算工资啦···")
year_salary = salary*12
day_salary = salary//22.5
hour_salary = day_salary//8
return dict(year_salary=year_salary, month_salary=salary,
day_salary=day_salary,hour_salary=hour_salary)
s = SalaryAccount()
print(s(3000))
# 输出:算工资啦···
# 输出:{'year_salary': 36000, 'month_salary': 3000,
# 'day_salary': 133.0, 'hour_salary': 16.0}