您现在的位置是:群英 > 开发技术 > Python语言
Python编程开发技巧汇总,你都了解多少?
Admin发表于 2022-01-30 17:27:24908 次浏览

    这篇文章给大家分享的是Python编程开发技巧汇总,下文介绍了小数保留指定位小数、判断变量的数据类型、Python中的类方法等等内容,小编觉得挺实用的,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。

    一、小数保留指定位小数

    1.%f 方法

f = 1.23456f1 = '%.4f' % f
f2 = '%.2f' % fprint(f1,type(f1))print(f2,type(f2))

    打印

1.2346 <class 'str'>1.23 <class 'str'>

    易知,这种方法会进行四舍五入,但是将浮点型转化成了字符串值,已不再是原始的数值。

    2.format函数

f = 1.23456f1 = format(f,'.4f')f2 = format(f,'.2f')print(f1,type(f1))print(f2,type(f2))

    打印

1.2346 <class 'str'>1.23 <class 'str'>

    同理,这种方法也会进行四舍五入,但是将浮点型转化成了字符串值,已不再是原始的数值。

    3.round()函数

a = 1.23456b = 2.355c = 3.5d = 2.5a1 = round(a, 3)b1 = round(b, 2)c1 = round(c)d1 = round(d)print(a1,type(a1))
print(b1,type(b1))print(c1,type(c1))print(d1,type(d1))

    打印

1.235 <class 'float'>2.35 <class 'float'>4 <class 'int'>2 <class 'int'>

    可以看出,round()函数最后得到的是数值(浮点型或整型),但是在“舍”和“入”的规律上不一定:
(1)round(x,n)函数中,是否进位或四舍五入,取决于n位以及n+1位小数的值
(2)只有当n+1位数字是5的时候,容易混淆,如果n为偶数,则n+1位数是5,则进位,例如round(1.23456,3)最终变为1.235
(3)如果n为奇数,则n+1位是数5,那不进位,例如round(2.355,2),最终为2.35
(4)如果n为0,即没有填写n的时候,最终结果与上面相反,即整数部分为偶数的时候,小数位5不进位,例如(round(2.5)变为2)。
(5)整数部分为奇数的时候,小数位5进位。(round(3.5)变为4)

    4.直接截断

a = int(1.23456 * 1000) / 1000print(a)

    打印1.234
    这种方法简单粗暴,直接去掉后边的,不管是否大于5。

    二、判断变量的数据类型

    1.type():

a = 1.23print(type(a))

    打印<class 'float'>

    2.isinstance()

    原型为isinstance(x, A_tuple)

a = 1.23tp = isinstance(a,float)print(tp)

    打印True

    3.class.__name__属性

    使用变量的__class__.__name__属性 ,这也是type()方法的实质:

num = 1.23print(num.__class__.__name__)

    打印:

float

    三、Python中的类方法(@classmethod)

    python做面向对象编程的时候,经常需要使用classmethod类方法,这并不是类中的方法。
    类方法也算一种实用的技巧,简单描述之:“类方法让类模板具有记忆力”。
    类模板就是我们所定义的类。在普通情况下,不使用类方法对类进行实例化,类本身是不具有记忆性的。只是当一个静态模板被套用多次而已。如果我们想让类在每一次实例化之后,都能记载一些记忆,会对很多操作很有用。

class Man:
    id = 0 # 类变量
    def __init__(self, name):
        self.name = name
        self.id = self.id_number()
 
    @classmethod
    def id_number(cls):
        cls.id += 1
        return cls.id
 a = Man('A')print(a.id)b = Man('B')print(b.id)

    打印

12

    对Man这个类进行实例化2次,每个实例的id都不一样。这就依靠类方法来实现了:首先,用@classmethod描述类方法,然后用"cls"代表本类。类方法对类属性进行的处理是有记忆性的。

    需要注意的是,类方法处理的变量一定要是类变量。因为在类方法里你用不了self来寻址实例变量,所以需要把类变量放到最前面描述,如上面的"id=0"所示。类变量是可以被self访问的,所以,在类变量定义好了以后,不需要在_init_函数里对类变量再一次描述。所以,上面代码里self.id不一定需要。

    四、str.format与制表符\t设置中文对齐

    str.format对字符串进行格式化,{:<x}的语法表示左对齐,{:>x}为右对齐,{:^x}为居中),少于x位自动补齐(默认为空格补齐),但是对于中文字符并不能很好地支持,所以会导致有多行中文字符串时出现不能对齐的现象,需要考虑到字符串所占长度并将中文字符串进行编码后再计算。

#name是包含中文的字符串,22是整个字符串一行的总长度,一般要顾及测试才能得到,\t后的x是一标记字符
可换为别的所需的字符串print('[{string:<{len}}\tx'.format(string=string+']',len=22-len(string.encode('GBK'))+len(string)))

    五、datetime模块timedelta类的使用

    timedelta对象表示两个不同时间之间的差值, 这个差值的单位可以是:天、秒、微秒、毫秒、分钟、小时、周。
    如果使用time模块对时间进行算术运算,只能将字符串格式的时间和struct_time格式的时间对象先转换为时间戳格式,然后对该时间戳加上或减去n秒,最后再转换回struct_time格式或字符串格式,这显然很不方便。而datetime模块提供的timedelta类可以让我们很方面的对datetime.date, datetime.timedatetime.datetime对象做算术运算,且两个时间之间的差值单位也更加容易控制。
datetime.timedelta类的定义:

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)

    所有参数都是默认参数,因此都是可选参数。参数的值可以是整数或浮点数,也可以是正数或负数。内部值存储days、seconds 和 microseconds,其他所有参数都将被转换成这3个单位:

  • 1毫秒转换为1000微秒
  • 1分钟转换为60秒
  • 1小时转换为3600秒
  • 1周转换为7天

    然后对这3个值进行标准化,使得它们的表示是唯一的:

  • microseconds : [0, 999999]
  • seconds : [0, 86399]
  • days : [-999999999, 999999999]

    类属性

类属性名称 描述
timedelta.min timedelta(-999999999)
timedelta.max timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
timedelta.resolution timedelta(microseconds=1)

实例方法和属性

实例方法/属性名称 描述
td.days 天 [-999999999, 999999999]
td.seconds 秒 [0, 86399]
td.microseconds 微秒 [0, 999999]
td.total_seconds() 时间差中包含的总秒数,等价于: td / timedelta(seconds=1)
方法/属性 描述
datetime.datetime.now() 返回当前本地时间(datetime.datetime对象实例)
datetime.datetime.fromtimestamp(timestamp) 返回指定时间戳对应的时间(datetime.datetime对象实例)
datetime.timedelta() 返回一个时间间隔对象,可以直接与datetime.datetime对象做加减操作
>>> import datetime>>>>>> datetime.timedelta(365).total_seconds() 
# 一年包含的总秒数31536000.0>>> dt = datetime.datetime.now()>>> dt + datetime.timedelta(3) 
# 3天后datetime.datetime(2020, 1, 22, 11, 17, 0, 214877)>>> dt + datetime.timedelta(-3) 
# 3天前datetime.datetime(2020, 1, 16, 11, 17, 0, 214877)>>> dt + datetime.timedelta(hours=3) 
# 3小时后datetime.datetime(2020, 1, 19, 14, 17, 0, 214877)>>> dt + datetime.timedelta(hours=-3) 
# 3小时前datetime.datetime(2020, 1, 19, 8, 17, 0, 214877)>>> dt + datetime.timedelta(hours=3, seconds=30) 
# 3小时30秒后 datetime.datetime(2020, 1, 19, 14, 17, 30, 214877)

    六、获取抛出的异常具体信息

    很多时候,在Python运行抛出异常并接收到之后需要显示异常的具体信息,包括异常内容、异常所在的行数和异常所在的Python文件等等,分别使用args[0]__traceback__.tb_lineno__traceback__.tb_frame.f_globals["__file__"]属性即可,示意如下:

def get_exception_info():
    try:
        s = 2 / 0
    except Exception as e:
        print('异常内容:', e.args[0])
        print('异常行数:', e.__traceback__.tb_lineno)
        print('异常文件:', e.__traceback__.tb_frame.f_globals["__file__"])get_exception_info()

    打印:

异常内容: pision by zero
异常行数: 8异常文件: XXX/test.py

    七、使用BeautifulSoup库去掉字符串中的HTML标签

    有时候,字符串中含有HTML标签,如

text = """<p>
<h1>Title</h1>
<p>A long text........ </p>
<a href=""> a link </a>
</p>"""

    需要得到'\nTitle\nA long text........ \n a link \n',可以使用正则表达式匹配,但是稍嫌麻烦,此时可以直接使用BeautifulSoup库进行转化,更加简单,如下:

from bs4 import BeautifulSoup

text = """<p>
<h1>Title</h1>
<p>A long text........ </p>
<a href=""> a link </a>
</p>"""clean_text = BeautifulSoup(text, "lxml").textprint(clean_text)

    打印:

Title
A long text........ 
 a link

    显然,此时已经去掉了字符串中的HTML标签。

    关于Python编程开发技巧就分享到这,上述示例具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助。当然,还有很多Python编程开发技巧是需要大家学习和掌握的,想要了解更多大家可以关注群英网络其它的相关文章。

文本转载自PHP中文网

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-06-02 17:13:35 
摘要:方法:1、用“sort(数组)”进行升序排序;2、用“rsort(数组)”进行降序排序;3、用array_merge_recursive()合并升序数组和降序数组,语法“array_merge_recursive(升序数组,降序数组)”。
2022-09-13 17:47:43 
摘要:在nodejs中,路由指的是url地址和响应函数之间的映射关系;一个url地址响应一个html页面,就是将一个路径匹配关系的业务提取到一个单独的js文件当中,创建路由的语法为“let router = express.Router();”。
2022-05-16 17:16:56 
摘要:前言在app开发中,通常为了省流提高加载速度提升用户体验我们通常在列表中或新闻中的插图都是以缩略图压缩过的图片来进行展示,当用户点击图片时我们再去加载真正像素的大图让用户预览,如果用户想保存并且可以保
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部