6个必会的超实用Python开发技巧

Python越来越流行,因为它不但强大而且很容易掌握。我使用Python开发软件已经 有几年了,但直到这半年才成为专业Python开发者。在本文中我将介绍 列表推导式、Lambda表达式、拉链函数等6个超实用的Python开发技巧。

  • 字符串操作
  • 列表推导式
  • lambda表达式
  • 映射函数
  • 单行实现if、elif和else条件判断
  • 拉链函数

1、字符串操作

可以使用算数表达式来操作字符串,例如 + 和 * :

1
2
3
4
5
6
>>> my_string = "Hi Medium..!"
>>> print(my_string * 2)
Hi Medium..!Hi Medium..!

>>> print(my_string + " I love Python" * 2)
Hi Medium..! I love Python I love Python

也可以使用[::-1]来轻松地翻转字符串,而且不局限于字符串!

1
2
3
4
5
>>> print(my_string[::-1])
!..muideM iH>>> my_list = [1,2,3,4,5]

>>> print(my_list[::-1])
[5, 4, 3, 2, 1]

翻转操作可以应用于单词列表吗?当然!我们可以开发一个Yoda翻译器:

1
2
3
>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!

上面我们使用.join()方法用空格符号反向连接列表中的所有成员,最后再添加一个感叹号。

2、列表推导式

你知道吗,当我掌握这个技巧时,我感觉整个世界都变了!这种操作列表 的方式真的太强大、直观而且可读性高。

例如,假设我们有一个函数来计算输入参数的平方再加5:

1
2
>>> def stupid_func(x):
>>> return x**2 + 5

现在我们要用这个函数处理一个列表中的所有奇数序号的成员,如果你不知道 列表推导式,可能会这样来实现:

1
2
3
4
5
6
7
>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>> if x % 2 != 0:
>>> new_list.append(stupid_func(x))
>>> print(new_list)
[6, 14, 30]

但是有更简单的实现方法!

1
2
3
>>> my_list = [1, 2, 3, 4, 5]
>>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]

列表推导式的语法是

1
[ expression for item in list ]

还可以使用额外的条件判断表达式:

1
[ expression for item in list if conditional ]

上面这个表达式实际上等价于:

1
2
3
>>> for item in list:
>>> if conditional:
>>> expression

实际上你还可以进一步优化,因为我们其实不需要那个stupid_func:

1
2
>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
[6, 14, 30]

COOOOOOOOOOOOOOOOOOOOOOOOOOOL!

3、Lambda表达式

Lambda看起来有点怪异,不过和这篇文章中的其他内容一样,Lambda 超级强大,而且一旦你理解了就会发现它其实很直观。

基本上Lambda表达式就是一个匿名函数。为什么要匿名?这是因为Lambda 表达式通常应用于执行简单的操作,因此使用def来正式定义一个函数 就显得有点累赘了。

让我们以上面的计算为例看一下Lambda的使用方法。在上面的代码中 我们使用正式的函数声明语法def stupid_func(x),现在让我们使用 Lambda表达式:

1
2
3
>>> stupid_func = (lambda x : x ** 2 + 5)
>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]

为什么要使用这么怪异的语法?Lambda的好处在于你可以执行一些简单 的操作而无需提前定义一个函数。例如,假设有一组数值,我们如何 用Python来排序?一种方法是使用sorted()函数:

1
2
3
>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]

sorted()默认是按升序对列表成员排序,但是如果我们希望按成员的 平方和排序,就可以使用lambda表达式了:

1
2
>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]

4、映射函数 map

映射函数map()可以使用指定的函数来处理像列表之类的成员序列。例如, 假设我们希望得到两个列表中对应成员的乘积的结果列表,应该怎么做? 使用Lambda表达式和映射函数就可以了!

1
2
>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
[4, 10, 18]

如果不使用Lambda和map的话,代码就没这么优雅了:

1
2
3
4
5
6
>>> x, y = [1, 2, 3], [4, 5, 6]
>>> z = []
>>> for i in range(len(x)):
>>> z.append(x[i] * y[i])
>>> print(z)
[4, 10, 18]

5、单行条件判断

在你的代码中可能会有这样的条件判断逻辑:

1
2
3
4
5
6
7
>>> x = int(input())
>>> if x >= 10:
>>> print("Horse")
>>> elif 1 < x < 10:
>>> print("Duck")
>>> else:
>>> print("Baguette")

运行上面的代码,会提示我们输入,假设输入5的话,就会显示 Duck。但是我们可以只用一行代码就实现同样的功能!

1
print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")

实在是妙!

6、拉链函数 zip

上面的映射函数map()对两个列表中并行地执行某个指定的处理函数。 拉链函数zip()比这还要简单。

假设我们有两个列表,一个记录人名,另一个记录姓氏,那么我们应该 如何合并得到一个全名列表?答案是使用zip()

1
2
3
4
>>> first_names = ["Peter", "Christian", "Klaus"]
>>> last_names = ["Nistrup", "Smith", "Jensen"]
>>> print([' '.join(x) for x in zip(first_names, last_names)])
['Peter Nistrup', 'Christian Smith', 'Klaus Jensen']

LALALA…


原文链接:Python tricks 101, what every new programmer should know.

汇智网翻译整理,转载请标明出处