title: Python中的那些不为人知的奇技淫巧(1).md
toc: true
date: 2021-12-22 09:25:00


Python中的那些不为人知的奇技淫巧(1)

大家好我是秦良秦影,今天我们来唠唠python的那些炫酷的小技巧,看完之后保证你写出来的代码b格满满的同时短小精悍

链式比较

我们先来看一个C的例子:

int a = 0;
scanf("%d",&a);
if (a <= 0 && -5 <= a) {
    printf("%d",a);
}

好,不难看出上述C的代码要实现的功能是对输入的数字进行判断,如果该数字在[-5,0]之间,那么就输出该数字。

那么接下来,我们要用python来实现这个代码,此时,秦良秦影的舍友出现了,大声bb道:“这个我熟!看我怎么写!”

a = int(input())
if a <= 0 && -5 <= a:
    print(a)

嗯,很好,作为一个python初学者,能写成这样已经可以了。但是!我们今天的主题是什么?奇技淫巧!我们要的代码是什么?b格满满!

那我们接下来就一起看一下,如何更python的写出这段代码:

a = int(input())
if -5<=a<=0:
    print(a)

这么一看是不是就高大上了不少!

变量值互换

相信不少小伙伴在编程过程中经常会涉涉及到变量值互换的问题,其中,小编认为大部分人应当是这样写的:

int a = 5, b = 3;
int temp;
temp = a;
a = b;
b = temp;

当然,也有大佬是这么写的:

int a = 5, b = 3;
a=a^b;
b=b^a;
a=a^b;

不过,上述这些都 ,不!够!简!洁!

让我们看一下如何更python的写出这段代码:

a= 5
b = 3
a,b = b,a

是不是很简单!别人一看:哇!这个人代码怎么可以这样写,他不怕我报错的吗?

列表生成式

现在让我们再来看看编程中常用的数组有关的技巧👇

假设我们要构造这样的一个数组:一共100个元素,是从1到100的自然数的平方,我们用C来写的话可以这么写:

int array[100] = {0};
for(int i = 0;i<100;i++)
    array[i] = (i+1)*(i+1);

这样看的话C的代码确实已经很短了,但是!对于python来说,还是太长了,完成一个目的居然要三行代码,这简直太不python了!这时,就要邀请我们今天要介绍的主角——列表生成式~

通俗来讲,列表生成式是python内置的”一句话生成列表”功能。用列表生成式来编写上述代码的话

a = [x*x for x in range(1,101)]

仅此一句话,便已经完成了要构造的数组的生成,是不是很简洁又很有b格~

接下来我们来解析一下这行代码:

在 for 前面的 x*x 是一个表达式,它必须根据 x 计算出一个结果,然后将这个结果追加进当前数组中;

for后面的x in range(1,101)是将x元素从1迭代到100,对每一次迭代的元素都执行前面的表达式,计算出结果之后存入列表中。接下来我们将这一行代码转化为python的一般写法,便于我们对比:

a = []
for x in range(1,101):
    a.append(x*x)

这样一对比,大家是不是有点明白了~

在 for 循环后面还可以加上 if 条件判断,这样可以对生成的列表元素做进一步筛选:

a = [x*x for x in range(1,101) if x%2 == 0]

上述代码实现了仅向列表中添加偶数的平方,当然,也可以使用多重循环:

a = [x+y for x in "123456789" for y in "abcdefghi"]
print(a)

代码运行结果:

['1a', '1b', '1c', '1d', '1e', '1f', '1g', '1h', '1i', '2a', '2b', '2c', '2d', '2e', '2f',
 '2g', '2h', '2i', '3a', '3b', '3c', '3d', '3e', '3f', '3g', '3h', '3i', '4a', '4b', '4c',
 '4d', '4e', '4f', '4g', '4h', '4i', '5a', '5b', '5c', '5d', '5e', '5f', '5g', '5h', '5i',
 '6a', '6b', '6c', '6d', '6e', '6f', '6g', '6h', '6i', '7a', '7b', '7c', '7d', '7e', '7f',
 '7g', '7h', '7i', '8a', '8b', '8c', '8d', '8e', '8f', '8g', '8h', '8i', '9a', '9b', '9c',
 '9d', '9e', '9f', '9g', '9h', '9i']

好,今天的技巧教学就到这里了,我是秦良秦影,我们下次再见~