python基础知识-第7节


1. 嵌套函数

作用:
1.封装,数据隐藏
2.贯彻DRY原则
3.

def printName(isChinese,name,familyName):
    def inner_print(a,b):
        print("{0} {1}".format(a,b))

    if isChinese:
        print("{0} {1}".format(name,familyName))
    else:
        print("{0} {1}".format(familyName,name))

printName(1,"小七","高")

2. nonlocal关键字

nonlocal 用来声明外层的局部变量
global 用来声明全局变量

#测试nonlocal/global关键字的用法
a = 100
def outer():
    b = 10

    def inner():
        nonlocal b      #声明外部函数的局部变量
        print("inner:",b)
        b = 20
        global a        #声明全局变量
        a = 1000
        
    inner()
    print("outer b:",b)

outer()

3. LEGB规则

local 指的就是函数或者类的方法内部
enclosed 指的是嵌套函数
global 指的是模块中的全局变量
bulit in 指的是Python为自己保留的特殊名称

#测试LEGB
str = "global"
def outer():
    str = "outer"
    def inner():
        str = "inner"
        print(str)

    inner()

outer()

4. 面向对象

4.1 面向过程思维

“执行者”思维,适合编写小规模程序
“怎么按照过程实现?”

4.2 面向对象思维

“设计者”思维,适合编写大规模程序
“怎么设计这个事物?”

4.3 对象的进化

数–数组–结构体–对象

4.4 类的定义,类和对象的关系

#类和对象的关系
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("高其",18)
s1.say_score()

4.5 构造函数

1.写法:init()
2.第一个参数固定必须为self,名字可以随便改,建议叫self

4.6 实例属性、实例方法

定义实例方法需要self作为第一个参数,定义函数不需要

#类和对象的关系
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("高其",18)    #通过类名()调用构造函数
s1.say_score()
s1.age = 30
s1.salary = 3000
del s1
print(s1.salary)

s2 = Student("高小二",16)
s2.say_score()   # ==Student.say_score(s2)

4.7 其他方法

dir(obj) 可以获得obj的所有属性和方法
ibj.dict 对象的属性字典
pass 空语句
isinstance(s2,Man)判断s2是不是属于Man这个类

5. 类对象、类属性、类方法

#类和对象的关系
class Student:     #类名一般首字母大写,多个单词采用驼峰原则

    company = "SXT"     #类属性
    count = 0           #类属性

    def __init__(self,name,score):
        self.name = name        #实例属性
        self.score = score
        Student.count = Student.count + 1

    def say_score(self):    #实例方法
        print("{0}的分数是:{1}".format(self.name,self.score))

stu2 = Student
s1 = Student("高琪",60)   #s1是实例对象,自动调用__init__()方法
s1.say_score()

s2 = stu2("高二琪",50)
s2 = stu2("高三琪",45)

print("一共创建{}个Student对象".format(Student.count))

类方法
@classmethod
def 类方法名(cls[,形参列表])
静态方法
@staticmethon
def 静态方法名([形参列表])
函数体

#测试类方法
class Student1:     #类名一般首字母大写,多个单词采用驼峰原则

    company = "SXT"     #类属性

    @classmethod
    def printCompany(cls):
        print(cls.company)

Student1.printCompany()

#测试静态方法
class Student2:
    company = "SXT"     #类属性

    @staticmethod
    def add(a,b):   #静态方法
        print("{0}+{1}={2}".format(a,b,(a+b)))
        return a+b

Student2.add(20,30)

6. __del__方法 析构函数和垃圾回收机制

当对象的引用计数为0时,有垃圾回收机制调用__del__方法

#析构方法
class Person:
    def __del__(self):
        print("销毁对象{0}".format(self))

p1 = Person()
p2 = Person()
del p2
print("程序结束")

6. __call__方法 和调用对象

对象可以像函数一样被调用

#测试可调用方法__call__()
class SalaryAccount:
    '''工资计算类'''

    def __call__(self,salary):
        print("算工资啦……")
        yearSalary = salary*12
        daySalary = salary//22.5        #国家规定每月平均工作天数
        hourSalary = daySalary//8

        return dict(yearSalary=yearSalary,monthSalary=salary,daySalary=daySalary,hourSalary=hourSalary)
s = SalaryAccount()
print(s(30000))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值