python学习手册2

  1. python中map函数的使用方法:map() 会根据提供的函数对指定序列做映射。
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
>>>def square(x) :            # 计算平方数
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
 
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

#第一个参数为函数,其后的参数个数要符合函数的参数
#生成一个列表
  1. 创建字典的四种不同方式适用不同:
这四种形式都会建立相同的两键字典,但它们在不同的条件下有用:
1·如果你可以事先拼出整个字典,那么第一种是很方便的。
2·如果你需要一次动态地建立字典的一个字段,第二种比较合适。
3·第三种关键字形式所需的代码比常量少,但是键必须都是字符串才行。
4·如果你需要在程序运行时把键和值逐步建成序列,那么最后一种形式比较有用。

1.
{'A' = 1 , 'B' = 3} 
2.
D = {}
D['A'] = 1
D['B'] = 3
3.
dict(A = 1 , B = 3)
4.
dict([('A' = 1),('B' = 3)])
  1. 对于python2和python3中的字典差异:1.对于D.key、D.values和D.items方法,返回可迭代的视图,而不是列表。因此不支持类似索引和列表的各种方法,需要使用需要list转化。 2.由于前面一点,需要新的编码方式通过排序键来遍历。3.不再直接支持相对大小比较——取而代之的是手动比较。4.不再有D.has_key方法——相反,使用in成员关系测试。5.python3支持字典解析(类似列表解析)
  2. zip函数可以将两个列表中的位置相同的元素映射为一对,于是构建字典很容易使用zip函数加上键列表和值列表套上dict生成
  3. python3中字典返回的key和items视图可以进行集合运算,而values不行,因为其不唯一
  4. 值得注意的区别在于“+”、“*”以及分片操作应用于元组时将返回新元组,并且元组不提供字符串、列表和字典中的方法。例如,如果你想对元组进行排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法调用的权限,或者使用新的sorted内置方法,它接受任何序列对象(以及更多)
>>> t = ('aa','cc','vv','bb')
>>> sorted(t)
['aa', 'bb', 'cc', 'vv']
  1. 写入文本:将打开的文件状态设置为’w’,之后采用write方法写入文件中。
    注意:当你所要编辑的原文件已经存在,再以’w’格式打开,则会覆盖原来的文件!!所以采用先判断文件是否存在,然后再open但当需要将字符串加入文本文件时,一种常见方式是 ‘a’ ,将字符串加入文件末尾,这种方式不会删除原文件。
  2. 文件中的写操作一般先写入缓冲区中,当文件操作关闭或者缓冲区满时,才写入文件中,也可以以使用flush()将目前缓冲区中的内容写入文件中,不要求关闭文件或者缓冲区满。
  3. python3中提供了新的文件打开方式,
#例如
fo.open('1.txt',encoding = 'latin-1')#以Unicode文件格式打开
fo.open('1.txt','rb')#以二进制文件格式打开
  1. 要打开的两个参数必须都是Python的字符串,第三个是可选参数,它能够用来控制输出缓存:传入“0”意味着输出无缓存(写入方法调用时立即传给外部文件)。
  2. Python 2.6文本文件处理8位文本和二进制数据,并且有一种特殊的字符串类型和文件接口(unicode字符串和odecs.open)来处理Unicode文本。Python 3.0中的区别源自于简单文本和Unicode文本都合并为一种常规字符串类型这一事实——这是有意义的,因为所有的文本都是Unicode,包括ASCII和其他的8位编码。
  3. 有些高级应用程序也需要处理打包的二进制数据,这些数据可能是C语言程序生成的。Python的标准库中包含一个能够在这一范围起作用的工具:struct模块能够构造并解析打包的二进制数据。
  4. 如果你的确需要拷贝,那么可以明确要求。1.没有限制条件的分片表达式(L[:])能够复制序列。2.字典copy方法(X.copy())能够复制字典。3.有些内置函数(例如,list)能够生成拷贝(list(L))。4.copy标准库模块能够生成完整拷贝。
>>> L = [1,2,3,4]
>>> D = {'A' : 1 , 'B' : 2}
>>> s = L[:]
>>> t = D.copy()
>>> s[1] = 'spam'
>>> t['A'] = 'test'
>>> L,D
([1, 2, 3, 4], {'A': 1, 'B': 2})
>>> s,t
([1, 'spam', 3, 4], {'A': 'test', 'B': 2})
  1. ==与is的区别:==是判断值相等,is判断所引用的对象是否为同一个
>>> s1 = 'spam'
>>> s2 = 'spam'
>>> s1 is s2
True
>>> s1 = 'a long string'
>>> s2 = 'a long string'
>>> s1 is s2
False

#出现这样的原因是:因为在Python内部暂时储存并重复使用短字符串作为最佳化,
#事实上内存里只有一个字符串'spam'供S1和S2分享。因此,"is"一致性测试结果为真。
#为了得到更一般的结果,我们需要使用更长的字符串
#同样在python虚拟机启动时会创建一个数池,在-5~256的整数对象一致
  1. 使用None来为列表配置初始空间,同样也可以用0等
  2. 在赋值中,有python2和python3的区别
#当表示序列赋值时,引用个数要与对象个数一致,否则会报错
>>> a,b,c = 'spam'

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    a,b,c = 'spam'
ValueError: too many values to unpack

#在python2中,是不能实现切片赋值
>>> a,*b = 'spam'
SyntaxError: invalid syntax
#在python3中可以实现,将字符左边一个赋值给一个引用,剩下的所有赋值给另一个引用
>>> a,*b = 'spam'
>>> a,b
('s', ['p', 'a', 'm'])
#星号所指向的引用一定为列表,没有元素则是空列表
  1. python2和python3中print的区别
1. Python2中不加小括号,Python3中加小括号
2. python2中对于行尾的连续显示输出使用逗号 print x,y,
   python3中对于行尾的连续显示输出使用end='' print(x,y,end = '')
3. python2中使用>>进行输出重定向 print >> afile,x,y
   python3中使用file=afile进行重定向输出 print(x,y,file = afile)
   例如:
        log = open('test.txt','a')
        #python3
        print(x,y,z,file=log) #将(x,y,z)输出到文件中去
        #python2
        print >> log,a,b,c #将(a,b,c)输出到文件中去
  1. enumerate函数返回一个生成器对象:这种对象支持下一章将要学习的迭代协议,本书下一部分会再深入讨论迭代协议。简而言之,这个对象有一个__next__方法,由下一个内置函数调用它,并且循环中每次迭代的时候它会返回一个(index,value)的元组。我们可以在for循环中通过元组赋值运算将元组解包(很像是使用zip)
>>> s='spam'
>>> e = enumerate(s)
>>> e
<enumerate object at 0x0000000003785CA8>
>>> next(e)
(0, 's')
>>> next(e)
(1, 'p')
  1. yield函数认识
def square(x):
    for i in range(x):
        yield i ** 2
#本身不会输出,产生一个生成器对象,用于迭代

for i in square(5):
    print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值