python逼格提升
2024-09-04 23:15:55
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)
最新文章
- Linux CentOS7通过yum命令安装Mono(尝先安装模式)
- docker 常用命令(*)
- Git bash下中文乱码问题
- endnote参考文献格式设置
- 一个问题提交的实例(js原生动画,原生ajax,js引用加参数)
- Maven安装和配置,eclipse创建Maven项目
- 错误ERROR datanode.DataNode (DataXceiver.java:run(278)) - hadoop07:50010DataXceiver error processing unknown operation src:127.0.0.136479 dst:127.0.0.150010
- C#命令模式-设计模式学习
- iometer测试工具
- 执行python文件
- 学号 20175201张驰 《Java程序设计》第4周学习总结
- odoo开发笔记--from视图隐藏顶部&;tree视图保留
- 修改注册表.exe的文件目录
- php 图形用户界面GUI 开发
- 从香港机房引入google/bitbucket路由
- Asp.Net Core WebAPI入门整理(四)参数获取
- u-boot中环境变量的实现
- HTTP 错误 404.2 - Not Found 由于 Web 服务器上的&ldquo;ISAPI 和 CGI 限制&rdquo;列表设置,无法提供您请求的页面。
- getline读取整行文本// isprint
- Machine Learning(CF940F+带修改莫队)