改善python程序的91建议记录

2024-01-09

使用else子句简化循环(异常处理)

  • 案例1 执行sql异常时处理
def save(db, obj):
    try:
        # save attr1
        db.execute('a sql stmt', obj.attr1)
        # save attr2
        db.execute('another sql stmt', obj.attr2)
    except DBError:
        db.rollback()
    else:
        db.commit()

  • 案例2
def print_prime2(n):
    for i in range(2, n):
        for j in range(2, i):
            if i % j == 0:
                break
        else:
            print('%d is a prime number'+  str(i))
print_prime2(111)

使用join连接字符串

  • S1+S2+S3+…+SN,执行一次+操作便会在内存中申请一块新的内存空间,并将上一次操作的结果和本次操作的右操作数复制到新申请的内存空间,即当执行S1+S2的时候会申请一块内存,并将S1、S2复制到该内存中,依次类推,字符串的连接,特别是大规模字符串的处理,应该尽量优先使用join而不是+。
  • 案例验证
a,b,c = 1,'aa','Filte'
a_string = ','.join([str(a),b,c,"测试"])
print(a_string)

return: 1,aa,Filte,测试

[]、()和{}:一致的容器初始化形式

  • 列表解析语法中的表达式可以是简单表达式,也可以是复杂表达式,甚至是函数。
def f(v):
    if v%2 == 0:
        v = v**2
    else:
        v = v+1
    return v

[f(v) for v in [2,3,4,-1] if v>0]
return: [4, 4, 16]


  • 迭代文件对象
fh = open("test.txt", "r")
result = [i for i in fh if "abc" in i]  #
文件句柄可以当做可迭代对象
print result

深、浅拷贝差异

  • 详细demo
  • 由于通过copy.copy()得到的customer2是customer1的一个浅拷贝,它仅仅拷贝了pizzalist里面对象的地址而不对对应地址所指向的具体内容(即具体的pizza)进行拷贝,因此customer2中的pizzaList所指向的具体内容是和customer1中一样的.
  • 实际上在包含引用的数据结构中,浅拷贝并不能进行彻底的拷贝,当存在列表、字典等不可变对象的时候,它仅仅拷贝其引用地址。要解决上述问题需要用到深拷贝,深拷贝不仅拷贝引用也拷贝引用所指向的对象,因此深拷贝得到的对象和原对象是相互独立的
class Pizza(object):
    def __init__(self,name,size,price):
        self.name = name
        self.size = size
        self.price = price

    def getPizzaInfo(self):
        return self.name,self.size,self.price

    def showPizzaInfo(self):
        print("Pizza name:"+self.name)
        print("Pizza size:"+str(self.size))
        print("Pizza price:"+str(self.price))

    def changeSize(self,size):
        self.size = size

    def changePrice(self,price):
        self.price = price

class Order(object):
    def __init__(self,name):
        self.costomername = name
        self.pizzaList = []
        self.pizzaList.append(Pizza("Mushroom",12,30))

    def ordermore(self,pizza):
        self.pizzaList.append(pizza)

    def changeName(self,name):
        self.costomername=name

    def getorderdetail(self):
        print("customer name:"+self.costomername)
        for i in self.pizzaList:
            i.showPizzaInfo()
            print(id(i))

    def getPizza(self,number):
        return self.pizzaList[number]

customer1=Order("zhangSan")
customer1.ordermore(Pizza("seafood",9,40))
customer1.ordermore(Pizza("fruit",12,35))
print("customer1 order infomation:")
customer1.getorderdetail()
print("-------------------------------")

# customer2=copy.copy(customer1)  #浅拷贝
customer2=copy.deepcopy(customer1) # 深拷贝
print("order 2 customer name:"+customer2.costomername)
customer2.changeName("li")
customer2.getPizza(2).changeSize(9)
customer2.getPizza(2).changePrice(30)
print("customer2 order infomation:")
customer2.getorderdetail()
print("-------------------------------------")

customer1.getorderdetail()

深入掌握ConfigParser

  • 首先就是getboolean()这个函数。getboolean()根据一定的规则将配置项的值转换为布尔值,调用getboolean(‘section1’, ‘optioin1’)时,将返回False。不过getboolean()的真值规则值得一说:除了0之外,no、false和off都会被转义为False,而对应的1、yes、true和on则都被转义为True,其他值都会导致抛出ValueError异常。
  • ConfigParser支持的配置文件格式里,有一个[DEFAULT]节,当读取的配置项在不在指定的节里时,ConfigParser将会到[DEFAULT]节中查找
cfg.ini配置文件:
[DEFAULT]
in_default = 'an option value in default'
[section2]

[section1]
option1=True

conf = configparser.ConfigParser()
conf.read('cfg.ini')
print(conf.getboolean('section1', 'option1'))
print(conf.get('section2', 'in_default'))

##输出
True
'an option value in default'
##

  • 在Python中字符串格式化可以使用以下语法,常见的SQLAlchemy应用程序的配置文件,通过这个配置文件能够获取不同的数据库配置相应的连接字符串,即conn_str。如你所见,conn_str定义在[DEFAULT]中,但当它通过不同的节名来获取格式化后的值时,根据不同配置,得到不同的值
###cfg.ini
[DEFAULT]
conn_str = %(dbn)s://%(user)s:%(pw)s@%(host)s:%(port)s/%(db)s
dbn = mysql
user = root
host=192.168.127.2
port = 3306

[db1]
user = test1
pw=test_123
db=ucds_1

[db2]
user = test2
host=192.168.127.1
pw=test_123
db=ucds_2
port=3308

conf = configparser.ConfigParser()
conf.read('cfg.ini')
print("mysql conn",conf.get('db1', 'conn_str'))
print("mysql conn",conf.get('db2', 'conn_str'))

##输出
mysql conn mysql://test1:test_123@192.168.127.2:3306/ucds_1
mysql conn mysql://test2:test_123@192.168.127.1:3308/ucds_2
##

用mixin模式让程序更加灵活

class TelMixin:
    def telfunc(self, num):
        self.name = num
        print("call Phone ",self.name)

class SmsMixin:
    def smsfunc(self, num):
        self.name = num
        print("send Sms info:",self.name)

class SongMixin:
    def songfunc(self):
        print("我可以放音乐")

class Phone(TelMixin,SmsMixin,SongMixin):
    def __init__(self):
        pass

class Ipod(SongMixin):
    def __init__(self, sn):
        self.num = num


p = Phone()
p.telfunc("110")
p.smsfunc("110")
p.songfunc()

静态代码分析工具

  • 它可以帮助开发者检查代码中的错误、编码规范问题以及代码风格问题
[devops@my-dev ccod_check_back_info]$ pip install pylint

[devops@my-dev ccod_check_back_info]$ pylint atest.py 
************* Module atest
atest.py:5:17: C0303: Trailing whitespace (trailing-whitespace)
atest.py:7:0: C0301: Line too long (119/100) (line-too-long)
atest.py:9:0: C0301: Line too long (170/100) (line-too-long)
atest.py:1:0: C0114: Missing module docstring (missing-module-docstring)
atest.py:4:0: C0116: Missing function or method docstring (missing-function-docstring)
atest.py:17:0: C0116: Missing function or method docstring (missing-function-docstring)
atest.py:19:4: C0103: Variable name "Passwd" doesn't conform to snake_case naming style (invalid-name)
atest.py:22:12: C0103: Variable name "Passwd" doesn't conform to snake_case naming style (invalid-name)

-----------------------------------


  • ssh-keygen -m PEM -t rsa 需要特殊格式,

如果你对Python感兴趣,想要学习python,这里给大家分享一份 Python全套学习资料 ,都是我自己学习时整理的,希望可以帮到你,一起加油!

????有需要的小伙伴,可以 V扫描下方二维码免费领取 ????

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的 学习成长路线图 。可以说是 最科学最系统的学习路线 ,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方????????????二维码免费领取????

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改善python程序的91建议记录 的相关文章

随机推荐

  • K8S中的Secret创建和使用

    天行健 君子以自强不息 地势坤 君子以厚德载物 每个人都有惰性 但不断学习是好好生活的根本 共勉 文章均为学习整理笔记 分享记录为主 如有错误请指正 共同学习进步 文章目录 创建secret 1 kubectl命令创建 2 yaml文件创建
  • 浅谈安科瑞直流表在孟加拉某能源公司的应用

    摘要 本文介绍了安科瑞直流电表在孟加拉某能源公司的应用 主要用于光伏直流柜内 配合分流器对汇流箱的输出电流电压等进行测量 并采集配电现场的开关信号 装置带有RS485接口可以把测量和采集的数据和设备状态上传 Abstract This ar
  • OpenHarmony沙箱文件

    一 前言 1 前景提要 DevEcoStudio版本 DevEco Studio 3 1 Release SDK版本 3 2 2 5 API版本 9 2 概念 在openharmony文件管理模块中 按文件所有者分类分为应用文件和用户文件和
  • 论文为什么引用的句子被标红

    大家好 今天来聊聊论文为什么引用的句子被标红 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 论文为什么引用的句子被标红 在论文撰写过程中 我们经常需要引用他人的观点 数据或研究成果来支持自
  • 基于FNN的模糊控制器matlab仿真

    目录 1 算法仿真效果 2 MATLAB源码 3 算法概述 3 1 模糊逻辑基础 3 2 神经网络基础
  • 大学论文查重是用什么来查

    大家好 今天来聊聊大学论文查重是用什么来查 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 大学论文查重是用什么来查 一 背景介绍 在高等教育中 学术诚信和论文的原创性是每个学者必须遵守的原
  • python按列写入数据到excel

    要将数据按列写入 Excel 可以使用 Python 的 openpyxl 库 首先 需要安装 openpyxl 库 可以使用以下命令在终端或命令提示符中安装 pip install openpyxl 然后 可以按照以下步骤编写代码 1 导
  • 基于多目标粒子群的车间搬运费用和布局面积最小的多目标求解,基于MOPSO的多目标求解

    目录 摘要 测试函数shubert 粒子群算法的原理 粒子群算法的主要参数 粒子群算法原理 基于多目标粒子群的车间搬运费用和布局面积最小的多目标求解 基于MOPSO的多目标求解 代码 结果分析 展望 代码下载 基于多目标粒子群的车间搬运费用
  • python opencv orb特征点提取匹配然后图像拼接

    opencv 基于ORB特征点图像拼接 特征点 warpperspective CSDN博客 图像用这儿的 import cv2 import numpy as np from matplotlib import pyplot as plt
  • 处理不舒服的同事关系:实用建议与技巧

    处理不舒服的同事关系 实用建议与技巧 在工作中 我们难免会遇到一些与同事关系不和谐的情况 这些不舒服的关系可能会影响到我们的工作情绪和效率 那么 如何处理这些不舒服的同事关系呢 本文将为你提供一些实用的建议 一 保持冷静和理智 在处理同事关
  • creo老是卡住怎么办?如何解决Creo卡顿问题

    Creo PRO E 是美国PTC公司于2010年10月推出CAD设计软件包 Creo是整合了PTC公司的三个软件Pro Engineer的参数化技术 CoCreate的直接建模技术和ProductView的三维可视化技术的新型CAD设计软
  • 新导物联实验室设备定位管理系统

    新导物联实验室设备定位管理系统是一种用于实验室设备管理和定位的系统 它利用物联网技术和定位技术 帮助实验室管理人员实时了解实验室内设备的位置和状态 提高设备的利用率和管理效率 该系统使用传感器或标签对实验室设备进行标识和定位 每个设备都被配
  • Move 向未来,2024 开发者大会热潮涌动

    1 月 13 日至 14 日 2024 Move 开发者大会 Move 生态关键的一年 将于上海举办 本次大会由 MoveFuns OpenBuild 和 MoveBit 主办 Rooch AptosGlobal alcove zkMove
  • go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

    carbon 是一个轻量级 语义化 对开发者友好的 golang 时间处理库 支持链式调用 目前已被 awesome go 收录 如果您觉得不错 请给个 star 吧 github com golang module carbon gite
  • mybatis 增删改查

    MyBatis 是一种持久化框架 主要用于简化数据库访问代码的编写 它允许开发者使用 XML 或注解来配置 SQL 映射 并提供了自动将数据库操作映射到 Java 对象的功能 以下是 MyBatis 中的基本增删改查操作的示例 1 增加 I
  • Spark 中 BroadCast 导致的内存溢出(SparkFatalException)

    背景 本文基于 Spark 3 1 1 open jdk 1 8 0 352 目前在排查 Spark 任务的时候 遇到了一个很奇怪的问题 在此记录一下 现象描述 一个 Spark Application Driver端的内存为 5GB 一直
  • 服务器超线程的好处

    服务器超线程的好处 1 提高性能 超线程通过提高整体系统吞吐量显着提高服务器性能 通过允许多个线程在单个物理内核上同时执行 超线程减少了空闲时间并最大限度地利用了可用资源 这会加快任务执行速度并缩短应用程序的响应时间 尤其是在多线程工作负载
  • Uservisual studio winform界面切换成设计器模式,按钮移动一个位置,但是很多的designer.cs代码都变化

    当你在 Visual Studio 中通过设计器模式移动 WinForms 界面上的控件 例如按钮 实际上是在进行图形化的布局更改 这会导致设计器生成的 designer cs 文件中的相应代码也发生变化 以下是一些可能导致代码变化的情况
  • 智能访客定位在实际生活的应用

    随着科技的发展 定位技术在我们的生活中扮演着越来越重要的角色 如今 智能访客定位系统已经成为了各大企业单位办公的标配 在这个万物互联 信息数据大爆发 移动互联网普及的时代 基于物联网技术的智能访客定位系统可以说是 无处不在 它的作用不仅仅是
  • 改善python程序的91建议记录

    使用else子句简化循环 异常处理 案例1 执行sql异常时处理 def save db obj try save attr1 db execute a sql stmt obj attr1 save attr2 db execute an