凯撒密码python编程简单_30个简单技巧提升你的Python编程(下)

4de50e59be19be0ae76e4032ff0b4465.png

欢迎关注 “小白玩转Python”,发现更多 “有趣”

16. 集合中的成员测试 有时,我们需要在将操作应用于集合或匹配项之前,会测试集合中是否存在某个元素。惯用的方法是使用 in 关键字。
>>> a = ('one', 'two', 'three', 'four', 'five')>>> if 'one' in a:...     print('The tuple contains one.')... The tuple contains one.>>> b = {0: 'zero', 1: 'one', 2: 'two', 3: 'three'}>>> if 2 in b.keys():...     print('The dict has the key of 2.')... The dict has the key of 2.
17. 使用 Get ()检索字典中的值 我们通常可以在方括号中指定键来检索键的值。但是,当密钥在字典中不存在时,将引发错误。当然,我们可以使用 try/except 来解决这个问题。相反,我们可以使用 get()方法,该方法允许我们在键不在字典中时使用默认值。
>>> number_dict = {0: 'zero', 1: 'one', 2: 'two', 3: 'three'}>>> number_dict[5]Traceback (most recent call last):  File "", line 1, in <module>KeyError: 5>>> number_dict.get(5, 'five')'five'
18. 获取一个字典中值最大的键 对于字典,我们有时需要找出值最大的键。我们可以先在一个所有值的列表中找到最大值的索引,然后从另一个存储所有键的列表中找到对应的键。或者,更简单的方法是在 max() 函数中指定 key 值。 为简单起见,我们不考虑最大值可能有重复值的情况。此外,同样的方法也可以用 min ()函数来寻找最小 key 值。
>>> model_scores = {'model_a': 100, 'model_z': 198, 'model_t': 150}>>> # workaround>>> keys, values = list(model_scores.keys()), list(model_scores.values())>>> keys[values.index(max(values))]'model_z'>>> # one-line>>> max(model_scores, key=model_scores.get)'model_z'
19. 使用 print() 函数进行调试 对于较小的项目,我们总是可以使用 print ()函数来帮助我们调试。我们在教学中也经常使用这个函数。对于 print ()函数,我们经常使用一些技巧。第一种是结束除默认换行符以外的字符串,第二种是使用 f-string,它允许我们创建包含一些表达式的字符串。
>>> for i in range(5):...     print(i, end=', ' if i < 4 else '\n')... 0, 1, 2, 3, 4>>> for i in range(5):...     print(f'{i} & {i*i}', end=', ' if i < 4 else '\n')... 0 & 0, 1 & 1, 2 & 4, 3 & 9, 4 & 16
20. walrus 操作符 walrus 操作符(: =)是 Python 3.8 + 中的一个新特性。它只是赋值表达式的另一个名称ーー赋值到表达式中的一个变量。通常,当一个表达式使用一个变量时,变量必须在前面声明。使用 walrus 操作符,可以在表达式中包含变量赋值,并且可以立即使用变量。
>>> a = ['j', 'a', 'k', 'd', 'c']>>> if (n := len(a))%2 == 1:...     print(f'The number of letters is {n}, which is odd.')...The number of letters is 5, which is odd.
21. 字符串分割 当我们处理字符串时,通常的任务是将字符串分割成单词列表。在这种情况下,我们可以使用 split()函数,该函数接受一个分隔符并可选最大分隔。一个相关的函数是 rsplit()函数,它有一个类似的功能,除了它在设置时开始从右侧分割以满足最大分割要求。
>>> sentence = 'this is, a python, tutorial, about, idioms.'>>> sentence.split(', ')['this is', 'a python', 'tutorial', 'about', 'idioms.']>>> sentence.split(', ', 2)['this is', 'a python', 'tutorial, about, idioms.']>>> sentence.rsplit(', ')['this is', 'a python', 'tutorial', 'about', 'idioms.']>>> sentence.rsplit(', ', 2)['this is, a python, tutorial', 'about', 'idioms.']
22. 使用 join() 连接字符串 在处理字符串时,我们有时需要通过连接一个迭代(例如,list,tuple)中包含的一系列字符串来创建单个字符串。在这种情况下,我们可以使用所需的分隔符调用的 join()函数。
>>> words = ('Hello', 'Python', 'Programmers')>>> '!'.join(words)'Hello!Python!Programmers'>>> words_dict = {0: 'zero', 1: 'one', 2: 'two', 3: 'three'}>>> '&'.join(words_dict.values())'zero&one&two&three'
23. map() 函数 map()函数是一个高阶函数(即使用函数作为参数或返回函数作为输出的函数)。它有一个通用的 map 格式(函数,迭代器) ,将函数应用于可迭代的函数,并返回一个 map 对象,这是一个迭代器。迭代对象的数量应该与函数所需的参数数量相匹配。 在下面的示例中,内置 pow()函数需要两个参数。当然,也可以使用自定义函数。顺便说一下,当我们使用 map()函数创建一个列表时,我们可以使用列表理解来达到同样的效果。
>>> numbers = (1, 2, 4, 6)>>> indices = (2, 1, 0.5, 2)>>> # use map()>>> list(map(pow, numbers, indices))[1, 2, 2.0, 36]>>> # list comprehensions>>> [pow(x, y) for x, y in zip(numbers, indices)][1, 2, 2.0, 36]
24. filter()函数 filter()函数用于使用指定的函数或 lambda 函数对序列进行过滤。这个函数返回一个过滤器对象,它是一个迭代器。总的来说,它的用法与 map()函数非常相似。
>>> def good_word(x: str):...     has_vowels = not set('aeiou').isdisjoint(x.lower())...     long_enough = len(x) > 7...     good_start = x.lower().startswith('pre')...     return has_vowels & long_enough & good_start... >>> words = ['Good', 'Presentation', 'preschool', 'prefix']>>> list(filter(good_word, words))['Presentation', 'preschool']
25. 找出列表中最常见的元素 当我们使用列表来记录可能有重复元素的东西时,比如说跟踪一系列游戏的赢家,找出谁赢得了最多的时间是一个相关的任务。它可以通过使用 max()函数通过指定 key 来实现,通过集合中元素的计数来求出最大值。
>>> winnings = ['John', 'Billy', 'Billy', 'Sam', 'Billy', 'John']>>> max(set(winnings), key = winnings.count)'Billy'
26. 跟踪列表中元素的频率 根据上面的例子,我们也想知道非冠军选手在比赛中的表现,这样我们就可以知道第二名和第三名。要做到这一点,我们需要知道每个玩家有多少奖金。我们可以使用字典解析和带有 lambda 函数的 sorted()函数。
>>> winnings = ['John', 'Billy', 'Billy', 'Sam', 'Billy', 'John']>>> tracked = {item: winnings.count(item) for item in set(winnings)}>>> sorted(tracked.items(), key=lambda x: x[1], reverse=True)[('Billy', 3), ('John', 2), ('Sam', 1)]
27. 检查对象的类型 检查对象的类型是 Python 中自省主题的一部分。有时候,在应用相应的函数之前,我们需要知道一个对象是否属于某种类型。为此,我们可以使用 type()或 isinstance()函数,后者是一种更灵活的方法,允许一对多的检查。
>>> def check_type(number):...     if type(number) == int:...         print('do something with an int')...     if isinstance(number, (int, float)):...         print('do something with an int or float')... >>> check_type(5)do something with an intdo something with an int or float>>> check_type(4.2)do something with an int or float
28. any()函数 假设我们有一个记录列表来跟踪约翰到达工作地点的时间。一个用例是,我们想知道他这周是否迟到,在这种情况下,any()函数非常方便。如果布尔列表中的任何元素为 True,则此函数返回 True。
>>> arrival_hours = {'Mon': 8.5, 'Tue': 8.75, 'Wed': 9, 'Thu': 8.5, 'Fri': 8.5}>>> arrival_checks = [x>8.75 for x in arrival_hours.values()]>>> any(arrival_checks)True
29. all()函数 根据上面同样的例子,我们还想知道他是否总是在整个星期的9:30之前到达工作地点。为了测试是否是这种情况,我们可以使用 all()函数,它只有在布尔列表中的所有元素都为 True 时才返回 True。
>>> arrival_checks_all = [x<9.5 for x in arrival_hours.values()]>>> all(arrival_checks_all)True
30. 在文件中使用 with 关键字 当我们处理一个文件时,我们需要打开它,处理内容,然后关闭它。如果在使用后没有关闭该文件,则该文件可能在一段时间内不可用。在这种情况下,with 关键字非常有用。如下所示,文件将在使用后自动关闭。
>>> with open('a_file.txt') as file:...     pass...>>> file.closedTrue
结束语 本文不打算提供 Python 编程中惯用法的详尽列表。相反,它试图向您展示一些常见的习惯用法,其中大部分我们可以应用到日常的 Python 编程中。 在本文中,我一定遗漏了 Python 编程中的一些习惯用法。因此,如果您认为有什么方便的东西可以与其他 Python 程序员分享,欢迎留下您的回复。

·  END  ·

HAPPY LIFE

e26245d2006a7a6510ef9d462a3c6380.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值