Day02 pyc文件,列表,元组,字典,深浅拷贝,数据运算
一. pyc文件
Python是一门解释型语言,和编译型不同在于,编译型语言是在程序执行前先编译完代码,然后再把它转换成机器语言直接执行,典型代表是C,
而解释型语言没有先编译的过程,而是在程序执行时通过解释器对程序逐行解释,然后直接执行,典型代表是Ruby。
随着Java等虚拟机语言兴起,又不能纯粹的把语言分为解释型和编译型。以Java为例,Java首先通过编译器将程序编译成字节码文件,然后通过解释
器解释成机器语言再执行,所以Java是一种先编译后解释的语言。
Python其实也是先编译后解释,当Python运行时,编译的结果保存在内存中的PyCodeObject中,当Python结束时,Python解释器则将位于内存中的
PyCodeObject写回到.pyc文件。当Python第二次运行时,程序会首先找硬盘中的.pyc文件,如果存在该文件,则执行,如果不存在,则重复上面过程。
.pyc文件是PyCodeObject一种持久化方式。
二. 数据类型
1.数字
int 整型
float 浮点型
complex 复数
2.字符串
'Hello World!'
3.布尔型
True or False
4. 列表(有序)
1,创建一个列表,解释器在内存中创建一个类似数组的数据结构存储数据,数据项自下而上堆放,堆栈自下而上的编号从0开始自增1
2,列表是一个数据集合,数据项之间用逗号隔开,整个列表用中括号包围。
3,列表可以伸缩,数据使用的所有内存都由Python管理
4,可以用BIF处理列表,还支持列表的一组方法。index(),append(),extend(),remove(),pop(),insert()..
eg:cast=['Diesel','Statham','Diesel']
or cast= dict(['Diesel','Statham','Diesel'])
print(cast)
#查找列表中指定元素的所在位置,如果有多个元素,返回第一次找到的位置
cast.index('Statham')
#往列表末尾追加一个元素
cast.append('Walker')
#往列表末尾扩展一个列表
cast.extend(['Rodriguez','Johnson'])
#从列表里移除一个指定的元素,如果有多个重复元素,只移除第一个元素
cast.remove('Walker')
#默认从列表末尾移除元素,也可指定位置移除元素
cast.pop(2)
#指定插入位置,插入数据项
cast.insert(2,'Walker')
5,列表切片
eg:cast=['Diesel','Statham','Diesel']
cast[:1] #取第一个元素
cast[1:2] #取第二个元素
cast[-1:] #取最后一个元素
一次删除一个列表切片
del cast[1:]
6,列表长度
eg:cast=['Diesel','Statham','Diesel']
len(cast)
7,列表可以用于存放任意数据,而且数据可以是混合类型。列表还可以嵌套列表。
eg:cast=['Diesel','Statham',['Walker',2013,['Furious 7']]]
4. 元组(不可变的列表)
eg:cast=('Diesel','Statham','Diesel')
or cast=tuple(('Diesel','Statham','Diesel'))
cast.index('Diesel') #指定元素的位置
cast.count('Diesel') #指定元素的计数
5. 字典(无序)
字典是可变的,并且可以存储任意数量的Python对象,包括其他容器类型另一个容器类型。字典包括键对(称为项目)及其相应的值。Python字典也被称为关联数组或哈希表。
每个按键都来自它的值用冒号(:),该项目以逗号分隔,整个事情是包含在大括号分隔。没有任何项目一个空的字典是写只有两个大括号,就像这样:{}
键在一个字典中是唯一的,而值可能不是。字典的值可以是任何类型的,但键必须是不可变的数据类型,例如字符串,数字,或元组。
eg:cast={'name':'Diesel','age':'35'}
or cast=dict({'name':'Diesel','age':'35'})
1,访问字典的值
访问字典的值可以通过方括号引起要访问的键,结果就会得到该键的值
cast['name']
如果访问一个不存在的键,会得到一个错误提示
2.更新字典
可以通过添加一个新条目,修改现有条目或新增。
eg:cast={'name':'Diesel','age':'35'}
cast['sex'] = 'man'
cast结果为 {'name':'Diesel','age':'35','sex':'man'}
cast['sex'] = 'women'
cast结果为 {'name':'Diesel','age':'35','sex':'women'}
3.删除字典
可以删除单个字典元素或清除字典中的全部内容。也可以删除整个字典在一个单一的操作。要删除整个字典,只要用del语句。
eg:cast={'name':'Diesel','age':'35','sex':'man'}
del cast['name'] #删除一个键值
cast.clear() #删除所有键值,清空字典
del cast #删除字典
4.字典的键属性
字典值没有限制。它们可以是任意Python对象,无论是标准的对象或用户定义的对象。但是作为键,是不可以这样的。
键是唯一的,一个键只能对应一个值,如果存在多个值,那么会自动清理重复的,只保留最后一个值
键是不可改变的,所以只能使用不可变的类型作为键,比如字符串,数字,元组
5.字典的常用方法
cast.clear() #清空字典
cast.copy() #浅拷贝字典
cast.fromkeys() #从序列键值创建一个新的字典
eg:info=['name','sex','age']
cast.fromkeys(info,10)
print(cast) 结果为 {'name':10,'sex':10,'age':10}
cast.get() #返回给定键的值。如果键不可用,则返回默认值None
eg:cast={'name':'Diesel','age':'35'}
cast.get('sex')
cast.get('sex','man')
cast.has_key() #如果给定的键在字典可用,has_key()方法返回true,否则返回false
cast.items() #方法返回字典的(键,值)元组对的列表
cast.keys() #返回在字典中的所有可用的键的列表
cast.setdefault() #返回字典可用的键值,如果给定键不可用,则它会返回所提供的默认值,类似get()方法,但是会设置字典键
cast.update() #将参数的字典对象更新到当前字典中
cast.values() #返回在字典中所有的值列表
三,数据运算
1,算数运算
+ - * /
% #取模运算
** #幂运算
// #整除,取商的整数部分
2,比较运算
==
!= <>
>
<
>=
<=
3,赋值运算
=
+=
-=
*=
/=
%=
**=
//=
4,逻辑运算
and
or
not
5,成员运算
in
not in
6,身份运算
is
is not
7,位运算
& #按位与
| #按位或
^ #按位亦或
~ #按位取反
<< #按位左移
>> #按位右移
四,浅拷贝和深拷贝
copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象
copy.deepcopy 深拷贝 拷贝对象及其子对象
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
输出结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]