Python 学习笔记 (2)运算符

Python 学习笔记 (2)运算符,第1张

题主是大一学生,刚刚开始学习python,但是题主有一定的c语言基础,在这里以两者对比的形式做一些学习笔记。


题主想从两者对比中一些比较有趣的地方来写文章,比如这里的运算符在编程语言中并不值得写成一篇文章,但是由于其中能发现python有趣的思想,因此专门写一篇文章聊聊

#基础:常见的运算符号

不管何种语言,运算符号的种类其实是大同小异的。


一般分为三种运算符:

算数运算符:用来进行数据计算

比较运算符:用来比较变量,常用来设置条件

逻辑运算符:用来连接多个表达式

##算数运算符

c语言的算数运算符

1.四则运算:+、-、*、/、% 加、减、乘、除、整除取余数。


这里的“/”比较有意思,在除数和被除数都是整型的时候,进行整除运算,有一个是浮点数的时候才会得到分数。


整除运算是取整数部分,不是四舍五入。


一些常见的运算,如乘方开方要引入math.h的头文件

#include 
int main()
{
    a = 3/2
    b = 3.0/2
//a = 1
//b = 1.5
}

而“%”的取余也只在整型数据运算时有效。


加减号在字符运算中是使用两者的ASCII码表对应的数来计算

2.位运算

<<、 >>、 ~、|、&、^

位运算都是以二进制位为单位计算

<<: 左移 在右边补1个0 左移后相当于十进制的数X2
>>:右移 右边扣除一个0 相当于除以2
~:按位取反 比如0110110变成1001001
|:按位或 相同位置上有1则为1
^:按位异或 相同位置相同为0 不同为1
&:按位与 相同位置上有0则为0

3.赋值运算 

“=” 把等号右边的赋值给左边的,左边的一定要是变量

python的算数运算符

1.基础运算

+、-、*、%在python中都和c语言一样。


python的加号在字符中可以用于连接字符串

除法运算比较有意思python有两个除法“/”和“//”

"/"是符合数学逻辑的除法,无论除法参与的数据类型为何,得到的都是数学上的结果。


“//”对应c语言的“/”,进行整除运算

另外,python有“**”的运算符进行乘方运算(乘方数是小数时开方)

2.位运算

和c语言一致

3.赋值运算

也是使用“=”赋值

##比较运算符

两者的符号是一致的

“>“、“<”、“>=”、“<=”、“==”、“!=”

大于、小于、大于等于、小于等于、等于、不等于

但是返回值不同

python返回bool型变量true 和 false

c语言返回整型变量1和0

##逻辑运算符

就是我们常说的与、或、非

与:与连接的表达式有假则为假

或:或连接的表达式有真则为真

非:非+表达式真假取反

c语言的与、或、非分别为:”&&“、”||“、”!“

python则为”and“、”or“、”not“

值得注意的是,逻辑运算中是采用一种偷懒的逻辑

比如或:有真则为真

在判断时(表达式A)and(表达式B),如果A是假的,将不会进行B,这会导致:如果在这里的表达式进行算数或者赋值运算,可能不会运行

如:

b = 0 and a
print(b)
#0
b = 0 or a
print(b)
#报错:‘a’ is not defined
#比较两个语言的运算符 

首先,最直观的区别就是python的运算符更加人性化,含义更加直观:

除法运算用”/“来表示数学上的计算、使用英文单词and or not 来表示逻辑也很直观。


加减号在字符中的运算也很方便

其次,是python运算里的一些运算符其实耐人寻味

下面这个例子是题主想把运算符单独拎出来聊的最主要原因

在python中,想要进行数据的对换

a = 1
b = 0
a,b = b,a
#a = 0,b = 1

而c语言中需要是不能计算的

#include
int main()
{
int a = 0;
int b = 1;
a,b = b,a;
printf("%d %d",a,b);
}
//输出0,1

实际上进行的是b = b

c语言中要用一个变量暂存

#include
int main()
{
int a = 0;
int b = 1;
int t;
t = a;
a = b;
b = t;
printf("%d %d",a,b);
}

先看c,c严格执行一个语句一个 *** 作,语句中使用逗号分隔可以连续执行类似的不同 *** 作,但是实际上是有先后顺序的

#include
int main()
{
int a = 0;
int b = 1;
a = b,b = a;
printf("%d %d",a,b);
}
//输出1,1

即使a = b,b = a;写在同一行,也是先后进行的。


python中逗号其实是作为了元组的分隔符,在这个赋值运算时,表达的其实是”把上一步结束时的b,a赋值给这一步的a,b"相当于同时进行了两步 *** 作,这在一个程序中其实是不那么符合逻辑的。


有可能在底层其实是进行了暂存的赋值运算的。


所以,可以猜测python为了达到人性化,牺牲了一定的逻辑的严格性。


#运算优先级

参考下图,c语言没有的删去即可

 

#小结:

 python的人性化牺牲了计算机层面的逻辑性,由于很多时候这种逻辑性是反直觉的,笔者作为非计算机专业的学生,感觉牺牲就牺牲了叭哈哈哈哈哈哈哈

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/578248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存