首页 > 其他分享 >【super,迭代器,装饰器】

【super,迭代器,装饰器】

时间:2024-07-30 16:00:29浏览次数:13  
标签:__ return 函数 迭代 print super 装饰 def

super函数

  • super函数可以调用父类的方法
  • super().add()**使用子类调用父类已经被覆盖的方法
  • super(Child,obj).f()使用子类对象调用父类被覆盖的方法
class Parent:
    def say(self):
        print('parent ')
        
class Child(Parent):
    def say(self):
        print('Child')
        super().say()  # 子类调用父类已经覆盖的方法

c = Child()
c.say()
super(Child,c).say() # 子类对象调用父类已经覆盖的方法

python迭代器和生成器

迭代器

[迭代器](内置类型 — Python 3.12.4 文档)

python中的迭代器是访问迭代对象的工具

iter() 返回迭代器对象

next() 对迭代器对象进行迭代,每次迭代的不同,只能向后进行

li = [1,2,3]
li = iter(li)
print(next(li)) #1
print(next(li))# 2
print(next(li))# 3

生成器

使用关键字yield的函数

可以迭代过程逐步产生值

生成器函数可以生成一个迭代对象

def f(n):
    for i in range(n):
        yield str(i)

it1 = f(10)
li = [i for i in it1]
print(li)
it2 = f(5)
print(next(it2))
print(next(it2))
print(next(it2))

迭代类

class my_iter:
    def __init__(self,a):
        self.a = a
    def __iter__(self):
        return self
    
    def __next__(self):
        self.a -= 1
        return self.a

it = my_iter(3)
print(next(it))  # __next__的返回值
print(next(it))
print(next(it))
x = iter(it)  # __iter__的返回值
  • 迭代器表达式
    • (表达式 for 变量 in 可迭代对象 [if 条件])

python 函数式编程

  • 将函数作为参数传递
def cb():
	print('cb函数执行')
def f(fun):
    fun()
f(cb)


def cb(x):
    x *= x
    return x
def f(x,cb):
    a = cb(x)
    return a
print(f(12,cb))
# 闭包 把函数作为另一个函数的参数传入
# 内部函数调用外部函数的变量
# 绑定两个函数的执行环境
  • 函数作为返回值
def f(z):
    print(z,'  f函数执行')
    def m(x):
        print(x,'   m running')
    return m
fun = f(1)
fun(2)

内置高阶函数

map将迭代对象的每一个元素作为传入函数的参数,返回值成为新的迭代对象

filter 迭代对象满足条件的组成新的迭代对象

print([i for i in filter(lambda x:x>3,(i for i in range(6)))])
[4, 5]

max() 迭代对象最大值

min() 迭代对象最小值

sorted() 返回对迭代对象排序的结果

装饰器

  • 基本装饰
'''
装饰器函数接收函数作为参数传入
装饰器内对传入的函数进行一些逻辑的增加
对传入的函数调用
装饰器返回一个函数,在调用被装饰的函数时会调用这个函数

在装饰函数时,装饰器里的代码块会执行
'''
# def mydeco(fn):
#     fn()
#     print('装饰器被调用,返回fx')
#     def fx():
#         print('fx被调用')
#     return fx
# @mydeco
# def m():
#     print('m函数执行')    
# m()
  • 带参数的装饰器
'''
可以在使用装饰器时传入一个参数
'''

def wr(n):
    def dec(f):
        def m():
            for _ in range(n):
                f()
        return m
    return dec

@wr(4)
def fn():
    print('被装饰的函数')
fn()
  • 装饰器链
def dec1(f):
    def m():
        print('装饰器1')
        return '装饰器1 的m' + f()
    return m

def dec2(f):
    def m():
        print('装饰器2')
        return '装饰器2 的m' +f()
    return m

@dec1
@dec2
def f():
    return '!'

print(f())
  • 类装饰器
    • 类装饰器接收函数在call方法中执行额外操作
class Person:
    def __call__(self,fun):
        def m():
            print('类装饰器里的m函数执行')
            fun()
        return m
   
@Person
def f():
    print('f函数执行')
f()

'''
装饰器里的函数接收的参数就是传入函数调用时接收的参数
'''
class Person:
    def __call__(self,fun):
        def m(x):
            print('类装饰器里的m函数执行')
            fun(x)
        return m
   
@Person()
def f(x):
    print(x)
    print('f函数执行')
f(21)

标签:__,return,函数,迭代,print,super,装饰,def
From: https://blog.csdn.net/m0_73658021/article/details/140794834

相关文章

  • 搜索---迭代加深,双向搜索 DFS
    文章目录迭代加深[加成序列](https://www.acwing.com/problem/content/172/)思路代码双向搜索[送礼物](https://www.acwing.com/problem/content/173/)思路代码迭代加深深搜需要不断深入,但如果答案在某个较浅的节点上。如果一开始就选错了分支,这样会浪费大量......
  • python之代码简化式(列表、字典生成式,递归函数,迭代器(iter)和生成器(yield)、匿名函数(
    文章目录前言1、列表、字典生成式2、递归函数2.1python中代码的递归深度(扩展)3、拓展:迭代器和生成器3.1迭代器(iter)3.2生成器(yield)4、匿名函数(lambda)4.1map函数4.2reduce函数(较少使用)4.3filter函数前言本文主要讲解一些简化代码格式的一些方法,方便大家更好的......
  • 温度补偿 MEMS 振荡器(TC-MO/VC TC-MO) - Super Low Jitter MO5155/MO5156/MO5157/MO535
    在当今科技高速发展的时代,电子设备对频率源的性能要求日益严苛。频率的稳定性、精度以及低抖动特性成为了决定设备性能的关键因素。温度补偿MEMS振荡器(TC-MO/VCTC-MO)以其出色的性能,正在逐渐成为电子领域的宠儿。本文将详细介绍SuperLowJitter系列的MO5155、MO5156、......
  • super与this的区别
    相同点:1.都是Java中的关键字而不是方法之类的2.都只能在类中的非静态方法中使用,调用非静态方法与非静态变量3.在构造方法中调用的时候都必须设置在第一行而且不能同时存在不同点:1.从大体上来说this指的是当前对象对当前类的引用,而super指的是当前对象对该子类的父类的引......
  • Python装饰器实现Hook类
    背景最近有个新的需求是使用Redmine进行一些提交前后的处理,备忘下一些思路实现思路为了统一代码的路径以及调用方式,封装了一个Hook类,按理来说是可以对所有类似的代码使用的,这里使用了Python装饰器,统一对同一个命名类的进行处理,相当于定义了函数的路由核心代码见下:Hook.pyfro......
  • 迭代器 / 生成器
    #迭代器#迭代是Python最强大的功能之一,是访问集合元素的一种方式。。#迭代器是一个可以记住遍历的位置的对象。#迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。#迭代器有两个基本的方法:iter()和next()。importsysl......
  • 迭代的 Codility 课程“使用以逗号结尾的打印语句”
    我无法理解为什么Python语言包含逗号我尝试在IDE中运行代码示例但失败以上就是本课的内容。请检查img在此处输入图像描述我想知道课程是错误的还是我缺乏Python知识我想知道课程是错误的还是我缺乏Python知识我想知道课程是错误的还是我缺乏Python知识你......
  • Iterator与Iterable(迭代器与可迭代)
    一前言环境:python3.10win10二Iterator(迭代器)Iterator是python的内置类型之一,看下其定义该类型的实例对象称之为iterator(迭代器对象)要得到一个iterator(迭代器对象),可用内置函数iter()将listtuple等转成迭代器对象也可以自定义一个迭代器类型的class,该class的......
  • 设计模式:代理、装饰和适配器模式的区别
    结构对比讲实话,博主当初学习完整设计模式时,这三种设计模式单独摘哪一种都是十分清晰和明确的,但是随着模式种类的增加,在实际使用的时候竟然会出现恍惚,例如读开源代码时,遇到不以模式命名规范的代码时,一时难以说清具体是使用的这三种里的哪一种。之所以会出现混淆的原因是,三种模式......
  • 基因编辑技术之“速”力量:让单倍体育种技术迭代升级
    作物品种改良主要得益于育种过程带来的遗传获得。传统育种技术受制于表型观察准确性和遗传累赘效应等影响,其育种目标随机且费时费力,需要多个世代的自交才能获得性状稳定的品种。因此,生产上迫切需要高效、快速、精准改良作物性状的技术来加速作物的育种进程。单倍体诱导(haploidin......