zoukankan      html  css  js  c++  java
  • python 基础 day3

    一、set 集合

         特点:无序、不重复、可嵌套。

    1、创建集合的三种方式:

    s = set()
    
    s1 = set{11,22,}
    
    s2 = set([11,22,33])

    2、操作集合

    注意: 创建空集必须用 set(),如用{}是创建字典。
    
    s = set("qweiwt") #把str中的字符拆解开,形成set.特别注意观察有两个w,但集合是不能重复的
    print(s)
    {'t', 'i', 'e', 'q', 'w'}
    
    s.add("f")   #添加set元素,重复的不添加
    print(s)
    {'t', 'i', 'f', 'e', 'q', 'w'}
    
    s.remove("q")   #如果删除的元素没有就报错
    print(s)
    {'t', 'i', 'e', 'w'}
    
    s.discard("a")   #如果是set中的元素,就删除,如果不是,就什么也不做,常用这个。
    print(s)
    {'e', 'w', 't', 'i'}
    
    s.clear()  #清除所有元素
    print(s)
    set()
    
    ret = s.pop() # 随机移除
    print(ret)
    t
    
    a ={11,12,33,}
    b = s.copy()   #浅拷贝
    print(b)
    {33, 11, 22}
    
    
    s1 = {11,22,33,}
    s2 = {22,33,44,}
    
    
    #提取A中存在B不存在的集合
    s3 = s1.difference(s2)  #s1中存在s2中不存在
    print(s3)
    {11}
    
    #A和B中都不存在的集合
    s3 = s1.symmetric_difference(s2)
    print(s3)
    {11, 44}
    
    #s1中存在s2中不存在的元素覆盖到s1里
    s1.difference_update(s2) 
    print(s1)
    {11}
    
    #取交集
    s3 = s1.intersection(s2)
    print(s3)
    {33, 22}
    
    #取并集
    s3 = s1.union(s2)
    print(s3)
    {33, 22, 11, 44}
    
    #返回到集合中增加了s2中的元素的s1集合
    s1 = {11,22,33,}
    s2 = {22,33,44,}
    s1.update(s2)
    #s1
    {33, 22, 11, 44}
    
    #可以接受被for循环的对象 可迭代的对象
    s1 = {11,22,33,}
    list = [55,66,]
    s1.update(list)
    print(s1)
    {33, 66, 11, 22, 55}
    set
    #集合支持一系列标准操作,包括并集、交集、差集和对称差集,例如:  
      
    a = t | s          # t 和 s的并集  
      
    b = t & s          # t 和 s的交集  
      
    c = t – s          # 求差集(项在t中,但不在s中)  
      
    d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中) 
    
    
    len(s)  
    set 的长度  
      
    x in s  
    测试 x 是否是 s 的成员  
      
    x not in s  
    测试 x 是否不是 s 的成员  
      
    s.issubset(t)  
    s <= t  
    测试是否 s 中的每一个元素都在 t 中  
      
    s.issuperset(t)  
    s >= t  
    测试是否 t 中的每一个元素都在 s 中  
      
    s.union(t)  
    s | t  
    返回一个新的 set 包含 s 和 t 中的每一个元素  
      
    s.intersection(t)  
    s & t  
    返回一个新的 set 包含 s 和 t 中的公共元素  
      
    s.difference(t)  
    s - t  
    返回一个新的 set 包含 s 中有但是 t 中没有的元素  
      
    s.symmetric_difference(t)  
    s ^ t  
    返回一个新的 set 包含 s 和 t 中不重复的元素  
    集合支持一系列标准操作
    s3 = [11,22,33,22,]
    b = set(s3)
    print(b)
    print (type(b))
    for i in b:
        c.append(i)
    print(c,type(c))
    
    #打印结果
    {33, 11, 22}
    <class 'set'>
    [33, 11, 22] <class 'list'>
    将set转换成列表

    二、函数

    作用:封装功能

    定义函数:

    def f1(): # f1是函数名字
    pass

    1、def关键字,创建函数
    2、函数名 (根据函数名找函数)
    3、()
    4、函数体
    5、返回值

    注意:函数里有return 赋值给函数 接收值,在函数中,一旦执行return,函数执行过程立即终止。


    参数:

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

    def sendmail(name):    #name 是形参
    
    ret = sendmail("QL")   #QL 是实际参数

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

    def funcC(a, b=0):   # 默认参数必须放到参数列表的最后
         print a
         print b
    #在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0

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

    def sendmail(name,content)
        print(name,content)
    
    sendmail(content="OK",name="alex")

    4、动态参数 

    * 默认将传入的参数,全部放置在元组中,f1(*[11,22,33,])

    def f1(*args):
        print(args,type(args))  #args是元组
    
    f1(1, 2, 3)
    #结果
    (1, 2, 3) <class 'tuple'>
    
    li = [11,22,33,]
    
    f1(li)   #整个列表将作为元组里的一个元素
    #结果
    ([11, 22, 33],) <class 'tuple'>
    
    f1(*li)  #如果带*,列表里的元素将变成元组的元素
    #结果
    (11, 22, 33) <class 'tuple'>


    ** 默认将传入的参数,全部放置在字典中 f1(**{"k1":v1,})

    def f1(**args):  #传字典
        print(args,type(args))
    f1(n1="alex",n2=18)
    #结果
    {'n1': 'alex', 'n2': 18} <class 'dict'>
    
    #**适用于format格式
    s1 ="i am {0},age {1}".format("alex",18)
    s = "i am {0},age {1}".format(*["alex",18])
    s2 = "i am {name},age {age}".format(name="alex",age="18")
    
    dic = {"name":alex,"age":18}
    s = "i am {name},age {age}".format(**dic)   #**就可带入

    5、万能参数 (*args,**kwargs)

    def f1(*args,**kwargs): #一个*在前面,两个**在后面,顺序不能颠倒
        print(args)
        pirnt(kwargs)

    补充:

    #f1 先把a1+a1存到内存中,往下走,再把a1*a2存到内存中,a1+a2被覆盖,8,8赋值,f1会执行a1*a2
    def f1(a1,a2):
        return a1 + a2         
    
    def f1(a1,a2):
        return a1*a2
    ret = f1(8,8)
    print(ret)
    
    #结果
    64
    ######################
    def f1(a1):
        a1.append(999)
        
    li = [11,22,33]
    f1(li)                #传递参数传递的是引用的li ,不是复制的
    print(li)
    [11,22,33,999]
    ######################
    def f1():
        print(123)
        return "111"
        print(456)    #456将不会执行,在函数中一旦执行return,函数执行过程立即终止
    
    ######################
    #全局变量,在所有的作用域里都可读 全局变量都要大写
    #对全局变量进行重新赋值,需要global 必须放在函数里的最前面
    #特殊:列表字典可修改,不可重新赋值
    NAME = "alex"
    
    def f1():
        global NAME #表示,name是全局变量
        NAME ="123"  ##只能在自己的作用域调用 不能用在其他函数,优先用自己的变量
        print(name)#没有定义global打印出来的是123,对其他函数还是全局变量定义的
        NAME.append(999)#对于列表字典可以添加值,但是不能赋值
    def f2():
        pring(name) #可以调用全局变量,也可以调用自己的局部变量
    函数补充

    三、三元运算(三目运算)

    ###三元运算,三目运算 (写简单的if else)
        
    if 1 == 1:
        name = "QL"
    else:
        name = "peter"    
    name = "QL" if 1 == 1 else "peter" #三元运算 

    四、lambda函数

    ###lambda表达式
    
    def f1(a1,a2):
        return a1 +a2+ 100
    #只能写一行
    f2 = lambda a1,a2=10:a1 +a2+100 # 第一个a1是上面的参数,return隐藏了
    
    ret = f1(10)
    print(ret)
    
    r2 = f2(9)

    五、内置函数

    abs() 绝对值
    n = abs(-1)
    
    all()#所有为真才为真
    n = all([1,2,3,4])
    print(n) # True  
    n = all((0,1,2,))  
    print(n) #False
    
    any()#只要有真就为真
    n1 = any([0,None,[],2,])
    print(bool(0)) #False 的值 0,none," ",[],(),{}
    
    ascii() #自动执行对象的_repr_ 方法
    
    
    bin() #十进制转二进制
    print(bin(5))
    0b
    
    oct()  #s十进制转八进制
    print(oct(9))
    0o
    
    hex() #十进制转十六进制
    print(hex(0)
    0x
    
    
    #utf-8 一个汉字: 三个字节
    #gbk 一个汉字: 二个字节
    
    #字符串转换字节类型 bytes(要转换的字符串,按照什么编码)
    s = "李杰"
    n = bytes(s,encoding="utf-8")
    print(n)
    b'\xe6\x9d\x8e\xe6\x9d\xb0'
    
    n = bytes(s,encoding="gbk")
    print(n)
    b'\xc0\xee\xbd\xdc'
    内置常用函数

    六、文件操作

    #打开文件
     f = open("db","a") #追加
     f = open("db",'r') #只读
     f = open("db",'w')  #只写(先清空原文件)
     f = open("bs",'x') #python3.x 有的功能,如果文件存在,报错,不存在,创建并写内容
    
    #假设 db.txt已经存在
    
    f = open("db",'r',encoding="utf-8")
    data = f.read()
    print(data, type(data))#字符串,硬盘底层已二进制保存,Python自动转换成字符串
    QL|123 <class 'str'>
    
     f = open("db",'rb') #直接读二进制 读字节
     
    #操作文件
    f.seek(1)# 指针 在第一个字符后覆盖 按字节的方式找位置 如果是中文,一个汉字的一个字节,会出现乱码
    f.write("888") 
    
    #r+    读写【可读可写】
    #w+   写读【可读可写】
    #x+    写读【可读可写】
    #a+    写读【可读可写】
    #一般用r+(可以指定位置) 不用a+(只在最后追加) w+ (先清空后写入)用的少
    ###b,表示以字节的方式操作
    rb  或 r+b
    wb 或 w+b
    xb  或 x+b
    ab  或  a+b
    
    f = open("db",'ab') #用字节写入
    f.write(bytes("hello",encoding='utf-8')) #如果直接写入不转utf8会报错
    #注:以b的方式打开,读到的内容是字节,写入时也需要提供字节类型。
    
    #read() #无参数,读全部;有参数有b 按字节 无b 按字符
    #tell() 获取当前指针位置()
    #seek()指针跳到指定位置()
    
    #write() 写数据,b,字节,无b字符
    #fileno() #文件的数字表达方式 文件描述符
    #flush()  #强刷
    #readble() #判断文件是否可读writeable 可写
    #readline #仅读取一行
    #truncate  截段
    #for循环文件对象 f = open()
    f.open()
    for line in f:
         print(line)
    
    ####关闭文件
    关闭文件
    
    1、f.close()
    2、with open("xx") as f:
     with open('db1') as f1,open("db2") as f2:
    
    #我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: .read()、.readline() 和 .readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。
    .readline() 和 .readlines() 非常相似。它们都在类似于以下的结构中使用:
    
    Python .readlines() 示例
    
    fh = open( 'c:\\autoexec.bat')         
    for line in fh.readlines():                     
    print   line.readline() 和 .readlines()之间的差异是后者一次读取整个文件,象 .read()一样。.readlines()自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for... in ... 结构进行处理。另一方面,.readline()每次只读取一行,通常比 .readlines()慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用.readline()。   
    写:
    writeline()是输出后换行,下次写会在下一行写。write()是输出后光标在行末不会换行,下次写会接着这行写
    file
  • 相关阅读:
    python多版本切换
    python之禅
    Python int与string之间的转化
    pycharm工具使用
    python学习路线图
    traceback.print_exc()的用法
    他人学习Python感悟
    【西北师大-19软工】第十三、十四次作业汇总暨期末总结
    【西北师大-19软工】第十二次作业成绩汇总
    第十七周助教工作总结——NWNU李泓毅
  • 原文地址:https://www.cnblogs.com/QL8533/p/5522835.html
Copyright © 2011-2022 走看看