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列表的浅副本

 

posted @   新兵蛋Z  阅读(147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-03-27 Zabbix——使用邮件报警
点击右上角即可分享
微信分享提示