来源:
https://towardsdatascience.com/4-hidden-python-features-that-beginners-should-know-ec9de65ff9f8
翻译:小马
学习是没有止境的,你永远也学不完所有的Python编程知识。在学习过程中会不断地发现Python中有用的新特性,并且可能被需要学习的新特性吓到。
没有一本书或一个网站能够包含Python的所有内容,甚至官方文件也做不到,Python有无限的可能性。
我多年来一直在用Python编写代码,并且发现了一些有趣且独特的Python特性,其他编程语言找不到这类的特性,下面是Python初学者可能会发现的4个隐藏的Python特性。
1. For-else循环
常见的Python条件语句有:while循环,for循环,if-else语句。
那么 for-else语句呢?首先看下面的代码和对应的结果:
def test(nums):
for i in nums:
if i == 0: # if the condition is satisfied, it hits break and the else block will not run
print('There is a 0.')
break
else:
print('There are no 0s.')
test([1,2,3,0])
test([1,2,3])
#>
There is a 0.
There are no 0s.
else块中的代码只有在for循环结束了且没有遇到break语句时才会运行。
这样做的目的是什么?假设用户有3次机会输入正确的密码,只有输入正确的密码,break语句才会激活;若连续3次输入错误的密码,那么会执行else块的语句,给出输入错误密码的结果,如锁定用户不能够使用该系统。
2. 比较运算符
如果你需要检查a中的值是否在0和100的范围内,一般的编码方式是首先进行两次的比较,并使用and操作符将它们组合起来,如 0 <= a and a<=100,这是很容易实现的。
若以一种更易于阅读和直观的方式来编写它们:0 <= a <= 100,Python解释器会将它们分开并读取比较操作,含义与 0<=a and a <= 100一致,如下代码:
a = 25
0 <= a <= 100
0 <= a and a <= 100
#>
True
True
3. 扩展切片(Extended Slices)
我们可以使用语法 a[start:stop:step]分割列表a,这3个参数都是可选的。分割列表是从start开始,stop结束的部分序列,step为索引增加的步长,且步长可以是整数或负数。
a = list(range(10))
print(a[::2])
print(a[3::-1])
#>
[0, 2, 4, 6, 8]
[3, 2, 1, 0]
若设置a[::-1],相当于start,stop都为默认值,step=-1表示对列表进行翻转。
若设置a[::],相当于start,stop,step都为默认值,输出完整列表。
4. 值交换
如何在Python中交换两个对象的值?就像在其他语言所作的那样(例如C语言),只需创建一个临时对象,如下代码:
# Standard way to swap values of two objects in other languages
temp = a
a = b
b = temp
但这种编写方法可读性较差,且远非优雅。实际上,你可以使用Python中的一行代码就能轻松的交换这些值。
# Standard Python way to swap values
b, a = a, b
为什么可以这样编写?解释器首先计算右边的值并在内存中创建一个元组(a,b),然后计算左侧,将tuple中的两个元素打开并分别赋值给b和a,实际上交换了分类给a和b的对象。
欢迎扫码关注: