python常用的一些技巧

1、三目操作符

2、鸭子类型(duck typing)

首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型。以下是维基百科中对鸭子类型得论述:

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的走和叫方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。

鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。从静态类型语言转向动态类型语言的用户通常试图添加一些静态的(在运行之前的)类型检查,从而影响了鸭子类型的益处和可伸缩性,并约束了语言的动态特性(鸭子类型应避免使用type()或isinstance()等测试类型是否合法)。

in_the_forest()函数对参数duck只有一个要求:就是可以实现quack()和feathers()方法。然而Duck类和Person类都实现了quack()和feathers()方法,因此它们的实例对象donald和john都可以用作in_the_forest()的参数,这就是鸭子类型。

可以看出,鸭子类型给予Python这样的动态语言以多态。但是这种多态的实现完全由程序员来约束强制实现(文档、清晰的代码和测试),并没有语言上的约束(如C++继承和虚函数)。因此这种方法既灵活,又提高了对程序员的要求。

3、内建函数和lamda

需求:将一个字符串列表中所有满足包含“result"字段的字符串筛选出来。

4、iterator和generator

generator返回不用return,而用yield。

iterator实现了next()方法和__iter__,__iter__方法返回它自己。而当你调用next()方法时,会返回一个值。通常,这个next值会由generator产生。

换种说法,generator是用来生成iterator的。

那么iterator呢?generator就是用来生成iterator的:

应用的场景:下一次返回的结果依赖于上一次返回的结果。因为yield的作用是每次函数调用执行到这里就停止了,下次调用从yield后面的语句开始。比如说树的遍历之类的。

5、bind

bind应用的场景:你写一个好多参数的函数,先bind一个参数,变成函数A,然后换种方式bind,又变成了函数B。

介绍一个库是functools,这里只介绍跟bind相似的partial方法。

6、修饰器

1)decorator

修饰器的本质就是对函数做些修饰,然后返回一个函数(callable object)。也就是所谓的高阶函数。因此上面的式子直白的写出来就是:

foo = log(foo)

foo其实就是一个log返回的callable object wrap的别名。

包含内置方法:

1. python有三个内置函数,__set__、__get__、__delete__;

2. 只定义__get__方法,非数据描述器(non-data descriptor);

3. 定义了__delete__ 或者 __set__ 方法的叫做数据描述器(data descriptor);

1. python自动属性 (python自动生成的属性,比如__doc__等)

2. 在类(及其祖先类)的__dict__中查找data descriptor,如果存在,返回data descriptor中__get__方法调用的结果

3. 在对象的__dict__中查找

4. 在类(及其祖先类)的__dict__中查找non-data descriptor,存在则返回对应__get__调用的结果

5. 在类(及其祖先类)的__dict__中查找普通属性

这样,在原来的属性查找顺序上,我们加上了non-data descriptor和data descriptor,分别插在2、4的位置上。

python一些常用方法_python常用的一些技巧相关推荐

  1. python中threading模块详解及常用方法_Python常用模块功能简介(二)threading

    threading模块基本用法 threading.Thread.join函数解释 threading.Thread.join(timeout=None)调用该函数的线程会阻塞调用该线程的主线程和其它 ...

  2. 列出5个python标准库_Python常用标准库使用(一)

    自学python一段时间,之前总是学习基本语法,对Python标准库没怎么接触,所以计划从常用的标准库开始,大体了解一遍,下面是学习过程中的笔记. 一.OS模块 主要对目录.或者文件操作.常用方法如下 ...

  3. python csv性能_Python 使用和高性能技巧总结

    1. 易混淆操作 本节对一些 Python 易混淆的操作进行对比. 1.1 有放回随机采样和无放回随机采样 import random random.choices(seq, k=1) # 长度为k的 ...

  4. python dcf估值_Python 常用模块

    本节内容 模块介绍 os 模块 sys 模块 time & datetime模块 random 模块 json & picle shutil 模块 shelve 模块 xml 模块 c ...

  5. python字符串类库_Python 常用类库

    python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的libraries(modules)如下: 1 ...

  6. python dry原则_python使用建议与技巧分享(一)

    这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获. 1 如何创建指定长度且有特定值的list 不推荐方式 list1 = [0, 0, 0, 0, 0, 0, 0 ...

  7. python 传感器数据结构_Python常用的数据结构详解

    数据结构:通俗点说,就是储存大量数据的容器.这里主要介绍Python的4种基本数据结构:列表.字典.元组.集合. 格式如下: 列表:list = [val1,val2,val3,val4],用中括号: ...

  8. python shelve模块_python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  9. python爬虫机器_Python常用的机器学习库|python爬虫|python入门|python教程

    https://www.xin3721.com/eschool/pythonxin3721/ Python在科学计算中用途广泛:计算机视觉.人工智能.数学.天文等.它同样适用于机器学习也是意料之中的事 ...

最新文章

  1. arm linux下 chkntfs,XPE开机自动扫描相关_Windows Embedded Standard 7 嵌入式定制的技术博客_51CTO博客...
  2. 当postgres的主键序列不同步时,如何重置?
  3. 架构师之路 — 数据库设计 — 关系型数据库的迁移与版本控制
  4. niginx高性能原因
  5. Error: Could not find or load main class CLASS的解决方法
  6. Java(第十五章)
  7. 封装时间转换工具类_利用swig封装C++的dll为C#方便使用
  8. flume+elasticsearch日志收集分析
  9. UIApplication详解
  10. uboot常用命令详解 2
  11. VML编程之------oval圆rect矩型《VML极道教程》原著:沐缘华
  12. 复制一段话,发现收费怎么办,下边帮你解决
  13. javaweb简单源代码_Java Web轻松学39 - JSP核心原理
  14. windows 网络编程大汇总
  15. 如何去掉抖音短视频水印----全网最好用的去抖音视频水印方法
  16. 物联网|物联网领域常用通信类型
  17. #触摸一体机##五指息屏#
  18. krpano教程之字幕添加,配合语音解说滚动字幕
  19. oracle会计科目明细请求,Oracle EBS R12财务月结基础
  20. 阿里巴巴股票缘何大跌?

热门文章

  1. SolrJ查询索引库
  2. SpringIOC容器中Bean的生命周期
  3. MySQL普通用户修改密码
  4. micropython驱动lcd_k210 编译micropython LCD驱动失败
  5. java 反射获取属性名和值_阿里P8架构师核心知识点整理:Java基础+spring原理+微服务+算法...
  6. 遇到一个git的大坑 src refspec master does not match any error: failed to push some refs to
  7. 并发基础篇(一): Java 并发性和多线程
  8. 【Spring注解系列08】@PostConstruct与@PreDestroy
  9. Integer类对象池与==问题:Integer a=34556,b=34556;但a==b为false
  10. POJ-4004:数字组合(用位移方法解组合数问题,Java版)