python基础:嵌套函数、nonlocal、LFGB、类、类属性和方法、__del__、__call__

 一.嵌套函数示例代码

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’是所有类的抽象                   

五.类的属性和方法示例代码

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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值