Python学习日记——day03
昨儿给大家讲了一些Python的数据类型(tuple,map,list),这三种数据类型把键盘上的三种括号全都用了,我以为Python没法出新的数据类型了,没想到机智的Python还是狠狠得给了我一耳巴子,补充一下昨儿漏洞吧,Python除了List, Tuple, Map以外其实还有一个数据类型,那就是Set。至于它的声明方法呢。。。。。。。呵呵跟Map一样都是用{ }框起来,但是呀,万万没想到的是Python只是把Map中的:换成了, 就多了一种声明数据类型的方式。好吧,那么就具体说一下Set的用法吧。
set是Python的一个数据类型,使用{}声明,当然如果使用set()方法,也可以将List数据类型转换为set数据类型,而set这个数据类型的最大特点就是set里面不会出现重复的数据,就算在声明是有重复的数据,set集合里面也只会给你保留一个,多得都帮你给丢了。
#set的声明方法
mySet1 = {1,4,5,6,2,1,5,8}
myList = [1,4,5,6,2,1,5,8]
mySet2 = set(myList)
print(mySet1)
print(mySet2)
'''
输出结果:
{1, 2, 4, 5, 6, 8}
{1, 2, 4, 5, 6, 8}
'''
set数据类型是以一个很有趣的东西,就如它的名字一样——集合。。。噢噢噢噢,听起来好像我们数学学的那些东西啊。set数据类型提供了很多的数学中运算的方法,比如说两集合取交集,取并集,取差集等等等等。
set1 = {1,2,3,4}
set2 = {3,4,5,6}
print(set1.intersection(set2))#取交集
print(set1.union(set2)) #取并集
print(set1.difference(set2)) #取差集
print(set1.issubset(set2)) #判断set2是否是set1的子集
print(set1.issuperset(set2)) #判断set2是否是set1的父集
print(set1.symmetric_difference(set2)) #取对称差集
print(set1.isdisjoint(set2)) #判断set1与set2是否相离
'''
输出结果
{3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2}
False
False
{1, 2, 5, 6}
False
'''
除了方法以外还提供了一些运算符,也能够简单地完成以上操作。
set1 = {1,2,3,4}
set2 = {3,4,5,6}
print(set1|set2) #取交集
print(set1^set2) #对称差集
print(set1-set2) #set1-set2
print(set1&set2) #取交集
增删操作:
set1 = {1,2,3,4}
#增加
set1.add("hello") #将这个字符串添加到set集合里面
set1.update(["nihao","shijie"])#将这两个字符串添加到set1集合里面
#删除
if "nihao" in set1: #不做判断的话,如果没有这个字符串会报错
set1.remove("nihao")
set1.pop() #删除第一个,出栈操作
set1.discard("nihao") #删除"nihao"即使没有这个字符串也不会报错
#当然还有一个copy操作,也是浅copy,就不介绍了
——————————————————————文件操作——————————————————————
Python的通过open函数打开文件,并操作之。
open()方法的模板为:int fd open(filename,model,encoding),其中encoding如果是操作二进制文件,则不需要声明,filename为文件的路径,可以是绝对路径或相对路径,model为操作文件的模式,下面为model的不同取值与解释:
模式 |
说明 |
---|---|
r | 以只读的方式打开文件,文件指针会放在文件头,如果没有文件会报错 |
w | 以只写的方式打开文件,如果文件存在,则清空文件,不存在则创建文件 |
a | 以追加模式打开文件,如果文件存在,则指针指向文件尾,如果文件不存在则创建文件 |
rb | 同r,但是操作的是二进制文件,因为是操作二进制文件,所以不需要指定编码 |
wb | 同w,操作的是二进制文件 |
ab | 同a,操作的是二进制文件 |
r+ | 以读写方式打开文件,文件指针指向文件头,文件不存在则报错 |
w+ | 以写读方式打开文件,文件不存在则创建,存在则清空 |
a+ | 以追加读写方式打开文件,文件不存在则创造,存在则把指针放到文件尾,所以想读文件得改变文件指针的位置 |
rb+ | 同r+,操作二进制文件,不需要写编码方式 |
wb+ | 同w+,操作二进制文件,不需要写编码方式 |
ab+ | 同a+,操作二进制文件,不需要写编码方式 |
Python中打开文件时通过open()方法,而关闭文件自然是close方法,但是Python为了防止编程人员忘记关闭文件,特地创建了一个关键字with,具体操作如下:
with open("file.txt","a+",encoding="utf-8") as fd1:
fd1.read("nihao ,shijie")
print("===================我是分割线===================")
fd2 = open("file.txt","a+",encoding="utf-8")
fd2.read("nihao ,shijie")
fd2.close()
以上操作效果相同,使用了with关键字,在with的作用域完成之后,Python会自动帮你调用close()方法。
下面来看看文件的具体操作吧:
读写定位等:
with open("file.txt", "a+", encoding="utf-8") as fd:
for i in range(10): #写入十句话
fd.write("The number "+str(i)+"\n")#write方法只能写字符串
fd.seek(0) #使用seek方法定位到文件头
for i in fd: ##Python简单的遍历工作
print(i)
print(fd.tell()) #获取文件当前指针的位置,如果指针指向文件尾的话,结果则为文件大小
fd.seek(0)
print(fd.seekable()) #是否可以改变指针
print(fd.readable()) #是否可读
print(fd.readline()) #读一行字符串
print(fd.readlines()) #把文件的内容全读到一个list里面
print(fd.writable()) #是否可写
print(fd.writelines(["xasxasx"]))#将一个list写到文件里面
'''
运行结果:由于写入是写了\n,print方法自带\n,所以会换行两次
The number 0
The number 1
The number 2
The number 3
The number 4
The number 5
The number 6
The number 7
The number 8
The number 9
140
True
True
The number 0
['The number 1\n', 'The number 2\n', 'The number 3\n', 'The number 4\n', 'The number 5\n', 'The number 6\n', 'The number 7\n', 'The number 8\n', 'The number 9\n']
True
None
'''
————————————————Python函数操作——————————————
Python的函数跟C/C++,Java的函数差别有点大咯,首先Python的函数不用声明返回值类型,其次Python的传参特别神奇。
Python通过*声明的形参跟**声明的形参跟C语言的相差简直不是一点半点,当我看到形参里面有*号时,卧槽,Python居然还有指针??RU kidding me? 不是说Python里面没有指针操作吗? 好吧,其实真没有,Python里面使用*号传参表示任意参数,使用**号传参表示传入一个字典进去。
def function(argv1 ,argxx=1):
print(argv1)
return "hello","world"
function(function(2)) //2
//hello
def test(*argxx):
print(argxx)
test(1,2,3,4) //(1, 2, 3, 4)
test(*["xa",3,1,"x23"]) //('xa', 3, 1, 'x23')
def test(**args):
print(args)
test(name="xsax") //{'name': 'xsax'}
test(**{"name":"xxxxx"}) //{'name': 'xxxxx'}
OK,函数就给大家讲完了? 明天再给大家说一下函数的别的操作,比如说装饰器,生成器,迭代器
上一篇: python day03
下一篇: Java集合遍历