python基础入门第七天(嵌套函数、LEGB原则、面向对象编程、类)

嵌套函数

嵌套函数的应用

在这里插入图片描述
代码实现

#测试嵌套函数(内部函数)的定义
def outer():
    print("outer running")
    def inner():
        print("inner running")
    inner()
outer()
#结果
outer running
inner running
#避免重复代码
def printName(isChinese,name,familyName):
    def inner_print(a,b):
        print("{0} {1}".format(a,b))
    if isChinese:
        inner_print(familyName,name)
    else:
        inner_print(name,familyName)
printName(True,"小七","高")
print(False,"Jane","Trump")
#结果
高 小七
Jane Trump

nonlcoal关键字

在这里插入图片描述
代码实现

#测试nonlocal、global关键字的用法
a=100
def outer():
    b=10
    def inner():
        nonlocal b   #声明外部函数的局部变量
        print("inner b:",b)
        b=20

        global  a   #声明全局变量
        a=1000
    inner()
    print("outer b;",b)

outer()
print("a:",a)
#结果
inner b: 10
outer b; 20
a: 1000

LEGB规则

在这里插入图片描述
代码实现

#测试LEGB
str="global str"     #如果嵌套函数的外层函数找不到,就在模块的全局变量找
def outer():
    str='outer'      #如果在内层函数找不到,就在嵌套函数的外层函数寻找
    def inner():
        str="inner"  #先在函数或者类的方法内部寻找
        print(str)
    inner()

outer()
#结果
inner  #在嵌套函数的内层函数中寻找到了,就不会继续寻找
outer  #如果在内层函数找不到,就在嵌套函数的外层函数寻找
global str  ##如果嵌套函数的外层函数找不到,就在模块的全局变量找

面向对象编程

面向过程与面向对象的区别

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

类的定义

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

代码演示

class Student:   #类名一般首字母大写,多个单词采用驼峰原则
    def __init__(self,name,score):  #构造方法时,self必须位于第一个参数
        self.name=name       #实例属性
        self.score=score
    def say_score(self):         #实例方法
        print("{0}的分数是:{1}".format(self.name,self.score))
s1=Student("li",100)      #s1是实例对象,自动调用_init_()方法
s1.say_score()

#结果
li的分数是:100

构造_init_()函数

在这里插入图片描述
在这里插入图片描述

实例属性

在这里插入图片描述

实例方法

在这里插入图片描述
在这里插入图片描述

函数和方法的区别

在这里插入图片描述

相关的其他操作

在这里插入图片描述

类对象

在这里插入图片描述

class Student:   #类名一般首字母大写,多个单词采用驼峰原则
    def __init__(self,name,score):
        self.name=name
        self.score=score
    def say_score(self):         
        print("{0}的分数是:{1}".format(self.name,self.score))

print(type(Student))   #显示类对象的类型
print(id(Student))

stu2=Student
s1=Student("li",100)
s2=stu2("ji",80)
s1.say_score()
s2.say_score()
#结果
<class 'type'>  
1927439171384
li的分数是:100
ji的分数是:80

类属性

在这里插入图片描述

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("我的公司是:",Student.company)
        print(self.name,"的分数是:",self.score)
s1=Student("li",80)
s1.say_score()
print("一共创建{0}个Student对象".format(Student.count))

#结果
我的公司是: SXT
li 的分数是: 80
一共创建1个Student对象

在这里插入图片描述

类方法

在这里插入图片描述

静态方法

在这里插入图片描述

#测试类方法和静态方法
class Student:   #类名一般首字母大写,多个单词采用驼峰原则
    company="SXT"  #类属性
    @classmethod     #类方法
    def printCompany(cls):
        print(cls.company)

Student.printCompany()


class Student2:
    company = "SXT"  # 类属性
    @staticmethod
    def add(a,b):   #静态方法
        print('{0}+{1}={2}'.format(a,b,(a+b)))
        return a+b

Student2.add(2,4)

#结果
SXT
2+4=6

del()方法(析构函数)

在这里插入图片描述

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

p1=Person()
p2=Person()
del p2
print("程序结束")
#结果
销毁对象<__main__.Person object at 0x00000212AA376358>  #销毁p2
程序结束
销毁对象<__main__.Person object at 0x00000212AA34E048>  #销毁p1

_call_方法和可调用对象

#测试可调用方法_call_()
class SalaryAccount:
    '''工资计算类'''
    def __call__(self, salary):
        yearSalary=salary*12
        daySalary=salary//22.5
        hourSalary=daySalary//6

        return dict(yearSalary=yearSalary,MonthSalary=salary,daySalary=daySalary,hourSalary=hourSalary)
s=SalaryAccount()
print(s(3000))

#结果
{'yearSalary': 36000, 'MonthSalary': 3000, 'daySalary': 133.0, 'hourSalary': 22.0}
发布了12 篇原创文章 · 获赞 0 · 访问量 158
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览