**
【Python】Python之变量,整数,浮点数和布尔类型的探索
**
我其实在以前的文章中粗略的介绍过Python的数据类型,那我今天就在这把以前笼统的知识展开,为大家打开Python部分数据类型的面纱,为大家以后Python的学习助力,大噶过来康康啊!
Python中“神秘”的变量
虽说标题中说,Python的变量很神秘,其实不然,我只是也个标题党罢了哈哈。
在Python中,变量的概念基本上和高中代数的方程变量是相一致的。
其实在我们初中就学过,对于方程式 y=x*x ,x就是一个变量,当x=3时,计算结果是9,当x=5时,计算结果便是25了。
只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头,在此我举几个简单的例子,例如:x = ’ red ‘,apple_10=18, mini_001=3.14等等……其中 变量x 是一个字符串,变量apple_10 是一个整型,变量mini_10 是一个浮点型。
在Python中,等号 ‘=’ 是赋值语句(在此我们要区分’ == '字符,其意思为等号两边相等,表示判断的时候使用),可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,在此我给大家举个栗子:
代码如下:
a = 2333 # a是整数
print (a)
a = 'apple' # a变为字符串
print (a)
对于例子中所举的变量a,其实它本身可以是整型,也可以是字符串,主要看它赋值符号后方的数据类型,像这种本身数据类型不固定的语言称之为动态语言,与之对应的便是静态语言。
静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。在Python语言中其实并不支持静态变量,所以我们以Java为例,Java是静态语言,赋值语句如下:
int a = 2333; // a是整数类型变量
a = "apple"; // 错误:不能把字符串赋给整型变量
所以和静态语言相比,动态语言更灵活,因此我在前面文章中也说了Python语言的简单,其实不是没有道理的。
值得注意的是请不要把赋值语句的等号等同于数学的等号。比如下面代码:
x = 6
x = x + 3
print(x)
倘若我们从数学的角度上去理解x = x + 3这个等式的话,那我们想破脑袋也是不成立的,但是在Python程序中,赋值语句先计算右侧的表达式x + 3,得到结果是9,再赋给变量x,由于x之前的值是6,重新赋值后,x的值变成了9。
当然,理解变量在计算机内存中的表示也是非常重要的。当我们写:a=‘apple’时,Python解释器在内存中干了两件事情:
其一, 在内存中创建了一个’apple’的字符串;
其二, 在内存中创建了一个名为a的变量,并把它指向’apple’。
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,就如下面的代码:
a = 'apple'
b = a
a = 'flower'
print b
那么问题来了,最后一行打印出变量b的内容到底是’apple’呢还是’flower’?
那接下来我们以图为证。
图中结果显示的是 ‘apple’ ,但如果从数学意义上理解,就会错误地得出 b 和 a 相同,就应该是’flower’,但实际上b的值是’apple’,让我们一行一行地解析代码,就可以知道到底是肿么一肥四。
执行a = 'apple’时,解释器创建了字符串 ‘apple’ 和变量 a,并把a指向 ‘apple’:
执行b = a时,解释器创建了变量 b,并把b指向 a 指向的字符串’apple’:
执行a = ‘flower’ 时,解释器创建了字符串 ‘flower’ ,并把a的指向改为’flower’,但b的指向并没有随着a的改变而发生更改:
所以最后就得到了上图我编译器打印出来的结果,即b为’ apple '。
Python中整数和浮点数
在之前的文章中,我们讲解过Python的整数型和浮点数型,我们也粗略的讲了关于Python整数和浮点数的四则运算。在此我将为大家继续拓展关于四则运算的细节。
Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致。
基本的运算如下:
1 + 2 + 3 + 4 # ==> 10
4 * 5 - 5 # ==> 15
7.5 / 8 + 2.1 # ==> 3.0375
同时使用括号可以提升优先级,这和数学运算完全一致,注意咱们这里只能使用小括号,但是括号可以嵌套很多层的吖。
( (1 + 2) * 3)* 4 # ==> 36
(2.2 + 3.3) / (1.5 * (9 - 0.3)) # ==> 0.42145593869731807
在这里注意一下,Python四则运算和数学运算不同的地方是,Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数,但是整数和浮点数混合运算的结果就变成浮点数了。
4 + 8 # ==> 整数 12
1.0 + 5.0 # ==> 浮点数 6.0
1 + 5.0 # ==> 浮点数 6.0
那在这里我们就不禁心生疑惑了,整数的除法运算遇到除不尽的时候,结果难道不是浮点数吗?那我们来试一下吧。
代码如下:
print( 11 / 4 )
print( 11.0 / 4)
令我们惊讶的是,Python在做整数除法,遇到整数除不尽的情况时,输出结果会自动变更为浮点型数,在与浮点数做除法时,得到了相同的结果,这就是Python“通情达理”的一面。
但是如果我们想要知道整数被整除后的整除形式或者说我们想知道整数被除后的余数是多少,那我们不妨尝试使用一下整除运算符(//)和取余运算符(%)。
代码:
print( 11 // 4 )
print( 11 % 4)
测试结果如图:
Python中布尔类型
我们在之前的文章中已经了解到Python是支持布尔类型的数据,而且布尔类型只有True和False两种值,但是布尔类型可以有以下几种运算:
与运算:只有两个布尔值都为 True 时,计算结果才为 True。
True and True # ==> True
True and False # ==> False
False and True # ==> False
False and False # ==> False
或运算:只要有一个布尔值为 True,计算结果就是 True。
True or True # ==> True
True or False # ==> True
False or True # ==> True
False or False # ==> False
非运算:把True变为False,或者把False变为True。
not True # ==> False
not False # ==> True
测试结果如图:
布尔运算在计算机中用来做条件判断,根据计算结果为True或者False,计算机可以自动执行不同的后续代码。
在Python中,布尔类型还可以与其他数据类型做 and、or和not运算,比如我们看下面的代码:
a = True
print (a and 'm=Monday' or 'f=Friday')
测试的结果如下:
计算结果不是布尔类型,而是字符串 ‘m=Monday’,这是为什么呢?
因为Python把 0 、空字符串’ ‘和 None 看成 False,而把其他数值和非空字符串都看成 True,所以 a and ‘m=Monday’ 计算结果是 ‘m=Monday’,继续计算 ‘m=Monday’ or ‘f=Friday’ 计算结果还是’m=Monday’。
为了解释上述结果,我要给大家介绍关于 and 和 or 运算的一条重要法则:短路计算。
-
在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
-
在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
所以在Python解释器中做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
测试如下:
代码:
a='apple'
b='ball'
c='cat'
d='dog'
print (not a and b or c and d)
print (not a and b or c or d)
print (not a or b or c and d)
今日份Python讲解告一段落,撒花!!!