欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习日记——day03

程序员文章站 2022-05-03 08:07:12
...

昨儿给大家讲了一些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集合遍历