每个新手程序员都应该知道的 Python 技巧

简介: 每个新手程序员都应该知道的 Python 技巧

作者:Peter Nistrup

翻译:周萝卜

译文出品:萝卜大杂烩

每个新手程序员都应该知道的 Python 技巧

当下,Python 比以往的任何时候都更加流行,人们每天都在实践着 Python 是多么的强大且易用。

我从事 Python 编程已经有几年时间了,但是最近6个月才是全职的。下面列举的这些事情,是我最开始使用 Python 的时候,就希望清楚的:

  • 字符串操作
  • 列表推导
  • Lambda 和 Map 函数
  • 在一行里使用 if elif 和 else 条件判断
  • zip() 函数

字符串操作

Python 非常擅长使用类似数学运算符 + 和 * 来操作字符串

>>> 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] 就可以,同时该操作还不仅仅局限于字符串操作。

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

那么对于包含多个字符串的列表呢,我们甚至可以做一个 Yoda-translator !

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

在上面的代码中,我们使用了 .join() 方法,用空格把反转列表里的元素拼接了起来,并且增加了感叹号。

列表推导

哦,天啊!一旦我知道了这些,我的整个世界都改变了(可能还没有真实发生,但是已经接近了)。这是以中国强大的、直观的且可读的方法来快速的操作列表。

假如我们有这样一个函数,取一个数的平方再增加5

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

现在如果我们要把该函数应用到一个列表的所有奇数当中,如果不了解列表推导式,你可能会这么写

>>> 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]

但是我们还有更简单的方法!

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

列表推导适用于 [ expression for item in list ] 条件,同时如果那你想要应用一些布尔条件,例如上面获取奇数的条件:[ expression for item in list if conditional ],那么它和下面的写法是一致的

>>> for item in list:
>>>     if conditional:
>>>         expression

很酷,不过我们还可以做的更好,因为我们根本不需要函数“stupid_func”

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

Lambda 和 Map

Lambda

Lambda 有一点奇怪,但是就像我介绍的其他内容一样,只要你去使用它,就会发现它是多么的强大和直观。

Lambda 其实就是一个小的匿名函数。为什么要匿名呢?这是因为 Lambda 常常用来执行小型简单的操作,而这些操作往往不需要使用 def my_function() 来定义正式的函数

我们还是以上面的例子为例,对一个数进行平方并加5。在上面的代码中我们定义了一个函数 def stupid_func(x),现在让我们使用 Lambda 来重新创建它

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

那么,为什么要使用这种奇怪的语法呢?其实这种写法的用处就体现在,我们不要定义实际的功能,就可以实现一些简单的操作。我们继续以数字列表为例,如果我们想对下面的列表进行排序,一种方法是使用 sorted()

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

这样确实可以了,但是,如果我们想按照元素平方数的大小来排序,使用 Lambda 就非常方便了。可以使用 Lambda 来定义 sorted() 函数用于排序的 key

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

Map

Map 是一个用来将函数应用到序列的每个元素上,比如列表。假设我们必须要列出两个列表对应位置元素的乘积,那么该怎么做呢,可以使用 Lambda 和 Map

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

和下面的代码相比,Lambda 与 Map 的组合实在是太优雅了

>>> 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]

在一行里使用 if elif 和 else 条件判断

有时,你可能会写出如下的代码

>>> x = int(input())
>>> if x >= 10:
>>>     print("Horse")
>>> elif 1 < x < 10:
>>>     print("Duck")
>>> else:
>>>     print("Baguette")

运行此命令时,系统会提示你从 input() 函数输入内容,假设我们输入5,我们将得到 Duck。但是我们也可以像下面这样写

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

这实在是太简单了!快去阅读你的旧代码,你会发现有太多的地方可以将这种简单的 if else 判断替换成这种单行判断。

zip()

还记得在 Map 函数部分,我们并行处理两个列表的例子嘛,使用 zip() 会更加简单

假如我们有两个列表,一个包含名字,一个包含姓氏,怎样才能很好的合并它们呢,使用 zip()!

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

哇哦,有个地方错了,我的名字不叫 Peter Jensen,那么就可以调整如下

>>> print([' '.join(x) for x in zip(first_names, last_names[::-1])])
['Peter Nistrup', 'Christian Smith', 'Klaus Jensen']

结束语

我这里只是汇总了一个简单的清单,目的就是为了让你能够了解到 Python 可以优雅的做很多事情。如果你有任何不同的想法,可以留言哦!

相关文章
|
5月前
|
缓存 监控 程序员
Python中的装饰器是一种特殊类型的声明,它允许程序员在不修改原有函数或类代码的基础上,通过在函数定义前添加额外的逻辑来增强或修改其行为。
【6月更文挑战第30天】Python装饰器是无侵入性地增强函数行为的工具,它们是接收函数并返回新函数的可调用对象。通过`@decorator`语法,可以在不修改原函数代码的情况下,添加如日志、性能监控等功能。装饰器促进代码复用、模块化,并保持源代码整洁。例如,`timer_decorator`能测量函数运行时间,展示其灵活性。
50 0
|
2月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
41 1
|
3月前
|
设计模式 JSON 程序员
豆瓣评分9.4!Python程序员必读的《流畅的Python》,放这里了!
Python 官方教程的开头是这样写的:“Python 是一门既容易上手又强大的编程语言。””这句话本身并无大碍,但需要注意的是,正因为它既好学又好用,所以很多Python程序员只用到了其强大功能的一小部分,只需要几个小时,经验丰富的程序员就能学会用 Python 写出实用的程序。 然而随着这最初高产的几个小时变成数周甚至数月,在那些先入为主的编程语言的影响下,开发者们会慢慢地写出带着“口音”的 Python 代码。即便 Python 是你的初恋,也难逃此命运。因为在学校里,亦或是那些入门书上,教授者往往会有意避免只跟语言本身相关的特性。
|
3月前
|
设计模式 JSON 程序员
豆瓣评分9.4!Python程序员必读的《流畅的Python》,放这里了!
Python 官方教程的开头是这样写的:“Python 是一门既容易上手又强大的编程语言。””这句话本身并无大碍,但需要注意的是,正因为它既好学又好用,所以很多Python程序员只用到了其强大功能的一小部分,只需要几个小时,经验丰富的程序员就能学会用 Python 写出实用的程序。 然而随着这最初高产的几个小时变成数周甚至数月,在那些先入为主的编程语言的影响下,开发者们会慢慢地写出带着“口音”的 Python 代码。即便 Python 是你的初恋,也难逃此命运。因为在学校里,亦或是那些入门书上,教授者往往会有意避免只跟语言本身相关的特性。
|
3月前
|
程序员 Python
[oeasy]python0028_女性程序员_Eniac_girls_bug_Grace
回顾上次内容,我们了解到 `.py` 文件中的代码是按顺序一行行被解释执行的,可以使用 `pdb3 hello.py` 来调试程序。此外,我们探讨了“bug”这一术语的由来,它最早是在 1947 年由 Grace Murray Hopper 发现的一只真正的飞蛾所引起的计算机故障,从此“debugging”成了查找并修复程序错误的过程。早期的程序员大多为女性,因为她们通常更加细心且有耐心,这些特质对于检查错综复杂的线路和编程工作至关重要。编程与编织有着相似之处,都需要细致和有条理的操作。最后,我们认识到 bug 的存在是程序员工作的基础,没有 bug 就不需要程序员去修正它们。
41 3
|
3月前
|
存储 JSON 程序员
Python文件操作与数据持久化:强大功能简化存储管理,助力程序员高效实现业务逻辑
【8月更文挑战第6天】数据是现代计算机程序的核心,但其存储与管理常常构成开发挑战。Python凭借其强大的文件操作与数据持久化机制,显著提升了编程效率。Python的文件处理简单直观,通过内置`open`函数即可轻松实现文本或二进制文件的读写。例如,仅需几行代码就能完成文本写入。此外,Python支持多种数据持久化方案,如文本文件、CSV、JSON及数据库操作。利用内置`json`模块,可以便捷地进行JSON数据的序列化与反序列化,实现数据的有效存储与检索。这些特性使得Python成为数据管理和存储的理想选择,让开发者能够更加专注于业务逻辑的实现。
43 0
|
4月前
|
存储 大数据 程序员
逆袭吧,程序员!Python堆与优先队列的使用秘籍,助你轻松解决复杂问题!
【7月更文挑战第9天】Python的堆和优先队列是高效工具,对比列表在删除最小元素时的O(n)复杂度,堆提供O(log n)操作。优先队列利用堆数据结构,按优先级处理元素,而非FIFO。示例中,heapq模odule创建最小堆实现任务优先级执行,显示了其在解决复杂问题时的威力,助力程序员提升效率,实现编程挑战的逆袭。
47 2
|
4月前
|
程序员 Python
程序员必看!Python闭包与装饰器的高级应用,让你的代码更优雅、更强大
【7月更文挑战第7天】Python中的闭包和装饰器是高级特性,用于增强代码功能。闭包是内部函数记住外部作用域的变量,常用于动态函数和函数工厂。示例展示了`make_multiplier_of`返回记住n值的`multiplier`闭包。装饰器则是接收函数并返回新函数的函数,用于不修改原函数代码就添加功能。`my_decorator`装饰器通过`@`语法应用到`say_hello`函数上,展示了在调用前后添加额外行为的能力。这两种技术能提升代码的优雅性和效率。
38 3
|
4月前
|
监控 程序员 持续交付
`pylint`是一个高度可配置的Python代码分析工具,它可以帮助程序员查找代码中的错误、样式问题、可能的bug以及不符合编码标准的部分。
`pylint`是一个高度可配置的Python代码分析工具,它可以帮助程序员查找代码中的错误、样式问题、可能的bug以及不符合编码标准的部分。