【python】python语法糖

python 语法糖

1. 什么是语法糖

语法糖是由编程语言提供的一种可以让我们写出来的代码在不影响语句执行的功能的条件下,能够让我们的代码看起来更简洁和美观的一种语法。

很多人刚开始接触语法糖的时候,总会说这样一句:“最讨厌语法糖,不好好说话”,当学会使用了语法糖之后:
【python】python语法糖_第1张图片

要说语法糖这东西,其实可以联想到C语言大神,能把宏定义玩出花来,被玩出花来的宏我愿称之为自创语法糖。

2. 经典的 a 和 b

当我们需要交换两个数字的值的时候,相信很多人都写过这句代码

a, b = 10, 20
t = a
a = b
b = t
print(a, b)

python给我们提供了一种交换a 和 b的值的语法糖

a, b = 10, 20
a, b = b, a
print(a, b)

程序输出为:

20 10

实际上,在python内部,这句a, b = b, a在使用了之后,内存空间的变化如下:

刚开始:
【python】python语法糖_第2张图片

交换后:
【python】python语法糖_第3张图片

学习C语言指针从入门到入坟的人:DNA动了

3. 数字用下划线间隔

当我们需要一个很大很大的整数的时候,比如一百亿,我们采用以下写法

>>> a = 10000000000
>>> a
10000000000

啊,个,十,百,千,万,十万,百万,千万,亿,十亿,百亿……

这里可以使用科学计数法,但是还有另外一种方法让我们看清这个数字更加的容易,当然,记不住千,百万,亿……等跳跃性单位的人还是要一个一个数的,只是变得好数了一点。

>>> a = 10_000_000_000
>>> a
10000000000

使用下划线可以在编写数字的时候把数字划分开,方便我们阅读(悦读)

4. 数字大小的比较

当我们需要判断一个学生的成绩在80到90,学生的成绩为良的时候,在某些语言中,我们需要这么写:

【python】python语法糖_第4张图片

if (grade >= 80 && grade < 90)
{
    printf("%s\n","good");
    //cout << "good" << endl;
}

这判断条件看的眼睛都花了,,

python就比较善解人意了,只需要这样写,和我们做数学题的时候表示区间范围一模一样~简单易懂

if 80 <= grade < 90:
    print('良')

除了以上这个,我们在判断很多变量之间的大小关系的时候,再也不用两两比对了,而是可以写为下面这种:

>>> x = 1
>>> y = 2
>>> z = 3
>>> n = 4
>>> m = 5
>>> if x < y < z < n < m:
	print('life is short, we need python!')

程序输出为:

life is short, we need python!

5. 列表相加

我们有两个列表,现在我们需要把两个列表合并,按照传统的某些语言的写法,我们需要一个一个元素挪,但是python不用,我们直接相加就好

>>> lis1 = [1, 2, 3, 4, 5]
>>> lis2 = [6, 7, 8, 9, 0]
>>> print(lis1 + lis2)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

我测试过元组,也可以输出结果,但是元组属于不可更改对象,所以不建议元组相加。

6. 列表切片

现在我们拥有一个列表,我们需要把列表中的一块内容取下,按照某些编程语言的逻辑,我们需要得到需要的内容的首元素下标和截至元素的下标,然后使用一个循环获取,不难,但是麻烦,python就提供了列表切片的语法,字符串,元组也同样适用

>>> list1 = [2, 4, 6, 8, 10]
>>> list1[:5]
[2, 4, 6, 8, 10]
>>> list1[3:5]
[8, 10]
>>> list1[1:4]
[4, 6, 8]

我们可以在中括号内输入我们获取的列表中的元素的首地址和截至元素的地址,切片语法有几个重点

  • list[start : end]获取我们需要的范围
  • start默认为0,end 默认为列表的长度
  • 切片的区间为左闭右开区间,也就是list[start]能够取到,list[end]不能取到

7. 三元表达式

当我们使用C/C++语法的时候需要写if-else 语句的时候,我们可以使用三元表达式替换if-else语句,

int a;
int b;
int max;
if (a > b) {
    max = a;
} else {
    max = b;
}

这里是简单的三元表达式,当我们使用C/C++中的三元运算符简化的时候

int a;
int b;
int max;
max = a > b ? a : b;//等价以上的if-else语句

python也提供相似的功能

_max = a if a > b else b

三元表达式语法可以表达为:

结果 = 选项一 if 条件 else 选项二

如果条件为真选前面的, 如果条件为假选后面的那个

8. 元素的打包和解包

当我们有一个元组,里面用来存一个空间中的坐标,比如:

(1, 3, 5)

现在我们需要把三个元素拿出来,一般的写法是:

>>> zi = (1, 3, 5)
>>> x = zi[0]
>>> y = zi[1]
>>> z = zi[2]
>>> x, y, z
(1, 3, 5)

其实不用,我们只需要这样写

>>> x, y, z = zi
>>> x
1
>>> y
3
>>> z
5
>>> 

用这种方法匹配一个元组,我们用来直接匹配的数字和元组元素的数量一定要一模一样,多了少了都不行,同样,列表也同样可以一键匹配,并且反向打包也可以

#接上
>>> lis = x, y, z
>>> lis
(1, 3, 5)

9. 列表推导式

列表推导式应该是所有语法糖中最常用的了,甚至我们还能在列表推导式后面加判断条件

>>> list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list3 = [x for x in list2]
>>> list3
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list4 = [x for x in list2 if x % 2 == 0]#加判断条件
>>> list4
[2, 4, 6, 8]

虽然叫做列表推导式,但是我们集合,字典也能够使用

集合:

>>> list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set1 = {x for x in list2}
>>> set1
{1, 2, 3, 4, 5, 6, 7, 8, 9}

字典:

>>> list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> dict1 = {i : i + 100 for i in list2 if i % 2 == 0}
>>> dict1
{2: 102, 4: 104, 6: 106, 8: 108}

你可能感兴趣的:(python学习笔记,python,列表)