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. sum-root-to-leaf-numbers——dfs

    Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number. ...

  2. Solaris 下解决上网问题以及远程登录问题

    解决乱码问题 参考文章 http://www.jb51.net/os/Solaris/1656.html solaris 显示乱码的解决方法 现象: 利用命令 : LANG=zh; export LA ...

  3. php empty、isset、is_null区别

    有关 PHP 的 empty(),isset() 还有 is_null() 这三个函数的用法讨论得已经很多了,而且很多资料也未必能说得很清楚.这里再重复一次,但不是从概念去说,直接用程序例子来说话,应 ...

  4. Codeforces Round #267 (Div. 2) B. Fedor and New Game

    After you had helped George and Alex to move in the dorm, they went to help their friend Fedor play ...

  5. Mac终端处理MySql

    进入数据库: mysql -u root -p 随后输入密码:root   原文出处: GarveyCalvin的博客(@GarveyCalvin) MySQL有很多的可视化管理工具,比如“mysql ...

  6. easyui datagrid 加载静态文件中的json数据

    本文主要介绍easyui datagrid 怎么加载静态文件里的json数据,开发环境vs2012, 一.json文件所处的位置 二.json文件内容 {"total":28,&q ...

  7. vmware安装操作系统

    安装的时候,直接选择“从光盘或者映像安装”就可以了,很方便的.不需要再去从u盘什么的安装了.

  8. ZeroMQ Distributed Messaging

    ZeroMQ \zero-em-queue\, \ØMQ\: Ø  Connect your code in any language, on any platform. Ø  Carries mes ...

  9. MYSQL数据库装在C盘的,怎么移到D盘

    直接移动过去就是了,遇到问题再根据提示修改. 一般需要移动前删除已经安装的MYSQL服务,命令是:mysqld.exe --remove移动后重新安装服务,命令是:mysqld.exe --insta ...

  10. android中getWidth()和getMeasuredWidth()

    getMeasuredWidth()获取的是view原始的大小,也就是这个view在XML文件中配置或者是代码中设置的大小.getWidth()获取的是这个view最终显示的大小,这个大小有可能等于原 ...