您好,欢迎来到知库网。
搜索
您的当前位置:首页python学习笔记

python学习笔记

来源:知库网
一.python学习之输出重定向

Python 支持输出重定向。其主要的操作主要包括三个部分: 1、 导入(sys模块)

2、 保存标准输出(是为了在关闭重定向文件后能够直接返回到标准输出) 3、 重定向 Import sys

save_out=sys.stdout

sys.stdout=open('testfile','w+')

二.Python下的数据类型

Python把类型本身当成对象,数据本身也当成对象,因此python中的赋值语句都是引用传递的,即:当对象被创建并赋值给变量时,都是将该对象的引用赋值给变量,然后会将该对象的引用计数设置为1.。Python中不存在自增自减操作符(++,--)等。 1.数字类型 :(有符号整型,浮点型, 复数) 2.字符串类型(不存在c语言中的字符类型(char)) 3.列表类型(列表元素的个数及元素的值可以改变) 4.元组类型(元素的值是不可以改变的)

5.字典类型(映射数据类型:key值 和 value值)

Python按照对象的存储模型将数据类型分为:原子(标量存储)类型和容器存储类型。

Python按照对象的值的可变性将对象数据类型分为:可变数据类型(列表和字典)和不可变数据类型(数字、字符串、元组)。、

Python按照对象的访问方式将对象数据类型分为:直接存取类型(非容器类型(所有数字类型))、顺序类型(字符串、元组、列表)、映射类型(字典)。 数据类型 数字 字符串 元组 列表 字典

存储方式 标量存储 标量存储 容器存储 容器存储 容器存储

更新模型 不可变 不可变 不可变 可变 可变

访问方式 直接存取 顺序访问 顺序访问 顺序访问 映射访问

Python中的任何对象都包括3个属性:

1.身份(用于唯一标识自己的身份,可通过内建函数id()获得) (只读) 2.类型(数据类型) (只读) 3.值(对象的实际值(数据项))

Python提供is 和 is not 操作符来测试两个变量是否指向同一个对象。

三.Python下range函数 、enumerate函数、zip函数

range函数以书中为例:p105,每次把位于字符串最后的一个字符砍掉。

>>> s='abcde'

>>> for i in range(len(s),0,-1): print(s[:i]) abcde abcd abc ab a

range函数的原型为:range(start,end,step),默认情况下,start=0,step=1.xrange()函数是range()函数的扩展,它支持比range()范围更大的值。

enumerate函数的用法: for i,char in enumerate(s): print(i,char) 0 a 1 b 2 c 3 d 4 e 5 f

zip 函数的用法:zip也和enumerate的用法一致,需要通过循环遍历,才能访问对应的返回值。

>>> a='123' >>> b='abc' >>> zip(a,b)

:报错 >>> for k,s in zip(a,b): print(k,s) 1 a 2 b 3 c

四.Python下的浅拷贝

顺序访问类型的浅拷贝是默认类型拷贝。可以通过几种方式实施: (1) 完全的切片操作[:]

(2) 利用工厂函数(dict( ). List( )等) (3) 使用copy函数

因此必须区分浅拷贝和直接引用的区别,浅拷贝是在如上三种条件下才会产生: (1)>>> person=['name',['savings',100]]

>>> hus=person >>> wife=person

>>> id(hus),id(wife),id(person) 16783840,16783840,16783840

此时hus,wife,及person的id是相同的,这说明此时,仅仅是增加了person的引用数,因此,如果此时更改这3个值中的任意一个值,都会导致剩下的两个值改变。充分体现了应用传递的方式。

如:>>> hus[0]='tingfeng'

>>> wife[0]='bozhi' >>> hus

['bozhi', ['savings', 100]] >>> wife

['bozhi', ['savings', 100]] (2)浅拷贝是新创建了一个类型跟原对象一样,该对象的内容是原来对象的引用,因此,在浅拷贝下,新对象的id必然会和原对象不同: 如:>>> person=['name',['savings',100]]

hus=person[:] >>> wife=list(person)

>>> id(hus),id(wife),id(person) 16856008,16857608,16783840

同时,由于此时的对象是新创建的,对象的值是引用原来的,如果原来的对象元素是可变的,则改可变对象将引用原来对象对应的值,如果原来的对象元素是不可变的,则,在浅拷贝下,不可变对象将被显示拷贝,并新创建一个不可变对象,同时对应新对象的元素只是把它的引用复制一下,实际并不是它的成员。即:下例中,’tingfeng’并不是hus的成员,仅仅是引用。

如:>>> hus[0]='tingfeng'

>>> wife[0]='bozhi' >>> hus,wife

(['tingfeng', ['savings', 100]], ['bozhi', ['savings', 100]]) >>> hus[1][1]=50 >>> hus,wife

(['tingfeng', ['savings', 50]], ['bozhi', ['savings', 50]])

根据上例:,

在hus[0]和wife[0]赋值以前,hus和wife对象中各个元素的引用地址是相同的,即: 改变前:>>> [id(x) for x in hus]

[11300512, 16858128] >>> [id(x) for x in wife] [11300512, 16858128]

当执行完>>> hus[0]='tingfeng', wife[0]='bozhi'操作后,hus和wife这两个列表对象中的元素的引用地址则发生了变化,即: 改变后:>>> [id(x) for x in hus]

[16918656, 16858128] >>> [id(x) for x in wife]

[168608, 16858128]

五.深拷贝

示例:>>> hus=person

>>> import copy

>>> wife=copy.deepcopy(person)

在浅拷贝中对可变对象引用相同值,因此,会出现如下情况:

>>> hus[1][1]=50 >>> hus,wife

(['tingfeng', ['savings', 50]], ['bozhi', ['savings', 50]])

在深拷贝就可以实现:

>>> hus[1][1]=50 >>> hus,wife

(['tingfeng', ['savings', 50]], ['bozhi', ['savings', 100]])

对于拷贝操作而言,需要注意:

(1) 非容器类型没有拷贝一说,同时浅拷贝是用完全切片操作来完成的。 (2) 如果元组变量只包含原子类型对象,对它的深拷贝将不会进行。 六.字典

字典的键值必须是可哈希的,因此,诸如:列表和字典这样的可变类型是不能作为键值的,因为它们不可哈希。 七.集合

集合被创建的唯一方法就是调用set()和frozenset()函数。 如:>>> s=set('abcdefg')

>>> s

{'a', 'c', 'b', 'e', 'd', 'g', 'f'}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务