用python这么久其实对于基础python知识一直没有一个系统的理解,需要花时间重构自己的认识体系了。
以下皆为整理网上的内容——
Python和其他语言的区别
Python属于解释型语言,当程序运行时,是一行一行的解释,并运行,所以调式代码很方便,开发效率高,有着非常强大的第三方库
特点:
语法简洁优美,功能强大,标准库与第三方库都非常强大,而且应用领域也非常广,可移植性,可扩展性,可嵌入性
缺点:
运行速度慢
- 解释型:就是边解释边执行
- python/php
- 编译型:编译后再执行
- c/java/c#
与其他语言比较:
(1)与java相比:在很多方面,Python比Java要简单,比如java中所有变量必须声明才能使用,而Python不需要声明,用少量的代码构建出很多功能;(高效的高级数据结构)
(2)与php相比:python标准包直接提供了工具,并且相对于PHP代码更易于维护;
(3)Python与c相比:Python 和 C Python这门语言是由C开发而来
对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.
对于速度:Python的运行速度相较与C更慢了
Python3和Python2的区别?
- 打印时,py2需要可以不需要加括号,py3 需要
print语句被python3废弃,只能使用print函数;exec语句被python3废弃,统一使用exec函数 - 输出中文的区别
python2:要输出中文 需加 # -- encoding:utf-8 --
Python3 : 直接搞 - input不同
python2 :raw_input
python3 :input 统一使用input函数 - long整数类型被Python3废弃,统一使用int
- 迭代器iterator的next()函数被Python3废弃,统一使用next(iterator)
- 异常StandardError 被Python3废弃,统一使用Exception
- 字典变量的has_key函数被Python废弃,统一使用in关键词
- file函数被Python3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型
常用数据类型的(字符串、列表、元组、字典)常用的5个方法?
字符串:
字符串用单引号(’)或双引号(")括起来,不可变
- find通过元素找索引,可切片,找不到返回-1
- index,找不到报错。
- split 由字符串分割成列表,默认按空格。
- captalize 首字母大写,其他字母小写。
- upper 全大写。
- lower 全小写。
- title,每个单词的首字母大写。
- startswith 判断以什么为开头,可以切片,整体概念。
- endswith 判断以什么为结尾,可以切片,整体概念。
- format格式化输出
- strip 默认去掉两侧空格,有条件,
- lstrip,rstrip
- center 居中,默认空格。
- count查找元素的个数,可以切片,若没有返回0
- expandtabs 将一个tab键变成8个空格,如果tab前面的字符长度不足8个,则补全8个
- replace(old,new,次数)
注意
isdigit 字符串由字母或数字组成 isalpha, 字符串只由字母组成
List item,isalnum 字符串只由数字组成
swapcase 大小写翻转
for i in 可迭代对象。
字典:
1无序(不能索引)2:数据关联性强3:键值对,键值对。唯一一个映射数据类型。
#字典的键必须是可哈希的 不可变类型。
在同一个字典中,键(key)必须是唯一的。
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取
- key: 输出所有的键
- clear:清空
- dic:删除的键如果没有则报错
- pop:键值对删,有返回,没有原来的键会报错(自行设置返回键就不会报错)
- popitem:随机删键值对
- del:删除的键如果没有则报错,
- 改 update
- 查 用get时。不会报错# 没有可以返回设定的返回值
注意:
字典是一种映射类型,它的元素是键值对。
字典的关键字必须为不可变类型,且不能重复。
创建空字典使用 { }。
列表:
索引,切片,加,乘,检查成员。
增加:有三种,
append:在后面添加。
Insert按照索引添加,
expend:迭代着添加。
list.extend(seq) - 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
pop 删除 (pop 有返回值)
remove 可以按照元素去删
clear 清空列表
del 1、可以按照索引去删除 2、切片 3、步长(隔着删)
改 1、索引 2、切片:先删除,再迭代着添加
list.count(obj) - 统计某个元素在列表中出现的次数
list.index(obj) - 从列表中找出某个值第一个匹配项的索引位置
list.reverse() - 反向列表中元素
list.sort([func]) - 对原列表进行排序
注意:
1、List写在方括号之间,元素用逗号隔开。
2、和字符串一样,list可以被索引和切片。
3、List可以使用+操作符进行拼接。
4、List中的元素是可以改变的。
元组:
()元组的元素不能修改
1、cmp(tuple1, tuple2):比较两个元组元素。
2、len(tuple):计算元组元素个数。
3、max(tuple):返回元组中元素最大值。
4、min(tuple):返回元组中元素最小值。
5、tuple(seq):将列表转换为元组。
注意
1、与字符串不一样,元组的元素不能修改。
2、元组也可以被索引和切片,方法一样。
3、注意构造包含0或1个元素的元组的特殊语法规则。
4、元组也可以使用+操作符进行拼接。
Set(集合)
集合(set)是一个无序不重复元素的序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
—8.13—
数据类型转换
*int(x,base=10)x字符串或数字,base进制数,默认十进制,浮点转为整数
*float()整数转换为浮点型
*complex(1,2) 转换为复数
*str(10)将对象转换为字符串
*repe()将对象转换为表达式字符串
*repr(dict)将对象转换为表达式字符串
*eval(str)用来计算在字符串中有效的python表达式,返回一个对象
*tuple(listi)将列表转化为元组
*list()将元组转换为列表
*set转换集合
Python的深浅拷贝
浅拷贝只是增加了一个指针指向一个存在的地址,
而深拷贝是增加一个指针并且开辟了新的内存,这个增加的指针指向这个新的内存,
采用浅拷贝的情况,释放内存,会释放同一内存,深拷贝就不会出现释放同一内存的错误
一层的情况:
import copy
#浅拷贝
li1 = [1, 2, 3]
li2 = li1.copy()
li1.append(4)
print(li1, li2) # [1, 2, 3, 4] [1, 2, 3]
# 深拷贝
li1 = [1, 2, 3]
li2 = copy.deepcopy(li1)
li1.append(4)
print(li1, li2) # [1, 2, 3, 4] [1, 2, 3]
多层的情况:
import copy
# 浅拷贝 指向共有的地址
li1 = [1, 2, 3,[4,5],6]
li2 = li1.copy()
li1[3].append(7)
print(li1, li2) # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5, 7], 6]
# 深拷贝 重指向
li1 = [1, 2, 3,[4,5],6]
li2 = copy.deepcopy(li1)
li1[3].append(7)
print(li1, li2) # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5], 6]
Python垃圾回收机制
引用计数
标记清除
分代回收
Python的可变类型和不可变类型
可变数据类型:列表、字典、可变集合
不可变数据类型:数字、字符串、元组、不可变集合