1. Assert

assert len(unique_characters) <= 10, 'Too many letters'
#…等价于:
if len(unique_characters) > 10:
raise AssertionError('Too many letters'

2.找出不同字母

>>> words = ['SEND', 'MORE', 'MONEY']
>>> ''.join(words) #join 字符串连接符
'SENDMOREMONEY'
>>> set(''.join(words)) #set 返回不重复字符
{'E', 'D', 'M', 'O', 'N', 'S', 'R', 'Y'}

3. List Set Tuple

>>> unique_characters = {'E', 'D', 'M', 'O', 'N', 'S', 'R', 'Y'}
>>> tuple(ord(c) for c in unique_characters)
(89, 83, 82, 77, 79, 78, 69, 68)
>>> set(ord(c) for c in unique_characters)
{68, 69, 77, 78, 79, 82, 83, 89}
>>> list(ord(c) for c in unique_characters)
[89, 83, 82, 77, 79, 78, 69, 68]

4. 排列

list(itertools.permutations('ABC', 3))    #取ABC 3个元素的排列组合
[('A', 'B', 'C'), ('A', 'C', 'B'),
('B', 'A', 'C'), ('B', 'C', 'A'),
('C', 'A', 'B'), ('C', 'B', 'A')]

5. 排列分组

>>> names = ['Alex', 'Anne', 'Chris', 'Dora', 'Ethan','John', 'Lizzie', 'Mike', 'Sarah', 'Wesley']
>>> import itertools
>>> groups = itertools.groupby(names,len)
>>> groups
<itertools.groupby object at 0x01433F30>
>>> list(groups)
[(4, <itertools._grouper object at 0x013DA830>),
(5, <itertools._grouper object at 0x01426190>),
(4, <itertools._grouper object at 0x01426C70>),
(5, <itertools._grouper object at 0x01426130>),
(4, <itertools._grouper object at 0x01426030>),
(6, <itertools._grouper object at 0x014261D0>),
(4, <itertools._grouper object at 0x014265D0>),
(5, <itertools._grouper object at 0x01426110>),
(6, <itertools._grouper object at 0x01426150>)]
>>> names = sorted(names,key=len) #列表需要排序才能group by
>>> names
['Alex',
'Anne',
'Dora',
'John',
'Mike',
'Chris',
'Ethan',
'Sarah',
'Lizzie',
'Wesley']
>>> A = itertools.groupby(names,len)
>>> list(A) #调用list() 函数会“耗尽”这个迭代器, 也就是说 你生成了迭代器中所有元素才创造了这个列表
[(4, <itertools._grouper object at 0x014261D0>),
(5, <itertools._grouper object at 0x014268D0>),
(6, <itertools._grouper object at 0x01426C90>)]
>>> for name_len, name_iter in A: #List(A) 为空
... print('%d' %(name_len))
... for name in name_iter:
... print(name)
...
>>>
>>> A = itertools.groupby(names,len) #重新产生
>>> for name_len, name_iter in A:
... print('%d' %(name_len))
... for name in name_iter:
... print(name)
...
4
Alex
Anne
Dora
John
Mike
5
Chris
Ethan
Sarah
6
Lizzie
Wesley

6. List 的extend 和append的差别

>>> a_list = ['a','b','c']
>>> a_list.extend(['d','e']) #extend() 方法只接受一个参数,而该参数总是一个列表
>>> a_list
['a', 'b', 'c', 'd', 'e']
>>> len(a_list)
5
>>> a_list.append(['f','g']) #append() 方法只接受一个参数,但可以是任何数据类型
>>> a_list
['a', 'b', 'c', 'd', 'e', ['f', 'g']]
>>> len(a_list)
6

7. Set 的discard和remove的差别

>>> a_set = {1, 3, 6, 10, 15, 21, 28, 36, 45}
>>> a_set
{1, 3, 36, 6, 10, 45, 15, 21, 28}
>>> a_set.discard(10) ①
>>> a_set
{1, 3, 36, 6, 45, 15, 21, 28}
>>> a_set.discard(10) ②
>>> a_set
{1, 3, 36, 6, 45, 15, 21, 28}
>>> a_set.remove(21) ③
>>> a_set
{1, 3, 36, 6, 45, 15, 28}
>>> a_set.remove(21) ④
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 21
#区别在于:如果该值不在集合中,remove() 方法引发一个 KeyError 例外

8.混合字典

SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}
>>> SUFFIXES[1024] ④
['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
>>> SUFFIXES[1000][3] ⑤ #
'TB'

9.文件路径操作

>>> import os
>>> print(os.getcwd()) #当前工作路径
D:\study\workspace\pythonTest\src
>>> print(os.path.expanduser('~')) #$home路径
C:\Documents and Settings\yfzhou
>>> print(os.path.join(os.path.expanduser('~'),'hello','world','python.py')) #构建动态的文件夹和文件
...
C:\Documents and Settings\yfzhou\hello\world\python.py

10. 罗列目录下的文件

>>> os.chdir('/Users/pilgrim/diveintopython3/') #改变当前路径
>>> import glob
>>> glob.glob('examples/*.xml') #返回匹配的文件
['examples\\feed-broken.xml',
'examples\\feed-ns0.xml',
'examples\\feed.xml']
>>> os.chdir('examples/') #改变路径
>>> glob.glob('*test*.py') #返回匹配的通配符文件
['alphameticstest.py',
'pluraltest1.py'
]

11.文件元信息

>>> metadata = os.stat('roman.py') #用os.stat() 函数返回一个包含多种文件元信息的对象
>>> metadata.st_mtime
1373272096.4869184
>>> import time
>>> time.localtime(metadata.st_mtime)
time.struct_time(tm_year=2013, tm_mon=7, tm_mday=8, tm_hour=16, tm_min=28, tm_sec=16, tm_wday=0, tm_yday=189, tm_isdst=0) #可读性更强
>>> metadata.st_size #文件大小
2546
>>> print(os.path.realpath('roman.py')) #文件绝对路径
D:\study\workspace\pythonTest\src\roman.py

12.字典键值互换

>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> {value:key for key, value in a_dict.items()}
{1: 'a', 2: 'b', 3: 'c'}

13. __str__ and __repr__

  • __str__ is tried first for the print operation and the str built-in function (the internal

equivalent of which print runs). It generally should return a user-friendly
display.

  • __repr__ is used in all other contexts: for interactive echoes, the repr function, and

nested appearances, as well as by print and str if no __str__ is present. It should
generally return an as-code string that could be used to re-create the object, or a
detailed display for developers

>>> class addboth(adder):
... def __str__(self):
... return '[Value: %s]' % self.data # User-friendly string
... def __repr__(self):
... return 'addboth(%s)' % self.data # As-code string
...
>>> x = addboth(4)
>>> x + 1
>>> x # Runs __repr__
addboth(5)
>>> print(x) # Runs __str__
[Value: 5]
>>> str(x), repr(x)
('[Value: 5]', 'addboth(5)')

Two usage notes:

1.keep in mind that __str__ and__repr__ must both return strings

2.depending on a container’s string-conversion logic, the user-friendly display of __str__ might only applywhen objects appear at the top level of a print operation; objects nested in larger objects might still print with their __repr__ or its default

>>> class Printer:
... def __init__(self, val):
... self.val = val
... def __str__(self): # Used for instance itself
... return str(self.val) # Convert to a string result
...
>>> objs = [Printer(2), Printer(3)]
>>> for x in objs: print(x) # __str__ run when instance printed
... # But not when instance in a list!
2
3
>>> print(objs)
[<__main__.Printer object at 0x025D06F0>, <__main__.Printer object at ...more...
>>> objs
[<__main__.Printer object at 0x025D06F0>, <__main__.Printer object at ...more... ----------------------------
>>> class Printer:
... def __init__(self, val):
... self.val = val
... def __repr__(self): # __repr__ used by print if no __str__
... return str(self.val) # __repr__ used if echoed or nested
...
>>> objs = [Printer(2), Printer(3)]
>>> for x in objs: print(x) # No __str__: runs __repr__
...
23
>>> print(objs) # Runs __repr__, not ___str__
[2, 3]
>>> objs
[2, 3]

Python 学习笔记(五)杂项的更多相关文章

  1. python学习笔记五 模块上(基础篇)

    模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  2. Python学习笔记五

    一. 递归 递归函数: def a (): print ("from b") b() def b(): print("from a ") a() a() 递推和 ...

  3. Python学习笔记五:错误与异常

    一:常见异常与错误 BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception 常规错误的基类S ...

  4. python学习笔记(五):装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

  5. Python学习笔记五(读取提取写入文件)

    #Python打开读取一个文件内容,然后写入一个新的文件中,并对某些字段进行提取,写入新的字段的脚本,与大家共同学习. import os import re def get_filelist(dir ...

  6. Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

  7. python学习笔记五 模块下(基础篇)

    shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...

  8. python学习笔记五--文件

    任何情况下文本文件在Python里均是字符串模式. 一.创建一个文件,并写入: 函数open(文件名,w) 二.打开一个文件,并读取: 函数open(文件名,r),“r”是默认值,可以不用写 三.使用 ...

  9. Python学习笔记五--条件和循环

    5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...

  10. Python学习笔记五,函数及其参数

    在Python中如何自定义函数:其格式为 def 函数名(函数参数): 内容

随机推荐

  1. CodeSmith连接Mysql配置

    1,首先需要将MySql.Data.dll复制到codesmith安装目录下v6.5/bin文件夹下,注意dll的版本 2,其次采用的是.net4.0的配置文件,找到C:\Windows\Micros ...

  2. 批处理 —— 每天生成一个以日期命名的文件(Win XP)

    想达到这样一个效果:每天在某个目录下生成一个以日期命名的文件(如,0705.txt). 第一步,新建一个批处理文件 新建一个文件,比如[create_day_file.bat].编辑,输入以下内容 : ...

  3. OpenMp并行提升时间为什么不是线性的?

    最近在研究OpenMp,写了一段代码,如下: #include<time.h> #include<stdio.h> #include<stdlib.h> #incl ...

  4. DataGridView中的单元格提示错误信息

    http://stackoverflow.com/questions/7713988/winforms-problems-validating-a-cell-in-a-datagridview

  5. java 文件text的写入

    日志文件 OutputStream out = new FileOutputStream(f, true); if (list1.size() > 0) { int h1 = 0; for (i ...

  6. 浅析JavaScript之Function类型

    JavaScript中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上只是指向函数对象的指针,保存函数在堆内存中的地 ...

  7. LA 2965 Jurassic Remains

    这是我做的第一道状态压缩的题目,而且我自己居然看懂了,理解得还算透彻. 题意:给出若干个大写字母组成的字符串,然后选取尽量多的字符串使得这些字母出现偶数次. 最朴素的想法,穷举法:每个字符串只有选和不 ...

  8. [转]使用 jQuery Mobile 与 HTML5 开发 Web App —— jQuery Mobile 事件详解

    在前文<使用 jQuery Mobile 与 HTML5 开发 Web App —— jQuery Mobile 默认配置与事件基础>中,Kayo 对 jQuery Mobile 事件的基 ...

  9. linux 命令行字符终端terminal下强制清空回收站

    回收站其实就是一个文件夹,存放被删掉的文件. ubuntu 回收站的路径: $HOME/.local/share/Trash/ 强制清空回收站: rm -fr $HOME/.local/share/T ...

  10. XE7 - Image的双击事件无响应,咋整?(已解决)

    今天折腾了好一会,本想做个类似于手机相册的功能,显示SQLite数据库中的图片,然后继续做一些处理.哪成想,写个测试例子时就被卡住了:简单的往窗体上拖放了一个TImage和一个TLabel,没有修改任 ...