首页 > 其他分享 >2024-06-06 闭包、常用函、类和实例

2024-06-06 闭包、常用函、类和实例

时间:2024-06-10 18:02:01浏览次数:21  
标签:闭包 __ play 06 self 2024 Student print def

一、闭包

1.定义

闭包是一个函数内部定义的内部函数,且可以访问外部函数的变量。常用与数据隐藏和信息封装。

def hello():
    username = '小小奇'
    def voi():                  //内部函数变量
        return username
    return voi

2.数据隐藏

将变量封装在内部函数中,防止外部访问和修改,实现数据私有化。

def hello():
    username = '小小奇'
    def voi():                  
        return username
    return voi

word = hello()          
print(word())          

用闭包操作实现,username为局部变量,私有属性用户无法更改,只能获取。

3.保持状态

保存函数当前状态,可以重复使用,但占用内存。

def hello(username):
    def voi(stu):                  
        return username+stu
    return voi

word1 = hello('小小奇')  
word2 = hello ('派大星')        
print(word1('吃饭'))                 //小小奇吃饭
print(word1('喝水'))                   小小奇喝水
print(word2('喝水'))                   派大星喝水

调用word1期间,所有username都是小小奇状态保持不变,调用word2期间,所有username都是派大星保持不变,存在内存中。

3.添加功能

装饰器

4.变量名隔离

同一文件下,不同内部函数可以给相同变量名取不同值,相互不影响。

def hello():
    username = '小小奇'
    def voi():                  
        return username
    return voi

def word():
    username = '派大星'
    def voi():                  
        return username
    return voi

二、常用函数

 1.sorted() 排序

lists = [2,5,3,6,1,4]
print(sorted (lists))                 //[1,2,3,4,5,6]
print(sorted (lists,reverse=True))    //[6,5,4,3,2,1]

2.filter() 过滤

def get_data(x):
    return x%2==0          //布尔型数据
print(list(filter (get_data,range(1,101))))

3.reduce()  累积操作

from functools import reduce

reduce(函数, 操作对象(可选初始值)) 

def get_data(x,y):          
    return x+y         
print(list(reduce (get_data,range(1,101))))    //累加值

4. map() 队列

map(函数, 操作对象)    将函数应用于每一个操作对象 

def get_data(x):         
    return x**3      //x的3次方
print(list(map(get_data,[1,2,3])))     //[1,8,27]

5.reversed() 反转顺序

lists = [1,2,3,4,5]
print(list(reversed(lists)))      //[5,4,3,2,1]

6.lambda 匿名函数

get_data = lambda x:x**3
print(get_data(3))           
product = reduce(lambda x, y: x + y, range(1,101))
print(product)  
numbers = [1, 2, 3]
product = map(lambda x: x**3, numbers)
print(list(product))      

 三、类和实例

1.类的定义

class Student(object):

2.类的属性 

没有继承其他类的时候object可以省略

class Student(object):             //Studunt类 
      name = '小小奇'               //类属性user
      def __init__(self,play):     //构造函数 
          self.play = play         //实例属性play


stu1 = Student('吃饭')             //类的实例化
stu2 = Student('喝水')             //实例stu与self绑定

print(stu1.name,stu1.play)          //小小奇 吃饭
print(stu2.name,stu2.play)          //小小奇 喝水
print(Student.name)                 //小小奇

类只能调用类属性,实例可以调用实例和类属性

1.查看属性和方法

 dir()
my_list = [1, 2, 3]
print(dir(my_list))         //查看my_list的所有属性和方法

2.获取/设置/判断属性 

getattr/setattr/hasattr
class Animal:   
    def run(self):
        print('runing')  
                  
    def __init__(self):
          self.name = '狗'   
          self.age = '2' 

class Dog(Animal):               
      pass
dog = Dog()
print(getattr(dog,'name'))            //获取name属性值
setattr(dog,'age','3')                //设置age属性值为3
print(getattr(dog,'age')) 
print(hasattr(dog,'name'))            //判断是否拥有name属性
print(getattr(dog,'area','beijing'))  //如果获取不到area属性值,返回beijing

3.方法

1.实例方法

构造方法 __init__

class Student(object):
    name = '小小奇'
    def __init__(self,play):
        self.play = play
    
    def say(self):                         //实例方法
        print('{}要适量'.format(self.play))   

stu1 = Student('吃饭')
stu2 = Student('喝水')

stu1.say()           //吃饭 要适量
stu2.say()           //喝水 要适量

2.类方法

实例可调用 :stu1.say()

class Student(object):
    name = '小小奇'
    @classmethod         
    def say(cls):          //cls是类本身
        print('吃饭')   

Student.say()

3.静态方法

实例可调用 :stu1.say()

class Student(object):
    name = '小小奇'
    @staticmethod
    def say():            //没有参数
        print('吃饭')   

Student.say()             //吃饭

4.封装

1.修改属性值

stu1 = Student('吃饭')
print(stu1.play)

stu1.play = '跳舞'

2私有属性

类的内部函数可以调用,外部无法直接访问,无法继承。

class Student(object):
    name = '小小奇'
    def __init__(self,play):
        self.__play = play
        self.__say =say
1.调用

此时外部调用名被更改为Student.__play,所以用__play无法调用,更改变量名仍可以调用,所以并不是真正的私有。

class Student(object):
    name = '小小奇'
    def __init__(self,play):
        self.__play = play
        self.__say =say

stu = Student('吃饭')
print(stu.Student__play)         //更改变量名调用
2.更改私有属性值
class Student(object):
    name = '小小奇'
    def __init__(self,play):
        self.__play = play
        self.__say =say

stu = Student('吃饭')
stu._Student__play = '喝水'         //更改私有属性变量值
print(stu.Student__play)  

5.继承和多态

1.继承

class Animal:                     //父类
      def run(self):
          print('runing')
      
      def __init__(self,name):
          self.__name = name      //私有属性,子类无法访问和继承

class Dog(Animal):                //Dog类继承自Animal类
      pass
 
dog = Dog()                  
dog.run() 

2.多重继承 

class Animal:                     
    @staticmethod
    def cs():
        return '胎生'

class Run:                      
    @staticmethod
    def run():
        return '能跑'

class Dog(Animal, Run):            //继承了Animal类和Run类
    def ms(self):
        print('狗是{}并且{}'.format(self.cs(), self.run()))

dog = Dog()
dog.ms()

3.多态

子类方法与父类相同时,调用子类方法,覆盖父类方法。

函数不变,通过直接添加子类来增加内容,类中方法不变。

class Animal:                    //父类
      def run(self):
          print('runing')
      
class Dog(Animal):               //Dog类继承自Animal类
      def run(self):              
          print('Dog is runing')

class Cat(Animal):               //Cat类继承自Animal类
      def run(self):               
          print('Cat is runing')

def runclass(obj):                
    obj.run()

runclass(Animal())               //runing
runclass(Dog())                  //Dog is runing
runclass(Cat())                  //Cat is runing

 

6.实例判断

1.type 数据类型

print(type(5))            //<class 'int'>

2.isinstance() 继承关系 

class Animal:                     
      def run(self):
          print('runing') 

class Dog(Animal):                
      pass
 
dog = Dog()                  
print(isinstance(dog,Dog))        //判断dog类是否属于Dog类   True
print(isinstance(dog,Animal)) 

标签:闭包,__,play,06,self,2024,Student,print,def
From: https://blog.csdn.net/m0_45266493/article/details/139567870

相关文章

  • 2024最新最全【大模型技术AGI】入门到精通,看完这一篇就够了!
    学习大模型(例如GPT-3、BERT等)需要一定的数学和编程基础,以及对人工智能、机器学习、自然语言处理等领域的了解。以下是一个学习大模型的基本路线:基础知识储备:数学基础:掌握线性代数、概率论与数理统计、微积分等数学知识。编程基础:熟悉至少一种编程语言,如Python,因为大多......
  • 2024 年 Web 安全最详细学习路线指南,从入门到入职(含书籍、工具包)【建议收藏】
    第一个方向:安全研发你可以把网络安全理解成电商行业、教育行业等其他行业一样,每个行业都有自己的软件研发,网络安全作为一个行业也不例外,不同的是这个行业的研发就是开发与网络安全业务相关的软件。既然如此,那其他行业通用的岗位在安全行业也是存在的,前端、后端、大数据分......
  • NOIP2024模拟11:忠于自我
    NOIP2024模拟11:忠于自我T1一句话题意:有若干个容量为\(L\)的包,从左往右装物品,当前包还能装则装,否则必须重开一个包装进去,对于\(\foralli\in[1,n]\),问想要以此装入第\(i\simn\)个物品需要开多少个包?结论题:倒着装和正着装所需要的包数是一样的.感性理解:在"......
  • NOIP2024模拟12:孤帆远影
    NOIP2024模拟12:孤帆远影听了机房同学的讨论,于是T1死磕冒泡和逆序对做法。最后只得了40pts。思想对了,但不是自己的做法。还是要坚持自己想,坚持自己可以想出来,不要被任何人带偏。T1一句话题意:将一个已知序列通过不断“交换相邻位置”的操作调整成不严格单峰状态,问最小的操......
  • 如何管理文件 2024年6月10日
    如何管理文件 2024年6月10日      一、简介:   本文的文件是指人在日常工作、生活、娱乐、交流过程中形成的各种形式的信息记录。信息记录的集合构成了文件。有的文件可以用MicrosoftOffice办公软件打开,有的文件可以被MXPlayer、IINA播放器、完美......
  • 【四种语言一网打尽(C\C++\Python\Golang)】L1-006 连续因子
    L1-006连续因子一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3×5×6×7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。输入格式:输入在一行中给出一个正整数N(1<N<2^31)。输......
  • 2024.06.09 与显哥在办公室Mock Interview复盘
    我已刷题3月,现正准备着下周一Weride的电面;今日回办公室与显哥进行mockinterview,一起做题LC30。耗时50分钟而我没有做出,结束后与显哥复盘,发现以下问题:没有充分理解题意没有进行时空复杂度分析,事先确定求解的复杂度没有打草稿后再写代码在对代码进行解释时,不足够high-level;容......
  • idea Webstorm Pycharm2024最新版 永久使用教程 附激活码亲测可用2099年
    IDEA2024的激活与安装(全网最靠谱,最快捷的方式)大家都在为使用IDEA需要收费而烦恼。IDEA,即IntelliJIDEA,是一款强大的集成开发环境,广泛应用于Java开发。但是IDEA是付费的,免费版功能有太少,怎么才能既免费,又能使用上正式版呢!当然还是激活啦(不是正版用不起,而是‘激活’更有性价比)......
  • 科学使用Typora 1.8.10.0,2024新版,保姆级手把手教程,破解困扰
    写一篇如何在此版本解除付费的文章,希望能帮助更多跟我一样的学生党或者有需要的人,有能力的各位还是希望大家尊重一下知识付费。非常简单,大家跟着一步步做就行了。下载Typora官网链接:Typora官方中文站(typoraio.cn)首先是安装后的激活到Typora\resources\page-dist\stati......
  • 2024年华为OD机试真题-快递员的烦恼-C++-OD统一考试(C卷D卷)
     2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:快递公司每日早晨,给每位快递员推送需要送到客户手中的快递以及路线信息,快递员自己又查找了一些客户与客户之间的路线距离信息,请你依据这些信息,给快递员设计一条最短路径,告诉他最短路......