近年来儿童编程日趋火爆,而Python语言似乎成为了热门,原因很简单,1.入门相对简单;2、大数据、人工智能的时代下,而Python语言主要应用于人工智能和数据挖掘领域,以及它周边生态系统相当丰富。2012年起,云时代的到来,Openstack云计算平台基于Python开发的,自动化运维工具Ansible、SaltStack基于Python开发的。2013年大数据时代的到来,海量的数据处理,而Python有大名鼎鼎的numpy、pandas数据分析库,Python爬虫框架Scrapy。2016年,人工智能时代的到来,谷歌的Tensorflow被广泛应用于机器学习。2018年《全国计算机等级考试》,二级考试新增Python语言程序设计,使用的是Python3.5.2以上的版本。记得去年李开复在微博上发了几张图,配文大致意思是在人工智能的时代,你的工作还能安全多久?图片是未来10-15年内可能被取代的工作。
今天小编怀着好奇又兴奋的心情,跟大家聊下这个时代最伟大的语言Python(这里要着重声明下:最伟大纯属个人看法,勿喷!!!),废话少说,切入正题。
先来看下python中的一些基本类型和运算符
整数:
python中整数用int来表示,它包括:0、正整数、负整数,与数学上的一样。它也可以处理任意大小的整数。
这里我们用一个函数,type来输出整数的类型来看下:
print(type(1))<class 'int'>
相乘:
type(1*1.0) <class 'float'>
相除:
type(2/2) <class 'float'>
如果想得到整型 ( 加双斜杠 ) :
type(2//2) <class 'int'>
浮点数:
所谓浮点数就是小数,用float来表示,如:1.2、1.3 ··· ··· ;如果非常大或非常小的浮点数,需用科学计数法表示,比如:1.23x 10的9次方,把10用e来表示,就是1.23e9;0.000012,可以写成:1.2e-5。
print(type(0.1))<class 'float'>
字符串:
与js相同,表示方法用双引号 或单引号引起来,"abc"、'abc' ··· ··· ,如果字符串中包含引号,可以用转义字符:
print('ab\'c') #ab'c
( 1 ) 在python中还给出了一个r ' ' 表示r后边的字符串中的转义字符无效了:
print(r'abc\t') #abc\t
print(r'ab'c\t') #ab'c\t
( 2 ) 在python中,表示多行字符串,除了\n以外,还可以用''' xxx '''
print('''abc
abc''')
#abc
#abc
print('abc\nabc')
# abc
# abc
布尔值:
Python中,布尔值有两种 True 和 False ,(与js中的相同,只不过是首字母要大写!!!)
通常布尔值会结合逻辑运算符用在if判断语句中(and--与、or--或、not--非),具体用法在讲if语句时我们详细聊下。与之对应的js逻辑运算符是(&& || ! ),相对js来说,python中的and or not语义化更好一些!
print(1 > 2,2 > 1) # False True
# and
print(1 < 2 and 3 < 2) # False
print(1 < 2 and 3 > 2) # True
# or
print(1 < 2 or 3 < 2) # True
print(not False) # True
print(not True) # False
上边代码,用and(且)运算符时,必须全部为True时,才为True;而or(或)是只要有一个为True,则返回True;not就是状态取反,用法跟js完全一样!!!
这里在说下逻辑运算符 and 、 or
eg:
a = 1
b = 2
c = 3
print(a or b and c) # 1
上边代码,为什么会打印1呢,and和or比较,and优先级更高,2和3会比较,返回3,然后1在和3比较,返回1。
在来个小demo:
a = 1
b = 2
c = 2
print( not a or b +2 == False ) # False
# 相当于
print( (not a) or ((b + 2) == c)) ) #False
优先级关系:+ > == > not > and > or
************************************************************************************************************************************************
下边这张表是运算符优先级:
************************************************************************************************************************************************
比较运算符
> 、 < 、 >= 、 <=、==、!=、is、is not 除了后两个,其它与js一样,这里不多说了;
is:判断两个变量所引用的对象是否相同,相同返回True,否则返回False
is not : 判断两个变量引用的对象是否不相同,不相同返回True
注意 == 与 is的区别
==:只比较两个变量的值
is:要求两个变量引用的必须是相同的对象(也就是内存中的地址必须相同才行)
import time
a = time.gmtime()
b = time.gmtime()
print(a == b) # True
print(a is b) # False
上边代码,a和b都代表当前的系统时间,因此a和b两个变量时间值是相等的,所以 == 判断为True;但由于a、b两个变量分别引用了不同的对象,(每次调用gmtime都返回不同的对象),所以 a is b 返回 False。
证明下:
Python提供了一个全局的id()函数,可以输出变量引用的对象在内存中的地址(相当于对象在内存中存储位置的门牌号)。
print(id(a)) # 33997552
print(id(b)) # 37525296
上边代码,如果输出内存地址不同,则返回False。
再来看一个例子:很明显 == 比较的不是内存,而是值是否一样
[ ] 列表 后边文章有讲到。
a = []
b = []
print(a == b) # True
print(id(a)) # 30368328
print(id(b)) # 30368392
in 运算符
python提供了 in 运算符,判断某个成员是否位于序列或集合(字符串str、列表list、元组tuple还有字典)中,返回True或者False;
与in对应的是 not in,判断某个成员是否不再序列中。
s = 'abc'
print('a' in s) # True
l = [1,2,3]
print(1 in l) # True
t = (1,2,3)
print(1 in t) # True
d = {'name':'lxc'}
print('name' in d) # True
空值:
空值是python中的一个特殊值,用 None 来表示。它不能理解为0,因为0是有意义的。此外,python中还提供了列表 [ ]、字典{ }等多种数据类型,还允许创建自定义数据类型,后边我们会详细来聊。
变量:
python中的变量的概念与js中(var let)的类似,在内存中申请一个空间存放的值,而变量就是这个值得引用。
在python中命名变量应遵守以下规则:
(1)变量名只能用字母 、下划线、数字来表示;
(2)开头:只能用字母 或者 下划线开头;
(3)不能用python中的关键字;
(4)python中对大小写敏感(也就是说大写和小写不一样);
(5)可以把任意数据类型赋给一个变量,而同一个变量可以反复的赋值,而且可以是不同类型的变量。
num = 123 # 变量num值是123
print(num) # 123
num = True
print(num) # True
常量:
在python中,常量是相对的,通常常量会用大写字母表示,但如果你一定要改变常量也可以改变的!(跟js一样)
关于除法:
在python中除法有两种方式,
(1) / 用 / 做除法运算,结果都是浮点数
print(4/2) # 2.0
print(type(4/2)) #<class 'float'>
(2) // 用 // 做除法运算,结果都是整数,如果是小数或除不尽,总会取小数点前的整数部分!!!
print(3 // 2) # 1
print(10 // 3) # 3
print(type(10 // 3)) <class 'int'>
(3)在python中,不允许使用0作为除数,否则会报错!(这点与js不同,一个数除0,在js中会得到 Infinity正无穷)
取余数 %
1、 一个数 % 一个比自身大的数,永远是自身
print(3%5) # 3
静态语言及动态语言:
在python中,变量本身的类型不是一个固定的,不需要事先声明类型,随时可以赋值为其它类型,这种语言称为动态语言;
python是动态强类型语言,动态上边已经说了,所谓强类型指:不同类型之间的运算,必须先转换为同一类型才能运算,否则将会报错!!!(这里说的强类型语言是相对的,也有说是弱类型语言的!)
print("1" + 1) # TypeError: can only concatenate str (not "int") to str
对比js,JavaScript是动态弱类型语言,动态不必说了,所谓弱类型语言指:不同类型之间的运算,js会隐式类型转换为同一类型在去运算!!!
console.log("1" + 1) //"11"
console.log(typeof("1" + 1)) //string
传统语言像Java就是静态语言,声明变量前必须制定变量类型,且如果声明变量类型与值不匹配都将会报错!
关于赋值语句:
数学中的等号 = ,在python中是赋值语句的意思( js中也是一样的 )
num = "123" # 把字符串类型的123赋值给变量num
上边代码,python解释器做了两件事情:
1、先在内存中创建了一个 " 123 " 的字符串;
2、在内存中创建了一个名为num的变量,并把它指向 “123”。
a = 123
b = a
print(a is b, id(a), id(b)) # True 140736084190688 140736084190688
a = 321
print(b) # 123
上边代码,我们可以这样理解:
1、解释器创建了数字123和变量a,并把变量a指向123;
2、b=a,b也指向了同一个内存地址,123;
3、a=321,解释器创建了数字321,并把a的指向改为321,(相当于给a变量重新赋值了),但是b的指向并未发生改变,还是指向123。。
在Python中赋值改变的是变量的地址,而值本身不会发生改变,说白了,变量和值在内存中就是两个独立的存放,赋值就是将二者建立映射关系。
eg:
a = 123
a = 321
上边代码,两个值分别赋值给了变量a,最后一个321不会覆盖前一个123,而是变量a重新指向了一个新的值321,原来的123没有变量指向了,会被清除!Python中的垃圾回收采用的是GC计数引用,不要的变量会标记,定时的清理标记的垃圾。
与JavaScript中引用值类似:
var a = {name:"lxc"};
var b = a;
a = {age:20};
console.log(b) //{name:"lxc"}
上边js代码,变量a是一个引用值,引用的是对象 {name : "lxc"} 的地址,当b=a时,也就是b也引用了对象 { name : "lxc"} 的地址,a = {age:20} ,在内存中又创建了一个对象{ age:20 },a的引用改为 {age:20},b的引用并未发生改变。
有几个点需要在提下:
1、python中的注释用 #
2、多行注释 用三单引号 '''xxx '''
3、编写python程序,需创建一个.py结尾的文件或在python命令行里。
4、python中的整数大小是没有限制的,只要你内存足够大!
5、在这里要说明下,因为小编是做前端的,所以在聊python时,我会去对比JavaScript,因为python中的许多数据类型及用法跟JavaScript类似,我觉着这种方法会让你更快的了解python,起码对于我来说是这样的,但是前提js基础较扎实的情况下。。。
以上就是简单介绍了下python中的数据类型,有什么不足或错误,希望大家指正!还有别的数据类型我们以后详细聊。