Python 学习之路 --------3
1.集合的操作
集合是无序的,而且集合没有重复的元素
常用操作:
s = set([2,3,5,6,576]) #创建一个集合t = set([2,7,4,345]) #创建一个集合a = t | s # t和s的并集b = t & s # t和s的交集c = t - s # 求t对s的差集(项在t中,不在s中)d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
t = set([2,3,5,6,576])
s = set([2,7,4,345])
1.方法Intersection() 并集
print(t.intersection(s))
输出:{2}
2.方法union()交集
print(t.union(s)
输出:{576, 2, 3, 4, 5, 6, 7, 345}
3.方法difference()差集
print(t.difference(s))
4.对称差集
方法:symmetric_difference()
其他方法:
t.add #添加项
t.update #添加多项
t.remove #删除相
x in s
x not in s
s.issubset(t) #s中每个元素是否在t中
s.issuperset(t) #t中每个元素是否在s中
2.文件操作
文件操作:
1)打开文件
2)对文件对象进行操作
3)关闭文件
用with模块打开文件,当结束模块时自动关闭文件,如:
with open("py_file.py") as f:
first_line = f.readline() print('first line:',first_line) #读一行 print('我是分隔线'.center(50,'-')) data = f.read() # 读取剩下的所有内容,文件大时不要用 print(data) #打印文件- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
其他方法:
readline() #读取一行,光标到第二行开始出,第二次调用readline(),读取下一行内容
tell() #打印当前光标的位置
seek() #传入一个参数int 将光标移动到这个位置
3.字符编码
详细文章:
http://www.cnblogs.com/yuanchenqi/articles/5956943.html
http://www.diveintopython3.net/strings.html
.在python2默认编码是ASCII, python3里默认是unicode
***字符编码就是一个大坑,如果不彻底搞清楚,我们就会在将来踩很多坑
最早的编码ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
特别的在python3中默认字符编码是utf-8,在python2中默认编码是acssi码
任何编码转换过程都需要先编译成万国码(unicode)在编译成对应的编码。在python中将utf-8转换成ACSSI编码
第一步 要解码(decode)到unicode,在编码(encode)到ACSSI码
4.函数
1.函数有什么用呢?
函数就像一个包装盒,它会把一段代码包装起来,给包装盒其一个名字,在下一次要用的时候 直接调用包装盒的名字。比如在多次调用时,我们就不必重复输入同样的代码了
2.函数关键子:def
格式 def <name>;body
比如:函数
name = "noble" print = name
当调用函数print_name()时就会打印noble
3.参数
1.函数可以接受参数,并处理
如:
def print_name(name): print(name)当调用print_name("noble")时就会打印noble
参数可以是任意类型:数组,字典,可变长参数(*args(列表) **kwargs(字典))
2.参数类型
默认参数:
def person(name,age=18): print(name,age)调用person(“noble”) 不会出错,当不给age赋值时,age默认为18
*args
def name(*args):
print(*args)
name([2,3,4,5])
输出:([2, 3, 4, 5])
**kwargs
def name(**kwargs):
print(kwargs)
name(name = "noble")
输出:{name:"noble"}
3.返回值
关键字:return
在函数结束时可以返回一个值,用来反映函数的执行状态,在编程中该函数的返回值可能对后续代码执行作出影响
5.局部变量
name = "Noble"def change_name(name): print("before change:",name) name = "Pitifulnoble" print("after change", name)change_name(name)print("在外面看看name改了么?",name)输出
before change: Noble
after change Pitifulnoble
在外面看看name改了么? Noble
全局与局部变量
6.递归
ef calc(n):
print(n) if int(n/2) ==0: return n return calc(int(n/2))calc(10)输出:10521递归特性:
1. 必须是可结束的
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

浙公网安备 33010602011771号