Python是一门跨平台、开源、免费的解释型高级动态编程语言。
Python支持命令式编程(How to do)、函数式编程(What to do),完全支持面向对象程序设计,拥有大量扩展库。
胶水语言 :可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。
数据在python内部是以对象的方式存储的,对象是python语言中最基本的概念,包括数据和处理数据的方法。在python中处理的一切都是对象,python的对象包括但不限于:数字、字符串、列表、函数、文件、异常、类的实例等等。
Python 是强类型编程语言也是动态语言, 变量的类型不固定, 根据值的类型而决定, Python解释器会根据赋值或运算来自动推
断变量类型,所以不用显示的声明变量, 用的时候直接赋值即可,如下:
a = 1 // 此时是整型
a = 'hello' // 此时又为字符串类型
Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因。
通常变量名全部大写的为 常量, 空值 用 None 表示.
以 _xxx 或 __xxx 命名的函数或变量是私有变量, 不能被其他模块直接引用。
Python是面向对象的编程语言,在Python中一切都是对象。对象由数据和行为两部分组成,而行为主要通过方法来实现,通过一些特殊方法的重写,可以实现运算符重载。运算符也是表现对象行为的一种形式,不同类的对象支持的运算符有所不同,同一种运算符作用于不同的对象时也可能会表现出不同的行为,这正是“多态”的体现。
在Python中,单个常量或变量可以看作最简单的表达式,使用除赋值运算符之外的其他任意运算符和函数调用连接的式子也属于表达式。
Python关系运算符常用于比较大小,且可以连用,其含义与我们日常的理解完全一致。使用关系运算符的最重要的前提是:操作数之间必须可比较大小。例如把一个字符串和一个数字进行大小比较是毫无意义
>>> 1 < 3 < 5 #等价于1 < 3 and 3 < 5
True
>>> 3 < 5 > 2
True
>>> 1 > 6 < 8
False
>>> 1 > 6 < math.sqrt(9) #具有惰性求值或者逻辑短路的特点
False
>>> 1 < 6 < math.sqrt(9) #还没有导入math模块,抛出异常
NameError: name 'math' is not defined
>>> import math
>>> 1 < 6 < math.sqrt(9)
False
>>> 5 in range(1, 10, 1) #range()是用来生成指定范围数字的内置函数
True
>>> 'abc' in 'abcdefg' #子字符串测试
True
>>> for i in (3, 5, 7): #循环,成员遍历
print(i, end='\t')
3 5 7
同一性测试运算符is用来测试两个对象是否是同一个,如果是则返回True,否则返回False。如果两个对象是同一个,二者具有相同的id,可利用内置函数id()查看对象的id。
>>> x = [300, 300, 300]
>>> x[0] is x[1] #基于值的内存管理,同一个值在内存中只有一份
True
>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x is y #上面形式创建的x和y不是同一个列表对象
False
>>> x[0] is y[0]
True
>>> 3>5 and a>3 #注意,此时并没有定义变量a
False
>>> 3>5 or a>3 #3>5的值为False,所以需要计算后面表达式
NameError: name 'a' is not defined
>>> 3<5 or a>3 #3<5的值为True,不需要计算后面表达式
True
>>> 3 and 5 #最后一个计算的表达式的值作为整个表达式的值
5
>>> 3 or 5 #最后一个计算的表达式的值作为整个表达式的值
3
>>> 3 and 5>2
True
>>> 3 not in [1, 2, 3] #逻辑非运算not
False
>>> 3 is not 5 #not的计算结果只能是True或False之一
True
>>> not 3
False
>>> not 0
True
值得注意的是:Python不支持**++和–运算符**,虽然在形式上有时候似乎可以这样用,但实际上是另外的含义,要注意和其他语言的区别。
>>> i = 3
>>> ++i #正正得正
3
>>> +(+3) #与++i等价
3
>>> i++ #Python不支持++运算符,语法错误
SyntaxError: invalid syntax
>>> --i #负负得正,等价于-(-i)
3
>>> ---i #等价于-(-(-i))
-3
>>> i-- #Python不支持--运算符,语法错误
SyntaxError: invalid syntax
内置函数map()把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过函数func处理后的结果。
>>> list(map(str, range(5))) #把列表中元素转换为字符串
['0', '1', '2', '3', '4']
>>> def add5(v): #单参数函数
return v+5
>>> list(map(add5, range(10)))#把单参数函数映射到一个序列的所有元素
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> def add(x, y): #可以接收2个参数的函数
return x+y
>>> list(map(add, range(5), range(5,10)))
#把双参数函数映射到两个序列上
[5, 7, 9, 11, 13]
内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。
>>> seq = ['foo', 'x41', '?!', '***']
>>> def func(x):
return x.isalnum() #测试是否为字母或数字
>>> filter(func, seq) #返回filter对象
<filter object at 0x000000000305D898>
>>> list(filter(func, seq)) #把filter对象转换为列表
['foo', 'x41']
zip()函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的zip对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,如同拉拉链一样。
>>> list(zip('abcd', [1, 2, 3])) #压缩字符串和列表
[('a', 1), ('b', 2), ('c', 3)]
>>> list(zip('123', 'abc', ',.!')) #压缩3个序列
[('1', 'a', ','), ('2', 'b', '.'), ('3', 'c', '!')]
>>> x = zip('abcd', '1234')
>>> list(x)
[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
更新于2019年11月22日