大家好,本文将围绕python中[1,2,3]*3的结果展开说明,python中3/2的结果是一个很多人都想弄明白的事情,想搞清楚python (2+3)*4结果需要先了解以下几个事情。
前言
这次是我自己在天池学习python 时候,对比了下与C的区别,方便自己理解。
python学习链接:天池Python训练营前三天
C的结合自己学习的体会进行比较,参考资料为C语言教科书python流星雨特效代码简单。
变量、运算符、数据类型
1.注释
Python
在 Python 中,# 表示注释,作用于整行。
# 这是一个注释
print("Hello world")
# Hello world
‘’’ ‘’’ 或者 “”" “”" 表示区间注释,在三引号之间的所有内容被注释
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello china")
# Hello china
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("hello china")
# hello china
C语言
在C语言中,// 表示注释,注释整行。
//这是一行注释
printf("hello china");
/**/或者 #if 0与#endif来进行区间注释,一般使用/* */ 多,#if 0与#endif一般用来作为代码宏定义开光。
/*
这是多行注释;
这是多行注释;
*/
printf("hello china");
#if 0
printf("这句已经被注释");
#endif
#if 1
printf("这句会执行");
注释属于代码里面特别重要的存在,一般代码里面写注释为代码说明,提升代码的可读性。
2.算术运算符
Python
操作符 | 名称 | 实例 |
---|---|---|
+ | 加 | 1 + 1 |
- | 减 | 2 - 1 |
* | 乘 | 3 * 4 |
/ | 除 | 3 / 4 |
// | 整除(向下取整) | 3 // 4 |
% | 取余 | 6 % 4 |
** | 幂 | 2**3 |
print(1 + 1) # 2
print(2 - 1) # 1
print(3 * 4) # 12
print(3 / 4) # 0.75
print(3 // 4) # 0
print(6 % 4) # 2
print(2 ** 3) # 8
C语言
操作符 | 名称 | 实例 |
---|---|---|
+ | 加 | 1 + 1 |
- | 减 | 2 - 1 |
* | 乘 | 3 * 4 |
/ | 除 | 3 / 4 |
% | 整除(向下取整) | 3 % 4 |
++ | 自加 1 | i=4;i++; |
– | 自减 1 | j=4;j–; |
printf("%d",1+1); // 2
printf("%d",2-1); // 1
printf("%d",3*4); // 1
printf("%f",3.0/4.0); // 0.75
printf("%d",6%4); // 2
int i=4;
i++;
printf("%d",i); // 5
int j=4;
j--;
printf("%d",j); // 3
这里出现了区别,C语言中基础算术运算符并没有幂运算符,求幂得使用pow函数进行求幂运算。python则不需要,还有的就是python并没有++与–操作,由于python基本没有底层操作,对于++与–也就没有,详细可以看关于++与–的说明:你真的理解了C语言++和–运算符么?还有++与–运算符的位置对程序的作用也有区别:C语言++i 与i++ 详解
额外关于整除,C语言不需要额外运算符,只要输出为整型结果即为整除。默认向下取整。
3.逻辑运算符
Python
操作符 | 名称 | 实例 |
---|---|---|
and | 与 | (3 > 2) and (3 < 5) |
or | 或 | (1 > 3) or (9 < 2) |
not | 非 | not (2 > 1) |
print((3 > 2) and (3 < 5)) # True
print((1 > 3) or (9 < 2)) # False
print(not (2 > 1)) # False
C语言
操作符 | 名称 | 实例 |
---|---|---|
&& | 与 | (3 > 2) && (3 < 5) |
II | 或 | (1 > 3) II (9 < 2) |
! | 非 | !(2 > 1) |
printf("%d",(3>2)&&(3<5)); //1
printf("%d",(1>3)||(9<2)); //0
printf("%d", !(2>1)); //0
4.位运算符
为运算符运算规则
a | b | a & b | a I b | a ^ b | ~ a |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
Python
操作符 | 名称 | 实例 |
---|---|---|
~ | 按位取反 | ~4 |
& | 按位与 | 4 & 5 |
I | 按位或 | 4 I 5 |
^ | 按位异或 | 4 ^ 5 |
a<<x | a左移x位 | 4 << 2 |
a>>x | a右移x位 | 4 >> 2 |
有关二进制的运算,参见“位运算”部分的讲解。
print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
C语言
操作符 | 名称 | 实例 |
---|---|---|
~ | 按位取反 | ~4 |
& | 按位与 | 4 & 5 |
I | 按位或 | 4 I 5 |
^ | 按位异或 | 4 ^ 5 |
a<<x | a左移x位 | 4 << 2 |
a>>x | a右移x位 | 4 >> 2 |
printf("%#x\n", ~4); // 0xfffffffb -5
printf("%#x\n", (4&5)); // 0x4 4
printf("%#x\n", 4|5); // 0x5 5
printf("%#x\n", 4^5); // 0x1 1
printf("%#x\n", (4>>2)); // 0x1 1
printf("%#x\n", (4<<2)); // 0x10 16
位操作符python与C语言无明显区别,使用起来效果一样。
5.其他运算符
Python
操作符 | 名称 | 实例 |
---|---|---|
三元运算符 | ||
in | 存在 | ‘A’ in [‘A’, ‘B’, ‘C’] |
not in | 不存在 | ‘h’ not in [‘A’, ‘B’, ‘C’] |
is | 是 | “hello” is “hello” |
not is | 不是 | “hello” is not “hello” |
#三元运算符
x, y = 4, 5
small = x if x < y else y
print(small) # 4
#############################################
letters = ['A', 'B', 'C']
if 'A' in letters:
print('A' + ' exists')
if 'h' not in letters:
print('h' + ' not exists')
# A exists
# h not exists
#比较的两个变量均指向不可变类型。
a = "hello"
b = "hello"
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
#比较的两个变量均指向可变类型。
a = ["hello"]
b = ["hello"]
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
C语言
操作符 | 名称 | 实例 |
---|---|---|
? : | 条件运算符(三元运算符) | ~4 |
, | 逗号运算符 | 4 & 5 |
* 和 & | 指针运算符 | 4 I 5 |
//三元运算符
max = (a>b) ? a: b
//逗号运算符
x=(a-3,b+3);
/*
取地址运算符:&
&a 是变量a的地址
指针运算符(或称“间接运算符”):*
*p代表指针变量p指向的对象
*/
int a = 666, *p;
p = &a; //使指针变量p 指向 变量a
printf("%d\n",&a); //输出变量a的 地址
printf("%d\n",p); //输出指针变量p指向的 变量a的地址
printf("%d\n",*p); //输出指针变量p指向的 变量a的值
6.运算符优先级
Python
操作符 | 名称 |
---|---|
** | 指数(最高优先级) |
~± | 按位翻转,一元加号和减号 |
* / % // | 乘,除,取模和取整除) |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位‘AND’ |
^ | 位运算符 |
<=<>>= | 比较运算符 |
<>==!= | 等于运算符 |
=%=/=//=-=+==*= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
C语言
优先级 | 运算符 | 含义 | 结合方向 | 对象个数 |
---|---|---|---|---|
1 | ( ) | 圆括号 | 自左至右 | |
1 | [ ] | 下标运算符 | 自左至右 | |
1 | -> | 指向结构体成员运算符 | 自左至右 | |
1 | . | 结构体成员运算符 | 自左至右 | |
2 | ! | 逻辑非运算符 | 自右至左 | 1(单目运算符) |
2 | ~ | 按位取反运算符 | 自右至左 | 1(单目运算符) |
2 | ++ | 自增运算符 | 自右至左 | 1(单目运算符) |
2 | - - | 自减运算符 | 自右至左 | 1(单目运算符) |
2 | - | 负号运算符 | 自右至左 | 1(单目运算符) |
2 | (类型) | 类型转换运算符 | 自右至左 | 1(单目运算符) |
2 | * | 指针运算符 | 自右至左 | 1(单目运算符) |
2 | & | 取地址运算符 | 自右至左 | 1(单目运算符) |
2 | sizeof | 长度运算符 | 自右至左 | 1(单目运算符) |
3 | * | 乘法运算符 | 自左至右 | 2(双目运算符) |
3 | / | 除法运算符 | 自左至右 | 2(双目运算符) |
3 | % | 求余运算符 | 自左至右 | 2(双目运算符) |
4 | + | 加法运算符 | 自左至右 | 2(双目运算符) |
4 | - | 减法运算符 | 自左至右 | 2(双目运算符) |
5 | << | 左移运算符 | 自左至右 | 2(双目运算符) |
5 | >> | 右移运算符 | 自左至右 | 2(双目运算符) |
6 | > | 大于运算符 | 自左至右 | 2(双目运算符) |
6 | >= | 大于等于运算符 | 自左至右 | 2(双目运算符) |
6 | < | 小于运算符 | 自左至右 | 2(双目运算符) |
6 | <= | 小于等于运算符 | 自左至右 | 2(双目运算符) |
7 | == | 等于运算符 | 自左至右 | 2(双目运算符) |
7 | != | 不等于运算符 | 自左至右 | 2(双目运算符) |
8 | & | 按位异或运算符 | 自左至右 | 2(双目运算符) |
9 | ^ | 按位与运算符 | 自左至右 | 2(双目运算符) |
10 | I | 按位或运算符 | 自左至右 | 2(双目运算符) |
11 | && | 逻辑与运算符 | 自左至右 | 2(双目运算符) |
12 | II | 逻辑或运算符 | 自左至右 | 2(双目运算符) |
13 | ? : | 条件运算符 | 自右至左 | 3(三目运算符) |
14 | = | 赋值运算符 | 自右至左 | 2(双目运算符) |
14 | += | 加后赋值 | 自右至左 | 2(双目运算符) |
14 | -= | 减后赋值 | 自右至左 | 2(双目运算符) |
14 | *= | 乘后赋值 | 自右至左 | 2(双目运算符) |
14 | /= | 除后赋值 | 自右至左 | 2(双目运算符) |
14 | %= | 去取后赋值 | 自右至左 | 2(双目运算符) |
14 | >>= | 左移后赋值 | 自右至左 | 2(双目运算符) |
14 | <<= | 右移后赋值 | 自右至左 | 2(双目运算符) |
14 | &= | 按位与后赋值 | 自右至左 | 2(双目运算符) |
14 | ^= | 按位异或后赋值 | 自右至左 | 2(双目运算符) |
14 | I= | 按位或后赋值 | 自右至左 | 2(双目运算符) |
15 | , | 逗号运算符 | 自左至右 |
详细可查看C语言运算符(详解)
7.变量和赋值
Python
- 在使用变量之前,需要对其先赋值。
- 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
- Python 变量名是大小写敏感的,foo != Foo。
teacher = "老马的程序人生"
print(teacher) # 老马的程序人生
first = 2
second = 3
third = first + second
print(third) # 5
myTeacher = "老马的程序人生"
yourTeacher = "小马的程序人生"
ourTeacher = myTeacher + ',' + yourTeacher
print(ourTeacher) # 老马的程序人生,小马的程序人生
C语言
先发布,后面接着写