1.合并可以匹配的条件

 s1 = 7
if s1 > 5 and s1 < 10:
print(s1) s1 = 7
if 5 < s1 < 10:
print(s1)

2.if条件避免与布尔值比较

 l1 = []
if l1 != []:
print('l1 is not empty')
else:
print('l1 is empty') l1 = []
if l1:
print('l1 is not empty')
else:
print('l1 is empty')

此时等价于if True,属于False的值:None、False、数字0、空列表元组字典集合,但是有的时候数字0我们是有用的,所以我们用is来比较

 s1 = 0
if s1:
print('s1 is not empty')
else:
print('s1 is empty') s2 = 0
if s2 is not None:
print('s2 is not empty')
else:
print('s2 is empty')

so,我们可以看出is与==的意义是不同的,事情的真相是is比较的是内存地址,None在python是单例的,==比较的是值

 l1 = [0, 1, 2]
l2 = [0, 1, 2]
if l1 is l2:
print('l1 is l2')
else:
print('l1 is not l2') if l1 == l2:
print('l1 == l2')
else:
print('l1 != l2')

3.简单的if else用三元运算代替

 if 1 == 2:
s1 = '北方姆Q'
else:
s1 = 'bfmq' s1 = '北方姆Q' if 1 == 2 else 'bfmq'

4.enumerate迭代器,可以循环的对象可以使用,返回两个值,第一个是位置,第二个是对应元素

 l1 = ['dfmq', 'xfmq', 'nfmq', 'bfmq']
for index, value in enumerate(l1):
print('%d %s' % (index, value))

5.for+else表示当循环完for内所有后才会执行else下的程序,中途break则不会

 l1 = [11, 22, 33, 44]

 for s1 in l1:
if s1 <= 100:
break
else:
print('喵喵喵喵!')

6.少定义布尔返回值变量

 def low1(a, b, c):
flag = False
if a == b == c:
flag = True
return flag ret = low1(6, 6, 6) def low2(a, b, c):
if a == b == c:
return True
else:
return False ret = low2(6, 6, 6) def f1(a, b, c):
return a == b == c ret = f1(6, 6, 5)

7.被调用事不要抛出自定义异常

 def get_json_url(url):
try:
url = json.load(url)
return url except Exception as e:
print('something wrong!')
return None

这样第三方只会获得一个something wrong!信息,无法确定哪里出了错误,so
def get_json_url(url):
  return json.load(url)
这样异常会返回给调用者

8.多用EAFP,少用LBYL

 def get(user):
if user is None:
print('no user!')
print(user.info)
LBYL在进行程序前需要考虑前提条件是否成立,因此穿插了很多条件检查 def get(user):
try:
print(user.info) except NameError:
print('no user!')

9.连等号赋同值

 a = 10
b = 10
c = 10 a = b = c = 10
此时a=666,但是b跟c是不会变的哦~

10.python支持直接调换值哦

 10.python支持直接调换值哦
a = 10
b = 100
temp = a
a = b
b = temp a = 10
b = 100
a, b = b, a

11.多次调用对象方法时,可以用链式调用方法,避免中间产生过多变量及内存

 s1 = '  north is good!'
s2 = s1.strip()
s3 = s2.upper()
s4 = s3.replace('!', '?') s2 = s1.strip().upper().replace('!', '?')
当然过多了连续调用可能会影响到可读性,so,简短的调用可以写在一起,出现一个比较大变化时另起一行是比较好的

12.使用isinstance对不同类型参数进行对应操作

 def get_size(some_object):
if isinstance(some_object, (list, dict, str, tuple, set)):
return len(some_object)
elif isinstance(some_object, (bool, type(None))):
return 1
elif isinstance(some_object, (int, float)):
return int(some_object) print(get_size('bfmq'))
print(get_size([1, 2, 3, 4, 5]))
print(get_size(10.0))
print(get_size([]))

13.使用product精简多层嵌套循环

 from itertools import product

 x_list = ['a', 'b', 'c']
y_list = ['d', 'e', 'f']
z_list = [1, 2, 3] for x in x_list:
for y in y_list:
for z in z_list:
print(f"{x}:{y}:{z}") for x, y, z in product(x_list,y_list, z_list):
print(f"{x}:{y}:{z}")

14.使用any/all进行判断

 i_list = [x for x in range(10)]

 for i in i_list:
if i > 5:
print(True)
break if any(i > 5 for i in i_list):
print(True)

python逼格提升的更多相关文章

  1. python实战提升--1

    #python实战提升 1. 如何在列表.字典.集合中根据条件筛选数据? python中for _ in range(10)与for i in range(10)有何区别 下划线表示 临时变量, 仅用 ...

  2. Python菜鸟之路:Python基础-逼格提升利器:装饰器Decorator

    一.装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身 ...

  3. numba,让python速度提升百倍

    python由于它动态解释性语言的特性,跑起代码来相比java.c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显. 办法永远比困难多,numba就是解决py ...

  4. Python 为了提升性能,竟运用了共享经济

    大家或许知道,Python 为了提高内存的利用效率,采用了一套共用对象内存的分配策略. 例如,对于那些数值较小的数字对象([-5, 256]).布尔值对象.None 对象.较短的字符串对象(通常 是 ...

  5. Python性能提升小技巧

    第一部分 1-使用内建函数: 你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速 2-使用 join() 连接字符串. 你可以使用 + 来连接字符串. 但由于string ...

  6. 关于python性能提升的一些方案(上)

    一.函数调用优化(空间跨度,避免访问内存) 1.大数据求和,使用sum a = range(100000) %timeit -n 10 sum(a) 10 loops, best of 3: 3.15 ...

  7. 机器学习之路: python 实践 提升树 XGBoost 分类器

    git: https://github.com/linyi0604/MachineLearning 数据集被我下载到本地,可以去我的git上拿数据集 XGBoost提升分类器 属于集成学习模型 把成百 ...

  8. python之提升程序性能的解决方案

    Python在性能方面不卓越,但是使用一些小技巧,可以提高Python程序的性能,避免不必要的资源浪费. 1. 使用局部变量 尽可能使用局部变量替代全局变量,可以是程序易于维护并且有助于提高性能节约成 ...

  9. 【Spark机器学习速成宝典】模型篇07梯度提升树【Gradient-Boosted Trees】(Python版)

    目录 梯度提升树原理 梯度提升树代码(Spark Python) 梯度提升树原理 待续... 返回目录 梯度提升树代码(Spark Python) 代码里数据:https://pan.baidu.co ...

随机推荐

  1. mysql生产环境____主从同步修复案例

    一.   硬件环境 Master: Dell R720 Intel(R)Xeon(R) CPU E5-2640 v2 @ 2.00GHz MEM 64G.disk 4*2.5 SAS  网络4* 千兆 ...

  2. 不能hadoop-daemon.sh start datanode, 显示 错误: 找不到或无法加载主类 ”-Djava.library.path=.home.hadoop.apps.hadoop-2.6.4.lib”

    这两行代码是用来解决一个Hadoop,32位和64位不兼容的警告的,(这个警告可以忽略) 这两行加到mini2~min4后, export HADOOP_COMMON_LIB_NATIVE_DIR=$ ...

  3. 轻松搞定RabbitMQ(五)——路由选择

    转自 http://blog.csdn.net/xiaoxian8023/article/details/48733249 翻译地址:http://www.rabbitmq.com/tutorials ...

  4. UVA 1541 - To Bet or Not To Bet(概率递推)

    UVA 1541 - To Bet or Not To Bet 题目链接 题意:这题题意真是神了- -.看半天,大概是玩一个游戏,開始在位置0.终点在位置m + 1,每次扔一个硬币,正面走一步,反面走 ...

  5. 你必须了解的java内存管理机制(二)-内存分配

    前言 在上一篇文章中,我们花了较大的篇幅去介绍了JVM的运行时数据区,并且重点介绍了栈区的结构及作用,相关内容请猛戳!在本文中,我们将主要介绍对象的创建过程及在堆中的分配方式. 相关链接(注:文章讲解 ...

  6. Docker在centos下安装以及常见错误解决

    系列目录 Docker安装(使用阿里云镜像) Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收 ...

  7. Linux机器间ssh免密登录

    前言 一台Linux机器通过ssh的方式连接别的机器或通过scp的方式传输文件,都需要输入密码. 为了解决每次输入密码的困扰,可采用添加密钥的方式实现. 实现过程 源服务器A,目标服务器B. 1.在源 ...

  8. python中if __name__ == '__main__': 的解析(转载)

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  9. 《UNIX 环境高级编程》编译环境的搭建( 运行本专栏代码必读 )

    第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...

  10. yii框架之gii创建数据表相应的model类

    一.首先是在数据库中建立project须要的表: 二.然后,配置相应文件: 在project文件夹下yiiProject\protected\config\main.php.在50行定义了db应用组件 ...