Python介绍
一、Python特点
- 简洁,可读性强
- 面向对象
- 免费和开源
- 可移植性,可跨平台
- 可扩展,嵌入到C、 C++等语言中
二、应用范围
- 科学计算
- 人工智能
- Web服务器端和大型网站后端
Youtube,gmial,豆瓣等 - GUI
- 游戏开发、移动设备、嵌入式、系统运维、大数据
python由于是解释执行,所以性能比较低。
三、版本兼容
- python3不兼容python2。
- 程序如果可以在python2.7运行,可通过2to3转换工具(python自带)转换到python3。
四、Python解释器和IDE
python程序执行依赖于python解释器,常用python解释器有;
- CPython:C语言实现的解释器
- Jython:Java语言实现的解释器,可以调用java类
- IronPython: .Net平台使用的解释器,适合.Net平台上开发
- Pypy:python语言实现的解释器
python自带的开发环境
- IDLE:python自带的开发环境
六、对象和变量
对象
- python中,一切皆对象,由标识符(id:对应于对象的内存地址)、类型和值组成。
- 对象本质:一个内存块,拥有特定的值,支持特定类型的相关操作。
引用
- 变量成为对象的引用,变量保存的对象的地址,变量通过地址引用了"对象"。
- 变量不需要声明数据类型,对象必须要声明数据类型。
标识符命名(变量命名)
标识符:变量、函数、类、模块的名称,区分大小写,第一个字母只能是字母、下划线。避免关键字,避免双下划线开头和结尾。 help():keywords查看系统关键字。 IDE+F1查看帮助文档。
变量
- 变量声明
变量名 = 表达式 - 删除变量
del 变量名 变量引用的对象若再没有其它变量引用,则会被python垃圾回收机制回收。 - 变量链式赋值
同一对象赋值给多个变量 x = y = 123 - 变量解包赋值
系列数据赋值给对应相同个数的变量 a,b,c = 1,2,3 变量值互换 a,b = b,a
*python不支持常量,只能逻辑上规定不能修改常量。
七、数据类型
内置数据类型
python内置数据类型:
-
整型 int (1) 除10进制,还有二进制,八进制,十六进制。 0b / 0B a=0b100 (8) 0o / 0O a=0o72 (58) 0x / 0X a=0xA2(162) (2) int()将数据转为整型: int(9.9):9 int(True): 1 int(‘234’) :234 int(‘234a’):error (3) 数值范围 python2中,int表示32位,python3中,int可以存储任意大小的整数,long被取消,所以python非常适合于科学运算。(10**100) -
浮点型 float (1) 科学计数法表示:
a
×
b
10
a\times b^{10}
a×b10,314e-2,314E-2。 (2) float()进行浮点数转换。 整数和浮点数运算,结果为浮点数。2+8.0=10.0。 round(value)返回四舍五入的值。(不会改变原来的值,会产生新值) (3) 数值范围:64位浮点数 -
布尔型 python2没有布尔值,直接用0表示False,1表示True。 python3将True/False定义为了关键字。 -
字符串型
时间
计算机中时间是从1970.1.1 00:00:00开始的,以毫秒进行计算。1970年这个时刻被称为"unix时间点"。 time.time()获取当前时刻距1970过了多少s。
字符串
字符串本质是字符序列,python中字符串是不可变的,我们无法对字符串做任何修改。python将字符串作为一个基本数据类型,python不存在字符。
- 编码
Python3采用Unicode字符编码,可以表示世界上任何书面语言的字符,默认就是16为Unicode编码,ASCII码是Unicode编码的子集。 内置函数ord()可以将字符转换为对应的Unicode编码。 内置函数chr()可以将十进制数字转换成为该Unicode编码对应的字符。 ord(‘A’) 65 chr(66) ‘B’ ord('学’) 23398 - 定义
双引号定义 a = “I’am s student” 三个单引号定义 a = ‘’’ name=“sherry” sex=“Female”’’’ 空字符串 a = ‘’ len(a) 0 - 转义字符
\ + 特殊字符,实现某些难以用字符表示的结果,比如换行。
转义字符 | 描述 |
---|
(在行尾) | 续行符 | \ | 反斜杠符 \ | \‘ | 单引号’ | " | 双引号“ | \b | 退格(Backspace) | \n | 换行 | \t | 横向制表符 | \r | 回车 |
- 字符串拼接、复制、打印、读取
(1) 使用+将多个字符串拼接起来: ‘aa’ + ‘bb’ =>‘aabb’ 如果两边都是字符串,则拼接; 如果两边都是数字,则运算; 如果两边类型不同,则抛出异常。 (2) 将多个字符串直接放在一起实现拼接: ‘aa’ ‘bb’ => ‘aabbb’ (3) 使用*可以实现字符串赋值: ‘aa’*3 => ‘aaaaaa’ (4) 不换行打印 printf(‘sdjfhsdf’,end=’’) #不换行 printf(‘sdjfhsdf’,end=’*’) #结尾为* (5) 从控制台读取字符串 name = input() - 字符串格式化
str.format() ‘1:{0},2:{1}’.format(‘aa’,‘bb’) #顺序和0,1匹配 => ‘1:aa,2:bb’ ‘1:{space1},2:{space2}’.format(space2=‘bb’,space1=‘aa’) => ‘1:aa,2:bb’ 填充和对齐 填充通常跟对齐一起使用。 ^ < >分别是居中、左对齐、右对齐,后面带宽度 :后面带填充的字符 ‘数字:{:*^8}’.format(‘123’) => ‘数字:**123***’ ‘数字:{:*<8}’.format(‘123’) => ‘数字:123*****’ 数字格式化
字符串函数
- str() 将数字转为字符串
- [] 提取字符串
正向搜索,左侧第一个字符偏移量是0,第二个是1,直到len(str)-1; 反向搜索,右侧第一个字符偏移量是-1,倒数第二个是-2,直到-len(str); - replace() 字符串替换
a.replace(‘c’,‘b’) 返回一个新创建的字符串 - 字符串切片(slice)
切片操作可以让我们快速地提取字符串,标准格式:[起始偏移量:终止偏移量:步长] 包头不包尾。
操作和说明 | 示例 | 结果 |
---|
[:] 提取整个字符串 | ‘abcdef’ [:] | ‘abcdef’ | [start:] 从start位置到结尾 | ‘abcdef’ [3:] | ‘def’ | [:end] 从头到end-1 | ‘abcdef’ [:2] | ‘ab’ | [start:end] 从start到end-1 | ‘abcdef’ [1,3] | ‘bc’ | [start: end:step] 从start到end-1,步长step | ‘abcdef’ [::2] | ‘ace’ |
end>len(str) 默认截取到len(str)-1
start,end,step为负数的情况
示例 | 描述 | 结果 |
---|
‘abcdef’ [-3:] | 倒数三个 | ‘def’ | ’abcdefghijklmnopqrst’ [-8:-3] | 倒数第8个到倒数第三个(不包含第三个,包头不包尾) | ‘mnop’ | ’abcdefghijklmnopqrst’[::-1] | 步长为负,从左到右反向提取 | ‘tsrqponmlkjihgfedcba’ |
-
split()分割和join()合并 split()基于指定分隔符将字符串分隔成多个字符串(存储到列表中),如果不指定分隔符,则默认使用空白分隔符(换行符/空格符/制表符等)。 ‘a b c d’.split() => [‘abcd’] ‘abcdef’.split(‘bc’) => [‘a’,‘def’] join()的作用和split()相反,将一系列的字符串连接起来。 a=’*’.join([‘a’,‘b’,‘c’,‘d’]) => a=‘abc*d’ a=’’.join([‘a’,‘b’,‘c’,‘d’]) => a=‘abcd’ 如果涉及大量计算,用join()性能比+好(+会重新生成一个字符对象) -
成员操作符 in / not in 判断某个字符(子字符串)是否存在于字符串中。 ‘ab’ in ‘abc’ => True -
字符串驻留机制 字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 python对符合标识符规则的字符串(仅包含下划线_,字母和数字)会启用字符串驻留机制。 a=‘abc_123’ b=‘abc_123’ #驻留池中只有一个’abc_123’ a is b => True a=‘abc@’ b=‘abc@’ a is b => False -
字符串常用查找方法 a=‘abcdefghijklnmoppqrst’
方法和示例 | 说明 | 结果 |
---|
len(a) | 字符串长度 | 21 | a.startswith(‘abc’) | 以指定字符串开头 | True | a.endswith(‘qrst’) | 以指定字符串结尾 | True | a.find(‘p’) | 第一次出现指定字符串的位置 | 15 | a.rfind(‘p’) | 最后一次出现指定字符串的位置 | 16 | a.count(‘p’) | 统计指定字符串出现了几次 | 2 | a.isalnum() | 判断所有字符是否全是字母或数字 | True |
-
去除首尾信息 strip()去除首尾字符串指定信息,通过lstrip()去除字符串左边指定信息,rstrip()去除字符串右边指定信息。 ’**ab*cd**’.strip(’*’) => ‘ab*cd’ ’**ab*cd**’.lstrip(’*’) => ‘ab*cd**’ ’**ab*cd**’.rstrip(’*’) =>’**ab*cd’ -
大小写转换
示例 | 说明 |
---|
a.capitalize() | 产生新的字符串,首字母大写 | a.title() | 产生新的字符串,每个单词都首字母大写 | a.upper() | 产生新的字符串,所有字符全部转成大写 | a.lower() | 产生新的字符串,所有字符全部转成小写 | a.swapspace() | 产生新的字符串,所有字母大小写转换 |
- 格式排版
center(10,’*’),字符串居中,左右用*填充,一共10个字符 ljust(10,’*’), 字符串左对齐,右边右边用*填充 ,一共10个字符 rjust(10), 字符串右对齐,左边用空格填充,一共10个字符
13.其它函数
函数 | 描述 |
---|
isalnum() | 是否全是字母或数字 | isalpha() | 是否只有字母组成(含汉字) | isdigit() | 是否只有数字组成 | isspace() | 是否为空白符 | isupper() | 是否为大写字母 | islower() | 是否为小写字母 |
八、运算符
数字运算符(整数/浮点数)
运算符 | 说明 | 例子 |
---|
+ - * / | 加减乘 浮点数除法 | | // | 整数除法 | 7//2=3 | % | 模(取余) | 7%2=1 | ** | 幂 | 7**2=49 |
增强型数值运算符
运算符+ - * / // ** %等和=结合,构成增强型赋值运算符。
运算符 | 示例 | 结果 |
---|
+= | a += 2 | a=a+2 | -= | a -= 2 | a=a-2 | *= | a *= 2 | a = a*2 | /= | a /= 2 | a = a /2 | //= | a //= 2 | a=a//2 | **= | a **= 2 | a=a**2 | %= | a%=2 | a=a%2 |
比较运算符
a=10,b=20
运算符 | 描述 | 示例 |
---|
== | 比较两个对象值是否相等 | (a == b)返回False | != | 比较两个对象是否不相等 | (a != b)返回True | > | 比较x是否大于y | ( a > b)返回False | < | 比较x是否小于y | ( a < b)返回True | >= | 比较x是否大于等于y | ( a >=b)返回False | <= | 比较x是否小于等于y | ( a <=b)返回True |
逻辑运算符
运算符 | 格式 | 说明 |
---|
or | x or y | x为True,返回True,x为False,返回y | and | x and y | x为False,返回False,x为True,返回y | not | not x | x为True,返回False,x为False,返回True |
同一运算符
运算符 | 描述 |
---|
is | 判断两个标识符是否引用同一对象 | is not | 判断两个标识符是否引用不同对象 |
-
is与== is比较是否引用同一对象,==比较对象值是否一样,默认调用对象的__eq__()方法。 例如: a=1000,b=1000, a is b 返回False a == b返回True 但是python在命令行中对小的整数对象进行了缓存(范围[-5,256])。 例如: a=100,b=100, a is b 返回True a == b返回True -
is运算符比==效率高,在变量和None进行比较是,应该使用is。
|