首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python数据模型和各种实用小技巧,保证让你更PYTHONIC

前话: python简单易用,库多就是这么强大,笔者也长期使用过java、c、c++等语言,嗯不多说,最后选择了python! 但其实很多python程序猿都是其他语言转过来的,而且python兼容性也很高,所以比如java程序猿在写python的时候总能感觉到一股浓浓的java味,一个字:尬,两个字:尴尬!因此本文就是简单的通过介绍python数据模型和各种实用的小技巧来体现一下:PYTHONIC ,感受一下python语言的美妙之处,如果想更多了解python语言的风格,强烈推荐:流畅的Python

一、python数据模型

python数据模型是对python框架的描述,也就是说它规范了python这门语言自身构建模块的接口,这些自带模块中就含有一些特殊方法,在python框架下写程序,当python解释器碰到一些特殊的句法时,便会调用这些特殊方法去执行对象操作,这些特殊方法总结了一下几个特点:

1、特殊方法的存在是为了被解释器调用的,自己并不需要调用他们

2、大多数特殊方法的调用都是隐式的,但如 便显示调用超类的构造器

3、调用特殊方法执行速度上很快,因为是在内置模块中的

4、通过实现特殊方法,自定义数据类型可以表现的跟内置类型一样

下面我们便通过实现特殊方法,自定义数据对象,来感受一下PYTHONIC

上述代码中首先用collections.namedtuple()常见了一个的纸牌对象, 并定义了FrenchDeck类,类中实现了python的特殊方法: 、方法, 由于特殊方法定义我们可以直接对FrenchDeck对象进行操作,同时方法把 操作交给了列表, 我们可以直接把FrenchDeck对象当做list进行操作,可以直接根据索引取值,而且可以进行list的切片操作,演示如下:

简而言之, python中含有很多特殊方法,可以方便的实现且快速的实现特定功能,同时我们也可以在定义的数据类型中去实现特殊方法,这样自定义数据类型就可以表现的和python内置类型一样,写出更具有python风格的代码,下面通过一些python中实用技巧再看一下python的独到之处

二、python各种使用小技巧

1、python一行代码定义list

利用python的列表推导式, 可通过一行代码定义list

2、字典推导式

字典推导式类似于列表推导式,在用于字典key、value翻转时十分方便

3、python中两个变量值交换

看下面,一行代码,无需构建中间变量,可以说是相当方便了

4、lambda创建匿名函数

python中构建函数可以不适用函数定义,直接如下一条语句定义一次性匿名函数

5、map操作和filter操作

map操作和filter操作可以结合lambda函数一起使用,利用简单的实现一些高效的操作

(1)、map(func, s): 对集合s中每个元素执行func函数操作;

(2)、filter(func, s): 筛选集合s中满足func函数定义的元素

6、python中join操作

join操作可以有效的实现字符串的拼接操作

7、操作符链式调用、函数链式调用

(1) 操作符链式调用

(2) 函数链式调用

8、字符串和list倒转

直接使用list切片操作,超简单,当然也可以使用 函数

9、按value值排序字典

函数、函数、函数综合使用

10、list中最大和最小值索引

有时候我们对list元素不感兴趣,而对list元素的索引十分感兴趣,,此时便排上用场

11、list赋值技巧以及深拷贝浅拷贝

python中list对象lst1=lst2,其中对象lst1指向的是lst2的对象所在指针,在内存中lst1、lst2指向的是同一块内存,所以有时候使用浅拷贝还是深拷贝要注意

(1) list赋值技巧

注意到上面修改lst2,则lst1也相应发生了变化,如果想要lst2指向另一个内存空间,用下面操作

(2) python中浅拷贝和深拷贝

python中的浅拷贝函数,b浅拷贝a后则b、a指向同一个内存空间; 但python中copy模块有深拷贝函数函数,当b深拷贝a后,则b、a指向不同的内存空间

12、collections集合模块

(1) collections.namedtuple定义简单对象

(2) collections.Counter代替字典进行统计

(3) collections.deque双向列表

python中列表list按照索引访问元素速度快,但是插入和删除就很慢了,因此可以使用collections.deque实现快速的插入和删除,并且collections.deque提供了从序列头部插入和删除

后话: 本文自然只是列举了部分常用的显示PYTHONIC风格的实用技巧,想了解更多多看看流畅的Python,绝对良心书籍! 欢迎大家交流分享!

动手点一下小尾巴啦,谢谢!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180831G1I0RI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券