python高阶技巧

这篇具有很好参考价值的文章主要介绍了python高阶技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

设计模式

单例模式

具体用法 

工厂模式

优点

闭包

案例

修改闭包外部变量 

闭包优缺点

装饰器

装饰器原理

装饰器写法

递归

递归的调用过程

递归的优缺点

用递归计算阶乘

设计模式

含义:设计模式是一种编程套路,通过这种编程套路可以极大的方便程序的开发

除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模式

  • 单例、工厂模式
  • 建造者、责任链、状态、备忘录、解释器、访问者、观察者、中介、模板、代理模式等

单例模式

含义:保证一个类只有一个实例,并提供一个访问他的全局访问点

使用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问他时

具体用法 

#str_tools.py文件
class StrTools:
    pass
str_tool=StrTools()
import str_tools
s1=str_tools.str_tool
s2=str_tools.str_tool
print(id(s1))#2396069558544
print(id(s2))#2396069558544

结果:这样得到的对象始终是同一个

工厂模式

前言:当需要大量创建一个类的实例时,可以使用工厂模式,即从原生的使用类的构造去创建对象的形式迁移到基于工厂提供的方法去创建对象的形式。

优点

  • 大批量创建对象的时候有统一的入口,易于代码维护
  • 当发生修改时,仅修改工厂类的创建方法即可
  • 符合现实世界的模式,即由工厂来制作产品(对象)
class Person:
    pass
class Worker(Person):
    pass
class Student(Person):
    pass
class Teacher(Person):
    pass
class PersonFactory:
    def get_person(self,p_type):
        if p_type=="worker":
            return Worker()
        elif p_type=="student":
            return Student()
        else:
            return Teacher()
#构造工厂实例
pf=PersonFactory()
#获取对象
worker=pf.get_person("worker")
student=pf.get_person("student")
teacher=pf.get_person("teacher")

闭包

含义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包

案例

#简单闭包
def outer(logo):
    def inner(msg):
        print(f"<{logo}>{msg}<{logo}>")
    return inner

#调用outer
fn1=outer("图标")
#调用函数fn1
fn1("大家好")#<图标>大家好<图标>
fn2=outer("图片")
fn2("大家好")#<图片>大家好<图片>

修改闭包外部变量 

注意:在内部函数修改闭包所引入的外部变量的话,那么该变量需要被nonlocal关键字修饰

def outer(num1):
    def inner(num2):
        #通过nonlocal关键字修饰就可以修改外部函数传来的变量
        nonlocal  num1
        num1+=num2
        print(f"num1={num1}")
    return inner

fn=outer(10)
fn(20)#num1=30

闭包优缺点

  • 无需定义全局变量即可实现通过函数,持续访问、修改某个值(得到内部函数后,外部变量值就确定了,可以通过nonlocal关键字修改)
  • 闭包使用的变量位于外部函数内的,难以被错误的调用更改
  • 缺点:由于内部函数会持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存

装饰器

含义:装饰器其实也是一种闭包,其功能就是在不破坏目标函数原有代码和功能的前提下,为目标函数增加新功能

理解:创建一个闭包函数,在闭包函数内调用目标函数,可以达到不改变目标函数的同时,增加额外功能

装饰器原理

def sleep():
    import random
    import time
    print("睡眠中……")
    time.sleep(random.randint(1,5))

#为目标函数增加功能(在原功能前加我睡觉了,功能后加我起床了)
def outer(func):
    def inner():
        print("我睡觉了")
        func()
        print("我起床了")
    return inner
fn=outer(sleep)
fn()
#我睡觉了
#睡眠中……
#我起床了

装饰器写法

过程:使用@符号来@添加功能的函数,并且将其定义在目标函数上就会为目标函数增添固定的功能

#为目标函数增加功能(在原功能前加我睡觉了,功能后加我起床了)
def outer(func):
    def inner():
        print("我睡觉了")
        func()
        print("我起床了")
    return inner

#目标函数
@outer
def sleep():
    import random
    import time
    print("睡眠中……")
    time.sleep(random.randint(1,5))

sleep()
# 我睡觉了
# 睡眠中……
# 我起床了

递归

含义:若在一个函数的函数体内调用了该函数本身,那么这个函数就称为递归函数

递归的组成部分:递归调用与递归终止条件

递归的调用过程

  • 每递归调用一次函数,都会在栈内存分配一个栈帧
  • 每执行完一次函数,都会释放相应的空间

递归的优缺点

  • 优点:思路和代码简单
  • 缺点:占用内存多,效率低下

用递归计算阶乘

python高阶技巧,python,python,开发语言,数据库文章来源地址https://www.toymoban.com/news/detail-627517.html

def fac(n):
    if n==1:
        return 1
    else:
        return n*fac(n-1)
#计算6的阶乘
print(f"六的阶乘为:{fac(6)}")#六的阶乘为:720

到了这里,关于python高阶技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python开发】FastAPI 10:SQL 数据库操作

    在 FastAPI 中使用 SQL 数据库可以使用多个 ORM 工具,例如 SQLAlchemy、Tortoise ORM 等,类似 Java 的 Mybatis 。这些 ORM 工具可以帮助我们方便地与关系型数据库进行交互,如 MySQL 、PostgreSQL等。本篇文章将介绍如何使用 SQLAlchemy 来完成数据库操作,以便让我们在 FastAPI 项目中方便地进

    2024年02月14日
    浏览(32)
  • 〖Python 数据库开发实战 - MongoDB篇⑧〗- MongoDB的数据结构

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2023年04月09日
    浏览(46)
  • Python Flask Web开发二:数据库创建和使用

    数据库在 Web 开发中起着至关重要的作用。它不仅提供了数据的持久化存储和管理功能,还支持数据的关联和连接,保证数据的一致性和安全性。通过合理地设计和使用数据库,开发人员可以构建强大、可靠的 Web 应用程序,满足用户的需求。这里介绍:SQLAlchemy 安装pymysql和

    2024年02月10日
    浏览(40)
  • python使用flask实现前后端分离&通过前端修改数据库数据【全栈开发基础】

    完整代码放到了最后,时间紧张的话直接拉到最后或点击目录【🥩 完整代码】看完整代码 这里先提一下,我们运行后端代码之前需要先建立一个名字为 python 的数据库,而后在该数据库下创建表 userinfo ,因为看到有的朋友后端代码拿过去后会运行不起来或者就是直接报错了

    2023年04月09日
    浏览(32)
  • MongoDB 数据库性能优化技巧

    原文:MongoDB 数据库性能优化技巧 (techdatafuture.com) MongoDB 是一款灵活且可扩展的NoSQL数据库,为了提高其性能,我们可以采取一些优化技巧。本文将介绍一些MongoDB性能优化的关键点,包括索引的使用、查询优化、数据模型设计和硬件优化等。          1.合理使用索引     索

    2024年02月09日
    浏览(54)
  • MySQL数据库性能优化技巧介绍

    MySQL是目前最流行和广泛使用的开源关系型数据库之一,随着数据量的增长和访问负载的提高,优化数据库性能变得至关重要,以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧,提高数据库的运行效率,提升系统性能。 对于MySQL,最简单

    2024年02月08日
    浏览(89)
  • 【Python使用】嘿马头条完整开发md笔记第2篇:数据库,作用【附代码文档】

    嘿马头条项目从到完整开发笔记总结完整教程(附代码资料)主要内容讲述:课程简介,ToutiaoWeb虚拟机使用说明,Pycharm远程开发,产品与开发,数据库1 产品介绍,2 原型图与UI图,3 技术架构,4 开发。OSS对象存储,七牛云存储,CDN,缓存。缓存,缓存架构,缓存数据,缓存有效

    2024年03月18日
    浏览(35)
  • Flutter必备技能:轻松掌握本地存储与数据库优化技巧!

    正因为有网络,App拥有与外界进行信息交换的通道,也因此具备了更新数据的能力。不过,经过交换后的数据通常都保存在内存中,而应用一旦运行结束,内存就会被释放,这些数据也就随之消失了。 因此,我们需要把这些更新后的数据以一定的形式,通过一定的载体保存起

    2024年02月09日
    浏览(45)
  • Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(51)
  • 🔥🔥Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包