Python 语法糖:你真的会用 Python 吗?
Python 语法糖:你真的会用 Python 吗?
[TOC]
人生苦短,我用 Python!
作为一门以简洁、优美为代表的语言,Python 受到众多开发者的喜爱。相信有部分 Python 的开发者们,知道“Python 之禅”即“The Zen of Python”,通过 import this
语句就可以看到,Python 创建者对 Python 语言书写规范的建议:
1 | The Zen of Python, by Tim Peters |
这篇文章,向大家介绍十个 Python 语法糖,意在帮助大家写出更加优美简洁的 Python 程序。
变量的交换
在 C语言等其他大部分语言中,变量的交换通常需要定义一个临时变量作为桥梁,但在 Python 语言中,下面的交换变量方式显得更加方便:
1 | // C语言中的变量交换 |
1 | # python 语言中的变量交换 |
字符串的格式化
通常在字符串的组合与拼接中,我们通常采用字符串和 + 号的形式将他们联系起来,你是否是这样的呢?
1 | name = 'Peter' |
但是,当变量很多时,这样的方式写会使程序变得十分的杂乱:
1 | name = 'Peter' |
就会显得十分的杂乱。因此,有下面几个解决措施:
format
函数
上面的代码,我们通过 format
以下面的形式进行解决:
1 | name = 'Peter' |
我们将 {}
去临时替代将要使用的变量名称,而最终,它会和 format
中传入的参数值一一对应,这种方式也可以避免了不同类型变量的类型转换。
f-string 写法
对于 Python 3.6 即以上的版本,下面这种写法相信是对字符串最简单的写法:
1 | name = 'Peter' |
我们只需要将字符串前写一个 ‘f ’, 花括号中的内容将会自动替换为其中的变量指定表达式的值。由于这里说明是表达式的值,意思是如果花括号中为{age+1}
那字符串中也将会被自动替换为‘18’,这里甚至可以传进去一个函数,那么字符串中将会显示函数中的返回值。
Yield 语法
接下来是一个斐波那契数列的生成函数如下所示:
1 | def fibonacci(n): |
这个程序的运行结果是打印出斐波那契数列的前十五个数。
通过 Python 的 yield
函数,下面的方式可以完整的替换上面的方式:
1 | def fibonacci(n): |
在调用这个函数时,每当我们计算出一个元素,yield 就会立马将这个元素给送出去,这样做的好处,我们并不需要等待整个列表生成完毕时才将他产出,解决一些耗时问题时,可以很有帮助。
简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。
列表解析式
假如说,我们有一个列表,里面存放了各个水果的名称,我们想要将其中的每个名字的首字母大写,将使用下面的方式:
1 | fruits = ['apple', 'pear', 'orange', 'banana', 'pineapple'] |
其实这里有一个更简单的方法:
1 | fruits = ['apple', 'pear', 'orange', 'banana', 'pineapple'] |
列表解析式在生成列表的过程中也可以有筛选的功能,假如我们要挑选所有首字母为 ‘a’ 的水果,我们可能会这样写:
1 | fruits = ['apple', 'pear', 'orange', 'banana', 'pineapple'] |
通过列表解析式的方式,我们可以很简洁的采用下面的方式代替:
1 | fruits = ['apple', 'pear', 'orange', 'banana', 'pineapple'] |
Enumerate 函数
Python 对循环的技巧。
如果我们同时想获取循环项的索引值和元素的内容,我们可以通过采用enumerate
函数的方法,具体使用可以见下所示;
1 | fruits = ['apple', 'pear','orange', 'banana', 'pineapple'] |
遍历方法
对上一条的衍生。
反向遍历
如果我们想反向遍历一个列表,我们可以采用下面的方法,即设置一个 reversed()
函数。
1 | fruits = ['apple', 'pear','orange', 'banana', 'pineapple'] |
按顺序遍历
如果我们想按照各个水果首字母在字典中的顺序,我们可以采用下面的方法,即设置一个 sorted()
函数。
1 | fruits = ['apple', 'pear','orange', 'banana', 'pineapple'] |
字典的合并
在这里我们有两个字典,分别存放用户的用户名和密码,我们要将他们合并为同一个字典,Python 中不允许对字典直接相加。因此可以采用下面的方式:
1 | a = {"tom": "112235", "xiaoming": "464323"} |
其实这里有更简单的 方法合并两个字典:
1 | a = {"tom": "112235", "xiaoming": "464323"} |
这里的两个 * 代表 Python 中的解包(unpacking),这里的 **a
和 **b
相当于将字典中的 a 和 b 中的内容直接填写到了这里。
三元运算符
在 Python 中我们常会用到下面的操作:根据某个条件的不同,将不同变量设置成不同的值
1 | if score > 60: |
而我们使用三元运算符可以直接改为这样:
1 | s = 'pass' if score > 60 else 'fail' |
序列解包
假如我们需要将一个字符串通过空格分割得到多个字符串,我们可以采用下面的方法:
1 | name = 'San Zhang' |
如果使用Python中的序列解包的方式,我们可以直接采用下面的方法:
1 | name = 'San Zhang' |
这里被解包的序列不一定是列表,也可以是元组,甚至是 range.
With 语句
在 Python 中,我们可以通过 open
语句打开一个文件,但在打开使用后,我们要即时调用 close 函数,如果不关闭文件,程序将会一直调用文件进程直到程序退出为止:
1 | f = open('test.txt', 'r') |
使用Python中的with语句可以避免程序员忘记调用close语句,它可以在文件调用完,自动关闭。
1 | with open('test.txt', 'r') as f: |
参考视频:B站 奇乐编程学院