Day03 集合,函数,字符串格式化输出,三目运算,lambda表达式,文件操作

第一节,集合

   除了之前学过的数据类型,int,str,bool,list,dict,tuple,还有一个基本数据类型-集合,集合是一组无序,不重复的序列。由于这个特性,所以集合的元素也可以作为字典的键。

1.集合的创建

cast = set() #创建空集合

>>> cast = set ('name')
>>> cast
{'a', 'm', 'n', 'e'}
>>> cast = set (['name','age'])
>>> cast
{'age', 'name'}
>>> cast = set (('name','age'))
>>> cast
{'age', 'name'}
>>> cast = set ({'name':'alex','age':18}) 
>>> cast
{'age', 'name'}

 

2.集合的操作

a.add()  #一次只能添加一个元素

>>> cast = set(['name'])
>>> cast
{'name'}
>>> cast.add('age')
>>> cast
{'age', 'name'}

a.update()  #一次能添加多个元素

>>> cast = set(['name','age'])
>>> cast.update(['sex','work'])
>>> cast
{'age', 'name', 'sex', 'work'}

a.clear()  #清空集合a

>>> cast
{'age', 'name', 'sex', 'work'}
>>> cast.clear()
>>> cast
set()

a.copy()  #拷贝集合a

>>> cast
{'age', 'name'}
>>> info = cast.copy()
>>> info
{'age', 'name'}

a.difference(b) #比较两个集合,生成一个新的a存在b不存在的集合

>>> cast = set([11,22,33])
>>> cast
{33, 11, 22}
>>> info = set([22,33,44])
>>> info
{33, 44, 22}
>>> print(cast.difference(info))
{11}
>>> print(info.difference(cast))
{44}

a.difference_update(b)  #将difference()生成的结果赋值回a

>>> cast
{33, 11, 22}
>>> info
{33, 44, 22}
>>> cast.difference_update(info)
>>> cast
{11}

a.discard(b)  #移除指定元素b,如果b不存在,不报错

>>> cast = set([11,22,33])
>>> cast.discard(33)     
>>> cast
{11, 22}

a.intersection(b)  #取ab交集

>>> cast
{33, 11, 22}
>>> info
{33, 44, 22}
>>> cast.intersection(info)
{33, 22}

a.intersection_update(b)  #取ab交集并将结果更新回a

>>> cast
{33, 11, 22}
>>> info
{33, 44, 22}
>>> cast.intersection(info)
{33, 22}
>>> cast.intersection_update(info)
>>> cast
{33, 22}

a.isdisjoint(b)  #ab没有交集,返回True,否则返回False

>>> cast = set([11,22,33])
>>> info = set([22,33,44])
>>> cast.isdisjoint(info)
False
>>> cast = set([11,22,33])
>>> info = set([44,55,66])
>>> cast.isdisjoint(info)
True

a.issubset(b)  #a是否是b的子集

>>> cast = set([11,22,33])
>>> info = set([22,33])  
>>> cast.issubset(info)
False
>>> info.issubset(cast)
True

a.issuperset(b)  #a是否是b的父集

>>> cast = set([11,22,33])
>>> info = set([22,33])  
>>> cast.issuperset(info)
True
>>> info.issuperset(cast)
False

a.pop()  #随机移除一个元素

>>> cast = set([11,22,33])
>>> cast.pop()           
33
>>> cast.pop()
11

a.remove(b)  #移除指定元素b,如果不存在,报错

>>> cast = set([11,22,33,])
>>> cast.remove(33)
>>> cast
{11, 22}
>>> cast.remove(44)       
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 44

a.symmetric_difference(b)  #对称差集

>>> cast = set([11,22,33])    
>>> info = set([22,33,44])    
>>> a = cast.intersection(info)
>>> b = cast.union(info)
>>> a
{33, 22}
>>> b
{33, 22, 11, 44}
>>> cast.symmetric_difference(info)
{11, 44}

a.symmetric_difference_update(b)  #将a.symmetric_difference(b)的结果更新回a

>>> cast.symmetric_difference(info)
{11, 44}
>>> cast
{33, 11, 22}
>>> cast.symmetric_difference_update(info)
>>> cast
{11, 44}

a.union(b)  #取ab并集

>>> cast = set([11,22,33]) 
>>> info = set([22,33,44])
>>> cast.union(info)
{33, 22, 11, 44}

 

 

第二节 函数

       函数是组织好,可重复利用的的代码段。它能提高应用的模块性,代码的重复利用率,用户可以自定义函数来实现某些功能,这被叫做用户自定义函数。

定义函数:

函数代码块以def关键词开头,后接函数标识符名称和小括号()

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

函数的第一行语句可以使用””” 选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。一旦return,函数就不再往下执行,不带表达式的return相当于返回 None。

函数参数:

1.普通参数(严格按照顺序,将实际参数赋值给形式参数)

如下:(顺便掌握字符串格式化输出)

def print_out(name_info,age_info):
print('name: {0} | age: {1}'.format(name_info,age_info))

print('result'.center(25,'-'))
print_out('alex','18')

----------result---------
name: alex | age: 18

2.默认参数(必须放置在参数列表的最后)

如下:(顺便掌握字符串格式化输出)

def print_out(name_info,age_info=18):
print('name: {name} | age: {name}'.format(name=name_info, age=age_info))
print_out('alex')

----------result---------
name: alex | age: alex

3.指定参数(将实际参数赋值给指定的形式参数)

def print_out(name_info,age_info):
print('name: {name} | age: {age}'.format(age=age_info,name=name_info))

print('result'.center(25,'-'))
print_out(age_info=18,name_info='alex')

----------result---------
name: alex | age: 18

4.动态参数:

         *     默认将传入的参数,全部放置在元组中

         **   默认将传入的参数,全部放置在字典中

def print_out(*args):
print('name: {0} | age: {1}'.format(args[0], args[1]))

print('result'.center(25,'-'))
print_out(*['alex',18,])

----------result---------
name: alex | age: 18

def print_out(**kwargs):
print('name: {name} | age: {age}'.format(age=kwargs['age'], name=kwargs['name']))

print('result'.center(25,'-'))
print_out(**{'name':'alex','age':18,})

----------result---------
name: alex | age: 18

5.万能参数 *args,**kwargs

def print_out(*args,**kwargs):
print('name: {name} | age: {age}'.format(age=kwargs['age'], name=args[0]))

print('result'.center(25,'-'))
print_out(*['alex'],**{'age':18,})

----------result---------
name: alex | age: 18

 

 

第三节 三目运算 lambda表达式

三目运算

image

lambda表达式

image



第四节 文件操作

操作文件前线简单了解下字符编码以中文为例,utf-8:一个汉字,三个字节 gbk: 一个汉字,两个字节一个字节有8位二进制,因此一个汉字在utf-8编码下有24位,在gbk编码下有16位,因此读写的编码必须一样,否则会出现乱码情况。


字符串转换字节类型bytes()

image

字节转换成字符串str()

image

1.打开文件操作模式有r,w,a,x,b,r+,w+,a+,从文件顶部读取内容 从文件底部添加内容 不存在则创建带了b,就是字节模式操作,不带b,就是字符模式操作。r 只读w 只写(会清空文件)a 追加x 文件若存在,报错,不存在,创建并只写r+,w+,a+,rb+,rw+,ab+ 都是读写模式r+ 不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容w+ 文件存在,则覆盖整个文件,不存在则创建a+ 从文件顶部读取内容 从文件底部添加内容 不存在则创建常用的一些方法open() 打开文件tell() 获取当前指针的位置(字节)seek() 指针跳转到指定位置(字节)write() 写数据close() 关闭文件flush() 强刷文件readline() 一次仅读一行truncate() 截断,指针为后的清空


下面来看几个实际应用例子:eg1:f = open('user.info','r+')
print(f.read())
print(f.tell())
f.seek(6)
print(f.read())
print(f.tell())
f.close()


----------result---------

admin    123
jiang    abc
he    xyz
chen    000

40
123
jiang    abc
he    xyz
chen    000

40

 

eg2:

admin

f = open("db", 'a',encoding="utf-8")
f.write("xyz")

input('abc')
执行后查看文件db,文件内容仍然只有admin改写f = open("db", 'a',encoding="utf-8")
f.write("xyz")
f.flush()
input('abc')
执行后查看,文件内容已经添加上xyz这是因为一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。正常情况下缓冲区满时,操作系统会自动将缓冲数据写入到文件中。至于close方法,原理是内部先调用flush方法来刷新缓冲区,再执行关闭操作,这样即使缓冲区数据未满也能保证数据的完整性。如果进程意外退出或正常退出时而未执行文件的close方法,缓冲区中的内容将会丢失。


最后补充,open()文件操作后,都需要close()方法来关闭打开过的文件,另一种with open()的方式则可以在文件操作完毕后自动关闭文件.

posted @ 2016-05-23 18:02  摸个鱼儿  阅读(503)  评论(0编辑  收藏  举报