首页 > 编程语言 >python从0快速上手(十一)高级特性1

python从0快速上手(十一)高级特性1

时间:2024-10-16 09:19:50浏览次数:3  
标签:__ 十一 迭代 python self 生成器 特性 time def

Python学习:高级特性1

在Python的奇妙世界里,高级特性就像是那些隐藏在角落里的神秘力量,等待着勇敢的程序员去发掘。装饰器、生成器和迭代器,这些听起来就像是古老魔法书中的咒语,但它们其实是Python中强大的编程工具。让我们一起揭开这些高级特性的神秘面纱,看看它们如何让我们的代码变得更加强大和灵活。

1. 装饰器

装饰器在Python中是一种神奇的存在,它可以让你在不修改原有函数代码的情况下,给函数添加新的功能。这就像是给函数穿上了一件神奇的外衣,让它拥有了超能力。

基本装饰器:
装饰器本质上是一个函数,它接受一个函数作为参数并返回一个新的函数。

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

在这个例子中,my_decorator是一个装饰器,它打印一条消息,然后调用原始函数,再打印另一条消息。say_hello函数被my_decorator装饰,所以当我们调用say_hello()时,实际上是在调用wrapper()函数。

带参数的装饰器:
有时候,你可能想要创建一个可以接受参数的装饰器。

def my_decorator_with_args(arg):
    def decorator(func):
        def wrapper():
            print(f"Something is happening before the function is called with arg {arg}.")
            func()
            print("Something is happening after the function is called.")
        return wrapper
    return decorator

@my_decorator_with_args("test")
def say_hello():
    print("Hello!")

say_hello()

在这个例子中,my_decorator_with_args是一个接受参数的装饰器,它返回一个装饰器,这个装饰器返回一个函数。

实例:创建一个计时装饰器

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} took {end_time - start_time} seconds to run.")
        return result
    return wrapper

@timer
def waste_some_time(seconds):
    time.sleep(seconds)

waste_some_time(2)

在这个例子中,timer装饰器测量并打印函数执行所需的时间。

2. 生成器

生成器是一种特殊的迭代器,它允许你惰性地生成值,这意味着你不需要一次性计算所有的值,而是可以一次生成一个值。这就像是有一个魔法盒子,每次你请求时,它就会变出一个值。

创建生成器:
你可以使用yield关键字来创建一个生成器。

def count_up_to(max):
    n = 1
    while n <= max:
        yield n
        n += 1

# 使用生成器
for number in count_up_to(5):
    print(number)

在这个例子中,count_up_to是一个生成器,它一次生成一个数字,直到达到最大值。

生成器表达式:
就像列表推导式一样,你也可以使用生成器表达式来创建生成器。

gen = (x * x for x in range(3))
for value in gen:
    print(value)

实例:创建一个斐波那契数列生成器

def fibonacci(max):
    a, b = 0, 1
    while a <= max:
        yield a
        a, b = b, a + b

# 使用生成器
for number in fibonacci(10):
    print(number)

在这个例子中,fibonacci是一个生成器,它生成斐波那契数列,直到达到最大值。

3. 迭代器

迭代器是一个可以记住遍历的位置的对象。迭代器从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:__iter__()__next__()

创建迭代器:
你可以定义一个类,实现__iter__()__next__()方法,来创建一个迭代器。

class CountUp:
    def __init__(self, max):
        self.max = max
        self.num = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.num > self.max:
            raise StopIteration
        else:
            num = self.num
            self.num += 1
            return num

# 使用迭代器
count_up = CountUp(5)
for number in count_up:
    print(number)

在这个例子中,CountUp是一个迭代器,它一次生成一个数字,直到达到最大值。

实例:创建一个反向迭代器

class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        else:
            index = self.index
            self.index -= 1
            return self.data[index - 1]

# 使用迭代器
reversed_list = Reverse([1, 2, 3, 4, 5])
for item in reversed_list:
    print(item)

在这个例子中,Reverse是一个迭代器,它反向迭代一个列表。

小结

装饰器、生成器和迭代器是Python中的强大工具,它们让我们的代码变得更加灵活和强大。装饰器可以在不修改原有函数的情况下添加新功能,生成器让我们能够惰性地生成值,而迭代器则让我们能够记住遍历的位置。

现在,你已经掌握了Python中这些高级特性的基础。但是,这只是冰山一角。在编程的世界里,还有更多高级的概念等着你去探索。编程就像是一场冒险,而你已经迈出了第一步。祝你在编程的世界里旅途愉快!

标签:__,十一,迭代,python,self,生成器,特性,time,def
From: https://blog.csdn.net/weixin_39346529/article/details/142966098

相关文章

  • 【新人系列】Python 入门(二):Python IDE 介绍
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......
  • python pandas写入excel
    #--coding:utf-8--importdatetimeimportpandasaspdfromcommon_toolimportget_ip_areafromdb.mysqlConnectionimportMyPymysqlPoolfromdb_configimportdata_report_dbsex_dict={"-1":"未知","0":"女&......
  • python 实现旋转图片算法
    旋转图片算法介绍旋转图片算法是图像处理中常用的一种技术,它可以将图像中的对象旋转到特定的角度。这种算法在图像处理、计算机视觉、人工智能等领域都有广泛的应用,例如自动驾驶、医学影像、安防监控等场景。以下是旋转图片算法的基本步骤:确定旋转中心点:旋转操作通常围绕......
  • python爬虫之cookie管理
    Cookie处理在Web开发中,Cookie是一种常用的技术,用于在Web服务器和浏览器之间存储和传输数据。Cookie通常包含有关用户会话、首选项和其他信息的键值对。     Request库的get()方法的语法是:requests.get(url,params=None,**kwargs))url:想要获取的网页的链接。params:url的额......
  • python datetime.datetime.now() 北京时间
    pythondatetime.datetime.now()北京时间 ===================要获取北京时间(中国标准时间,UTC+8),可以使用datetime模块中的datetime和timedelta类。以下是一个简单的函数,用于获取北京时间:fromdatetimeimportdatetime,timedelta defget_beijing_time():   #获取UTC......
  • 大数据时代下,Python爬虫已然成为了副业赚钱的首选目标!
    前言今年又是难找工作的一年。中小企业倒闭、裁员、失业...因为大环境不好,人心也变得越来越焦虑,深怕下一个不幸者会是自己。在这样的现实面前,「副业搞钱」逐渐成了人们的刚需,有一份失业了依旧有收入、不出门也依然有收入的副业,是未来几年最大的底气。暴风雨随时会来,只......
  • python画图|在三维空间的不同平面上分别绘制不同类型二维图
    【1】引言前序已经完成了基础的二维图和三维图绘制教程探索,可直达的链接包括但不限于:python画图|3D参数化图形输出-CSDN博客python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客在学习过程中,发现一个案例:在三维空间的不同平面上分别绘制不同类型二维图。经......
  • Python入门-面相对象——class(类)、封装、继承、多态、类型注解
    面向对象面向对象就是设计一个类,基于类创建对象,并使用创建出来的类完成具体的工作面向对象的三大特性:封装、继承、多态面向对象基本概述:属性:名词,用来描述事物的外在特征的,例如:姓名,性别,年龄,身高,体重...行为:动词,表示事物能够做什么,例如:......
  • python+flask计算机毕业设计在线教育平台(程序+开题+论文)
    文件加密系统的设计与实现tp835本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,教育领域正经历着前所未有的变革。在线教育平台作为互联网+教育的重要产物,已经逐......
  • python+flask计算机毕业设计中电科海信院培训考试系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和企业培训需求的日益增长,构建一个高效、便捷的培训考试系统已成为众多企业和研究机构的重要任务。中电科海信院作......