Python——应该替换的语法
格式化字符串
-
使用原始字符串
如果字符串又很多反斜杠,请使用原始字符串
转义字符允许你在字符串字面量中插入原本不能包含的文本。
#其中的\是将'转义成字符串,而不是结束的'
index = 'Zophie\'s chair'
原始字符串是具有 r 前缀的字符串字面量,它不把反斜杠是为转义字符,而是作为普通的字符。
print(r'C:\user\data\Spam')
它不是一种不同的字符串数据类型,而只是用来输入包含多个反斜杠字符的字符串的边界方式。
常用来输入正则表达式或windows文件路径的字符串。
-
f-string格式化
使用f-string格式化字符串,也被称为字符串插值,用来嵌套其他字符串的字符串。
name, day, weather = 'AI', 'Sunday', 'sunny'
print(f'{name}, Today is {day} and it is {weather}')
#大括号中也可以包含完整的表达式
width, lenght = 10, 20
print(f'{width} * {lenght} = {width * lenght}')
#使用括号形式
width, lenght = 10, 20
print(f'{width} * {lenght} = {{width * lenght}}')
Python风格的字典
为了避免出现keyError的错误,可以使用get来进行字典内容的获取,并可以赋一个默认值在内。
user_info = {'name':'xi', 'age':'22', 'weight':'80KG'}
userName = user_info.get('username', None)
print(userName)
在进行判断和新增内容时的python风格
#常规实例
user_info = {'name':'xi', 'age':'22', 'weight':'80KG'}
if 'high' not in user_info:
user_info['high'] = ''
user_info['high'] += '177cm'
print(user_info)
#可以使用setdefault()方法.
user_info = {'name':'xi', 'age':'22', 'weight':'80KG'}
user_info.setdefault('name', '0') #如果high键存在,则什么也不做
user_info.setdefault('high', '0') #如果high键不存在,则创建key和value
user_info['high'] = '177cm' #覆盖值
user_info['high'] += '177cm' #加在值后
print(user_info)
使用collections.defaultdict()设置默认值
可以彻底避免KeyError,创建一个默认的字典类型。
import collections
user_info = collections.defaultdict() #添加空值时,将会报错
user_info = collections.defaultdict(str) #默认值为空字符串
# user_info = collections.defaultdict(int) #默认值为0
# user_info = collections.defaultdict(bool) #默认值为Flase
# user_info = collections.defaultdict(list) #默认值 空list
user_info['name'] = 'xi'
user_info['age'] = 22
print(user_info['name'])
print(type(user_info['age']))
使用字典来替换switch,Java之类的语言有switch语句,与if-elif-else类似。
由于python没有switch语句,所以可能很多的if和elif。
user_info = {'name':'xi', 'age':'22', 'weight':'80KG'}
#使用if来判断
for info in user_info.keys():
if info == 'name':
print(info)
elif info == 'age':
print(info)
else:
print('no_user_info')
#使用字典来判断,如果获取不到,就返回默认值
info = user_info.get('high','no_user_info')
print(info)
处理变量的值
#判断一个数字是否在某个范围内
#不符合Python风格的示例
if 42 < spam and spam > 99:
#Python风格的示例
if 42 < spam > 99:
赋值运算符可以用链式操作。可以在一行代码中为多个变量赋同样的值。
进行判断时,也同样适用。
#Python风格的示例
spam = eggs = bacon = 'string'
#Python风格的示例
spam = eggs = bacon = 'string'
spam == eggs == bacon == 'string'
判断一个变量是否为多个值时:
#不符合Python风格的示例
spam == 'cat' or 'dog' or 'eggs'
#Python风格的示例
spam = 'cat'
spam in ('cat', 'dog', 'eggs')
使用enumerate()而不是range()
当在一个列表或者其他序列上循环时,一般会使用range()和len()函数来生成从0到-1的索引整数。
an_list = ['aaa', 'bbb', 'ccc', ]
for i in range(len(an_list)):
print(i,an_list[i])
range(len())的传统写法比较直接,但不够理想,因为它的可读性不好。可以使用enumertate()来进行替换。
an_list = ['aaa', 'bbb', 'ccc', ]
for i,an in enumerate(an_list):
print(i, an)
如果不需要索引,那么就直接迭代即可。
an_list = ['aaa', 'bbb', 'ccc',]
for an in an_list:
print(an)
使用with语句替代open()和close()
如果不想出现调用后未关闭的情况。
try:
fileObj = open('test.txt','w')
eggs = 24 / 0
fileObj.close()
except:
print('错误')
这样调用后,会出现错误,但不能关闭文件,导致文件损坏。
更好的做法时使用with语句,它可以在执行顺序离开with语句块时,自动调用close()
with open('test.txt', 'w') as fileObj:
fileObj.write('Hello world!')
用is跟None做比较而不用==
==相等运算符时比较两个对象的值,而is身份运算符时比较两个对象的身份。将某个值跟None比较时,大多数情况应使用is,而非==
在特殊情况下,如果使用了运算符重载,即使spam指向None,表达式spam ==None也会等于True。
spam is None 将检查spam变量中的值是否真的是None,由于None是NoneType数据类型唯一的值,因此在任何Python程序中只有一个None对象。当变量指向None时,is None比较表达式总是为True.
class SomeClass:
def __eq__(self, other):
if other is None:
return True
spam = SomeClass()
spam == None
True
spam is None
False
如果时判断是否为None,那么建议使用is来进行判断。而判断True或False的时候,应该使用 if spam 或 if not spam
巧用浅拷贝
使用copy模块函数创建列表的浅副本会有更好的可读性。
import copy
spam = ['cat', 'dog', 'rat',]
eggs = spam #只复制列表的引用
eggs = spam[:] #复制spam列表的浅副本
eggs = copy.copy(spam) #复制spam列表的浅副本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-03-27 Zabbix——使用邮件报警