变量介绍

c语言强类型的语言,在声明一个变量的时候,必须制定其存储格式, 同时,变量声明后不可以变换数据类型

同时在c语言里,指定类型之后也就意味着,分配了固定的比特位用于存储改变量, 该变量的数值范围受限于存储位数。

python属于弱类型的语言,直接赋值, 根据赋值来判断是什么类型, 变量声明之后,可以随意赋值给变量任意类型的数值,类型自动切换. 我们可以通过type(num)的方式来获取变量类型。

整数

在C语言里面, 可以选用不同表示范围的整数类型,我们在使用的过程中要一直警惕不要溢出, 数值超过最大的表示范围的时候,还要写对应的大数加减的算法.

C语言

int intNum = 1;
long longNum = 1;
short shortNum = 1;

在Python中, 弱化了不同整数类型的区别, 类别不细分,整数只有int一种类型. int整数类型的范围是不受限制的, 你甚至可以这么写.

a = 1000000000000000000000000000000000000000000000000000000000000000000000
a = 10
# 格式化打印字符串
print("a type is %s"%type(a))
b = 3
print("b type is %s"%type(b))
a type is <class 'int'>
b type is <class 'int'>

我们可以看到a,b的类型都是<class 'int'> 这里我们需要强调的是, 在Python中没有裸露的数据结构,一切数据皆为对象。 即便最底层的int类型也是用类(class)定义的, 每一个整数都是一个对象。

如果你之前没有接触过面向对象的编程语言的话,需要恶补一下面向对象的知识。

在Python中,对于int类的定义为(C语言实现)。

typedef struct {
    PyObject_HEAD
    long ob_ival;
} PyIntObject;

整数运算

a + b
13
a - b
7
a * b
30
# 除法
a / b
3.3333333333333335

C语言中整数与整数相除得到的一定是整数. 但在Python两个整数相除得到的是浮点数。 如果你想得到整数的话, 可以采用强制类型转换

强制类型转换语法对比

C Python
(int)a int(a)
# 获得除数
int(a / b)
3
# 获得余数
print("a//b = %d"% (a // b))
a//b = 0

其他进制

我们在这里演示一下,十进制与二进制, 八进制, 十六进制之间的相互转化。

10的各进制表示

  • 二进制:0b1010
  • 八进制: 0o12
  • 十进制: 10
  • 十六进制: 0xa
print("二进制转化为十进制: 010 -> %d"%(int('0b1010', 2)))
print("二进制转化为十进制: 010 -> %d"%(int('1010', 2)))
print("八进制转化为十进制: 010 -> %d"%(int('12', 8)))
print("八进制转化为十进制: 010 -> %d"%(int('0O12', 8)))
print("十六进制转化为十进制 : 0xff -> %d"%int('a', 16))
print("十六进制转化为十进制 : 0xff -> %d"%int('0xa', 16))
二进制转化为十进制: 010 -> 10
二进制转化为十进制: 010 -> 10
八进制转化为十进制: 010 -> 10
八进制转化为十进制: 010 -> 10
十六进制转化为十进制 : 0xff -> 10
十六进制转化为十进制 : 0xff -> 10
# 强制类型转换, 转化为二进制 bin()
print("十进制 -> 二进制", bin(10))
print("八进制 -> 二进制", bin(0o12))
print("十六进制 -> 二进制", bin(0xa))
十进制 -> 二进制 0b1010
八进制 -> 二进制 0b1010
十六进制 -> 二进制 0b1010
# 强制类型转换,转化为八进制 oct() 
print("二进制 -> 八进制", oct(0b1010))
print("十进制 -> 八进制", oct(10))
print("十六进制 -> 八进制", oct(0xa))
二进制 -> 八进制 0o12
十进制 -> 八进制 0o12
十六进制 -> 八进制 0o12
# 强制类型转换,转化为十六进制 hex() 
print("二进制 -> 十六进制", hex(0b1010))
print("八进制 -> 十六进制", hex(0o12))
print("十进制 -> 十六进制", hex(10))
二进制 -> 十六进制 0xa
八进制 -> 十六进制 0xa
十进制 -> 十六进制 0xa

浮点数

在C语言里,float是单精度浮点数, double是双精度。 C语言代码

float floatNum = 1.0;
double doubleNum = 1.0;

在Python中浮点数不区分单精度与双精度。 浮点数的精度, 也不受限。 下面的语句也是合法的

a = 0.00000000000000000000000000000000000000000000000000001
print(a)
1e-53
a = 10.0
b = float(3)

print("a + b = %.3f"%(a + b))
print("a - b = %.3f"%(a - b))
print("a * b = %.3f"%(a * b))
print("a / b = %.3f"%(a / b))
a + b = 13.000
a - b = 7.000
a * b = 30.000
a / b = 3.333
type(a)
float

布尔值 Boolean

C 在C语言里面其实并没有却分整数与布尔值。 我们把整数当作布尔值来用。 TRUE = 1 FALSE = 0

一般我们都这么写。

typedef int Boolean;

#define TRUE 1
#define FALSE 0

在Python中有对应的布尔值类型bool

我们来测试一下

a = 1
b = 2

c = a == b
print(c)
print(type(c))
False
<class 'bool'>
d = (a != b)
print(d)
True
d = False

d == c
True
abs(10.0001 - 10) < 0.01
True

逻辑运算

C语言中的逻辑运算符

  • 逻辑否: !
  • 逻辑与: &&
  • 逻辑或: ||

Python中的逻辑运算

  • 逻辑否: not
  • 逻辑与: and
  • 逻辑非: or

可以看到Python更接近自然语言。

a = True
b = False

a and b
False
a or b
True
not a
False

char

C语言里有专门的char类型

但是Python中是没有的。一切字符或者字符串都是以str对象存储的。

如果大家想了解底层的原因的话,可以参考知乎上的这篇帖子。

为什么在Python中没有专门的char数据类型呢?

Copyright 杭州云江科技有限公司 2017 all right reserved,powered by Gitbook该文件修订时间: 2018-04-02 09:53:14

results matching ""

    No results matching ""