原标题:30个神奇的 Python 技巧帮你写出更好的代码
作者 | Felix Antony
译者 | Sambodhi
策划&编辑 | 刘燕
本文提供了 30 个 Python 技巧,可以将你的逻辑变成更优雅的代码。
本文最初发表在 Medium 博客,经原作者 Felix Antony 授权,InfoQ 中文站翻译并分享。
Python 因其代码的简单性和可读性,在其他编程语言中相当受欢迎。它是最简单的编程语言之一,可以作为你的第一门语言。如果你是一个初学者,具备 Python 的基本概念,那么现在就是学习编写更好代码的最佳时机。
在 Python 中,有很多技巧,可以比以前更好地改进你的代码。本文将帮助你了解 Python 中可用的各种技巧和提示。不断地练习,直到它内化成你编程习惯的一部分。
1技巧 01:变量的多重赋值
Python 允许我们在一行中为多个变量赋值。变量可以用逗号分隔。在一行中为变量多重赋值有很多好处。它可用于为多个变量分配多个值,或为单个变量分配多个值。让我们来看一个问题陈述,其中,我们必须给变量 a 和 b 赋值 50 和 60。通常的代码如下所示:
a = 50
b = 60
print(a,b)
print( type(a))
print( type(b))
输出
5060
< class'int'>
< class'int'>
条件 I:等于变量的值
当变量和多个赋值的值相等时,每个值将存储在所有变量中。
a , b = 50 , 60
print(a,b)
print( type(a))
print( type(b))
输出
5060
< class'int'>
< class'int'>
这两个代码都给出了相同的结果。这就是使用一行赋值的好处。
条件 II:大于变量的值
让我们尝试增加前一个代码中的值的数量。可以将多个值赋给单个变量。将多个值赋给一个变量时,必须在变量名前使用星号。
a , *b = 50 , 60 , 70
print(a)
print(b)
print( type(a))
print( type(b))
输出
50
[ 60, 70]
< class'int'>
< class'list'>
第一个值将分配给第一个变量,第二个变量将从给定值中获取一组值。这将创建一个列表类型对象。
条件 III:一个值分配给多个变量
我们可以将一个值赋给多个变量。每个变量将使用等号来分隔。
a = b = c = 50
print(a,b,c)
print( type(a))
print( type(b))
print( type(c))
输出
505050
< class'int'>
< class'int'>
< class'int'>
2技巧 02:交换两个变量
交换是两个变量的值相互交换的过程。这在计算机科学的许多操作中都很有用。在这里,我编写了程序员用来交换值以及最佳解决方案的两个主要方法。
方法 I:使用临时变量
此方法使用一个临时变量来存储一些数据。以下代码是用临时变量名编写的。
a , b = 50 , 60
print(a,b)
temp = a+b #a=50 b=60 temp=110
b = a #a=50 b=50 temp=110
a = temp-b #a=60 b=50 temp=110
print( "After swapping:",a,b)
输出
5060
Afterswapping: 60 50
方法 II:不使用临时变量
下面的代码是在不使用临时变量的情况下交换变量。
a , b = 50 , 60
print(a,b)
a = a+b #a=110 b=60
b = a-b #a=110 b=50
a = a-b #a=60 b=50
print( "After swapping:",a,b)
输出
5060
Afterswapping: 60 50
方法 III:Python 中的最佳解决方案
这是使用 Python 交换变量的另一种方法。在上个技巧中,我们已经了解了多重赋值我们可以使用交换的概念。
a , b = 50 , 60
print(a,b)
a , b = b , a
print( "After swapping",a,b)
输出
5060
Afterswapping 60 50
3技巧 03:字符串反转
在 Python 中反转字符串还有一个很酷的技巧。用于反转字符串的概念成为字符串切片。任何字符串都可以在变量名之后使用符号 [::-1] 进行反转。
my_string = "MY STRING"
rev_string = my_string[::-1]
print(rev_string)
输出
GNIRTSYM
4技巧 04:在一行中拆分单词
在一行中拆分单词不需要特殊的算法。为此,我们可以使用关键字 split 。在这里,我编写了两种拆分单词的方法。
方法 I:使用迭代
my_string = "This is a string in Python"
start= 0
end= 0
my_list = []
forx inmy_string:
end= end+ 1
if(x== ' '):
my_list.append(my_string[ start: end])
start= end+ 1
my_list.append(my_string[ start: end+ 1])
print(my_list)
输出
['This ', 'is ', 'a ', 'string ', 'in ', 'Python']
方法 II:使用 split 函数
my_string = "This is a string in Python"
my_list = my_string.split(' ')
print(my_list)
输出
['This ', 'is ', 'a ', 'string ', 'in ', 'Python']
5技巧 05:将单词列成一行
这是与上一个部分相反的过程中。在这个部分中,我们将使用 join 函数将单词列表转换为单行。下面给出了使用 join 函数的语法。
语法:"".join(string)
my_list= [ 'This', 'is', 'a', 'string', 'in', 'Python']
my_string= " ".join(my_list)
输出
This isa stringinPython
6技巧 06:多次打印字符串
我们可以使用乘法运算符多次打印字符串。这是重复字符串的一种非常有效的方法。
n = int(input( "How many times you need to repeat:"))
my_string = "Pythonn"
print(my_string*n)
输出
How many timesyou need to repeat:3
Python
Python
Python
7技巧 07:使用加法运算符连接两个字符串
可以在不使用 join 函数的情况下连接各种字符串。我们可以使用加法运算符(+)来完成这个操作。
a = "I Love "
b = "Python"
print(a+b)
输出
ILove Python
8技巧 08:多个条件运算符
在一个程序中结合两个或多个条件运算符,我们可以使用逻辑运算符。但是,通过连接操作符也可以得到同样的结果。例如,当一个变量的值大于 10 且小于 20 时,打印某些内容,则代码将如下所示:
a = 15
if(a> 10anda< 20):
print( "Hi")
取而代之的是,我们可以将条件运算符组合成单个表达式:
a = 15
if(10 < a < 20):
print( "Hi")
输出
Hi
9技巧 09:在列表中查找最频繁的元素
在列表中出现次数最多的元素,那么它将是列表中最频繁的元素。下面的代码片段将帮助你从列表中获取最频繁的元素。
my_list = [1,2,3,1,1,4,2,1]
most_frequent = max(set(my_list),key=my_list.count)
print(most_frequent)
输出
1
10技巧 10:查找列表中所有元素的出现次数
前面的代码将给出最频繁的值。如果需要知道列表中所有唯一元素的出现次数,那么可以使用 collections 模块。collections 是 Python 中一个非常棒的模块,它提供了很多特性。 Counter 方法提供了一个包含元素和出现项对的字典。
fromcollections importCounter
my_list = [ 1, 2, 3, 1, 4, 1, 5, 5]
print(Counter(my_list))
输出
Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1})
11技巧 11:检查两个字符串的易位构词
如果一个字符串由另一个字符串中的字符组成,那么这两个字符串就是易位构词(Anagram)。我们可以使用来自 collections 模块的相同的 Counter 方法。
fromcollections importCounter
my_string_1 = "RACECAR"
my_string_2 = "CARRACE"
if(Counter(my_string_1) == Counter(my_string_2)):
print( "Anagram")
else:
print( "Not Anagram")
输出
Anagram
12技巧 12:创建带范围的数字序列
函数 range 对于创建数字序列很有用。它在许多代码片段中都很有用。Range 函数的语法如下:
语法:range(start, end, step)
让我们试着创建一个偶数列表。
my_list = list(range(2,20,2))
print(my_list)
输出
[ 2, 4, 6, 8, 10, 12, 14, 16, 18]
13技巧 13:多次重复元素
与字符串乘法类似,我们可以使用乘法运算符多次创建一个用元素填充的列表。
my_list = [3]
my_list = my_list*5
print(my_list)
输出
[ 3, 3, 3, 3, 3]
14技巧 14:在三元运算符中使用条件
在大多数情况下,我们在 Python 中使用嵌套的条件结构。可以用三元运算符代替单行,而不是使用嵌套结构。语法如下所示。
语法:Statement1 if True elseStatement2
age = 25
print( "Eligible") ifage>20 elseprint( "Not Eligible")
输出
Eligible
15技巧 15:使用 Python 进行列表理解
列表理解(List Comprehension)是从另一个列表中创建列表的一种非常紧凑的方式。请看以下代码。第一个是使用简单迭代编写的,第二个是使用列表理解创建的。
square_list = []
forx in range( 1, 10):
temp = x** 2
square_list. append(temp)
print(square_list)
输出
[ 1, 4, 9, 16, 25, 36, 49, 64, 81]
使用列表理解
square_list = [x**2 forx inrange(1,10)]
print(square_list)
输出
[ 1, 4, 9, 16, 25, 36, 49, 64, 81]
16技巧 16:将可变转换为不可变
函数 frozenset 用于将可变迭代对象转换为不可变对象。使用这个函数,我们可以冻结一个对象,而不改变它的值。
my_list = [1,2,3,4,5]
my_list = frozenset(my_list)
my_list[3]=7
print(my_list)
输出
Traceback (most recent calllast):
File"", line 3, in< module>
TypeError: 'frozenset'objectdoes notsupport item assignment
当我们在列表中应用 frozenset 函数时,项目分配是受限的。
17技巧 17:用 Floor 和 Ceil 函数进行四舍五入
Floor 和 Ceil 是数学函数,可用于浮点数。Floor 函数返回小于浮点值的整数,而 Ceil 函数返回大于浮点值的整数。要是用这个函数,我们必须导入 math 模块。
importmath
my_number = 18.7
print(math.floor(my_number))
print(math.ceil(my_number))
输出
18
19
18技巧 18:返回布尔值
有时我们必须通过检查某些参数的条件来返回布尔值。我们可以直接返回条件,而不是写 if else 语句。下面的代码将产生相同的输出。
方法 I:使用 If Else 条件
deffunction(n):
if(n> 10):
returnTrue
else:
returnFalse
n = int(input)
if(function(n)):
print( "Eligible")
else:
print( "Not Eligible")
方法 II:不使用 If Else 条件
deffunction(n):
returnn> 10
n = int(input)
print( "Eligible") iffunction(n) elseprint( "Not Eligible")
输出
11
Eligible
19技巧 19:在一行中创建函数
Lambda 是 Python 中的一个匿名函数,它可以在一行中创建函数。下面给出了使用 Lambda 函数的语法。
语法:lambda arguments: expression
x = lambda a,b, c: a+b+ c
print(x( 10, 20, 30))
输出
60
20技巧 20:对列表中所有元素应用函数
Map 是一个高阶函数,它为列表中所有元素应用特定的函数。
语法:map(function, iterable)
my_list = [ "felix", "antony"]
new_list = map(str.capitalize,my_list)
print(list(new_list))
输出
['Felix', 'Antony']
21技巧 21:将 Lambda 和 Map 函数一起使用
这个函数可以用 Python 中的 Lambda 函数替换。下面的代码用于创建数字列表的平方。
my_list = [1, 2, 3, 4, 5]
new_list = map(lambda x: x*x, my_list)
print(list(new_list))
输出
[ 1, 4, 9, 16, 25]
22技巧 22 从一个函数返回多个值
一个 Python 函数可以返回多个值,而不需要任何额外的需求。我们可以通过逗号分隔这些来返回值。
def function( n):
return1,2,3,4
a, b, c, d= function( 5)
print( a,b,c,d)
输出
12 3 4
23技巧 23:使用 Filter 函数过滤值
Filter 函数用于过滤可迭代对象中的一些值。Filter 函数的语法如下所示。
语法:filter(function, iterable)
defeligibility(age):
returnage>= 24
list_of_age = [ 10, 24, 27, 33, 30, 18, 17, 21, 26, 25]
age = filter(eligibility, list_of_age)print(list(age))
输出
[ 24, 27, 33, 30, 26, 25]
24技巧 24:在 Python 中合并两个词典
在 Python 中,我们可以合并两个字典,而不需要任何特定的方法。下面的代码是合并两个字典的示例。
dict_1 = {'One':1, 'Two':2}
dict_2 = {'Two':2, 'Three':3}
dictionary = {**dict_1, **dict_2}
print(dictionary)
输出
{ 'One': 1, 'Two': 2, 'Three': 3}
25技巧 25:获取对象的大小
内存的大小根据对象的类型的不同而不同。我们可以使用 sys 模块中的 getsizeof 函数来获取对象的内存。
importsys
a = 5
print(sys.getsizeof(a))
输出
28
26技巧 26:将两个列表合并为词典
Zip 函数在 Python 中有很多优点,使用 zip 函数,可以从两个列表中创建词典。
list_1 = [ "One", "Two", "Three"]list_2 = [1,2,3]dictionary = dict(zip(list_1, list_2))print(dictionary)
输出
{ 'Two': 2, 'One': 1, 'Three': 3}
27技巧 27:计算程序的执行时间
Time 是 Python 中另一个有用的模块,可以用来计算执行时间。
import timestart= time.clockforx inrange( 1000):passend= time.clocktotal = end- startprint(total)
输出
0 .00011900000000000105
28技巧 28:删除列表中的重复元素
出现多次的元素称为重复元素。我们可以简单地使用 typecasting 来删除重复的元素。
my_list = [1,4,1,8,2,8,4,5]my_list = list(set(my_list))print(my_list)
输出
[ 8, 1, 2, 4, 5]
29技巧 29:用 Python 打印月历
Calendar 模块有许多与日期的操作相关的功能。我们可以使用以下代码来打印月历。
importcalendarprint(calendar.month( "2020", "06"))
输出
June2020MoTu We Th Fr Sa Su12 3 4 5 6 789 10 11 12 13 141516 17 18 19 20 212223 24 25 26 27 282930
30技巧 30:使用 Zip 函数进行迭代
Zip 函数支持使用循环迭代多个可迭代的过程。在下面的代码中,两个列表同时被迭代。
list_1 = [ 'a', 'b', 'c']list_2 = [1,2,3]forx,y inzip(list_1, list_2):print(x,y)
输出
a1b2c3
结 语
我希望你喜欢本文。最后,你必须明白,学习这些技巧并非必须。但如果你学了这些技巧,你就可以在其他程序员中脱颖而出。要想熟练地编写代码,就必须进行持续不断的练习。
作者介绍:
Felix Antony,关于科学、技术和自我发展的技术作家。
参考阅读:
https://towardsdatascience.com/30-magical-python-tricks-to-write-better-code-e54d1642c255
InfoQ 写作平台欢迎所有热爱技术、热爱创作、热爱分享的内容创作者入驻!
还有更多 超值活动等你来!
填写申请,成为作者
开启你的创作之路吧~
点个在看少个 bug返回搜狐,查看更多
责任编辑: