近年来儿童编程日趋火爆,而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

************************************************************************************************************************************************

下边这张表是运算符优先级:

************************************************************************************************************************************************

python开篇—数据类型及变量_python

 

比较运算符

>  、 < 、  >= 、 <=、==、!=、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中的数据类型,有什么不足或错误,希望大家指正!还有别的数据类型我们以后详细聊。