zoukankan      html  css  js  c++  java
  • python之day3

    今天是 武sir 第一天给我们讲课,讲的非常精彩。

    进入正题:

    今天所学的知识点包括:

    1,set

      无序,不重复,可嵌套。

    2,函数

      定义函数,函数体不执行,只有调用函数时,函数体才执行。

    3,三目运算:

    4,内置函数简介:

    5,文件操作:

      包括打开文件,操作文件,关闭文件。

    #######################################

    好,我们详细说一下今天的收获。

    一,引入类:

      通过对字符串的讲解,我们引入了类的概念,将所有的字符串归纳起来,将他们的所有功能,写到字符串类里面,使用这些功能时,直接调用即可。

    对于其他的字典,列表,元组等都是大同小异的,他们都属于类,之后自建的类,我们都可以这么理解。

    二,集合(set): 

      首先我们创建一个列表,list((11,2,33,44)),,list__init__,内部会执行for循环(11,22,33,44)。

      set也是一样,s=set()#创建集合,li = [11,22,33,44],s1 =set(li),print(s1)

      1, 创建集合的方法:

        s1 = {11,22}

        s2 = set()

        s3 = set([11,22,33,44])

      

      2,集合的功能:

        1),差异性判断:

        s1 = {11,22,33}

        s2 = {22,33,44}

        s3 = s1.difference(s2)

        s1中有,s2中没有的。

        print(s3)

        {11}

        s3 = s1.symmetric_difference(s2)

        s1,s2中的差异,包括s1中有的s2没有的,以及s2中有的s1没有的

        print(s3)

        {11,44}

        如果是s1.difference_update(s2)就直接将结果{11}赋值给s1

            s1.symmetric_difference_update(s2) 同上

          总之出现update就将值直接付给使用这个功能的变量。

        2)删除:

        s1 = {11,22,33,}

        s1.discard(11) ----删除11,如果删除111,不存在的元素不会报错

        s1.remove(11) ----删除11,如果删除111,不存在的元素会报错

        s1.pop() ----随机删除元素。不经常使用

        建议使用discard 出现不存在的元素不会报错退出,remove会退出。与字符串中的find和index 索引功能类似

        3)并集和交集:

        s1 = {11,22,33}

        s2 = {22,33,44}

        s3 = s1.intersection(s2)

        #{33,22}

        这个是交集(intersection)。可以用于找到相同的元素,然后可以进行判断。

        s1 = {11,22,33}

        s2 = {22,33,44}

        s3 = s1.union(s2)

        #{33,22,11,44}

        这个是并集(union)。可以应用到2个集合的所有元素,进行去重

      小练习

        题目:

          固定资产管理

    这道题主要应用在cmdb 资产管理里面,可以通过集合的不重复性,可嵌套的特点。将老数据和新数据进行对比,帮我们确认哪些资产有过变动,有哪些变动。

     下面是相关代码:   

    old_dic ={'#1':8,
              '#2':4,
              '#4':2}
    new_dic = {'#1':4,
               '#2':4,
               '#3':2}
    
    old_set = set(old_dic.keys())
    new_set = set(new_dic.keys())
    
    del_list = list(old_set.difference(new_set))
    add_list = list(new_set.difference(old_set))
    updat_list = list(old_set.intersection(new_set))
    print(del_list,add_list,updat_list)
    
    for i in updat_list:
        if old_dic[i] != new_dic[i]:
            print(i,)
    test01

     

    三,函数详解:

      1,定义函数:

        

        上图:是函数的定义方法。尽量在函数命名的时候能够让人直观的知道这个函数的用途,方便实用。

      2,执行函数:

        练习:发邮件

        

    def mail():
        import smtplib
        from email.mime.text import MIMEText
        from email.utils import formataddr
    
    
        msg = MIMEText('邮件内容', 'plain', 'utf-8')
        msg['From'] = formataddr(["xxx",'xxx@126.com'])
        msg['To'] = formataddr(["xx",'xxx@qq.com'])
        msg['Subject'] = "主题"
    
        server = smtplib.SMTP("smtp.126.com", 25)
        server.login("xxx@126.com", "xxx")
        server.sendmail('xxxx@126.com', ['xxxx@qq.com',], msg.as_string())
        server.quit()
    
    mail()
    sendmail

        在没有参数的情况下,直接mail()就可以执行整个函数。

      

      3,参数:

        def send(xxoo,content,xx='d'):  #xxoo和content就是形式参数,xx是默认参数,必须放在最后
             print(xxoo,content,xx)
    #      return True
           · return xxoo        #返回值 出现返回值整个函数就终止。

        #res = send('a','b','c')
        #res = send('a','b')
        res = send(content='a',xxoo='b') #直接定义形式参数,可不按照顺序
        print(res)

       默认参数就是在函数调用时可以不输入,他已经有了默认的值。

        详解return:

        

      return出来的值,就是这个函数的执行结果,可以通过该结果进行判断,函数是否执行成功或者失败。

      res = send() 是函数的执行方法。

        

        详解形式参数:

        

      形式参数在调用时必须赋值。而且必须按照顺序一一对应。

      当然也可以进行具体指定,比如在调用时 send(content= "SB",xxoo = em, xx = "ok")这样顺序不一致也没事。  

        动态参数:
           *args   -----*形式参数会接收全部参数,以元祖形式出现(动态参数)
           **args  -----** 指定参数 变成字典 -**形式参数,字典
           万能参数:* **   *在前 ** 在后

      举例说明:

         

          1)*args      

        

    def f1(*args):
        print(args,type(args))
    
    li = [1,2,3,4,1,23,]
    #f1(li)
    f1(li)

    结果li会整个变成一个元组中的一个元素
    ([1, 2, 3, 4, 1, 23],) <class 'tuple'>

    def f1(*args):
    print(args,type(args))

    li = [1,2,3,4,1,23,]
    #f1(li)
    f1(*li)
    这样就会list就会变成元组,不再是列表。而之前列表中的元素,会变成元组中的元素。
    (1, 2, 3, 4, 1, 23) <class 'tuple'>

        2)**kwargs

        

    
    
    def f1(**kwargs):
    print(kwargs,type(kwargs))

    li = {'k1':'v1','k2':'v2'}
    f1(k1='v1')
    这样会对应出一个字典
    {'k1': 'v1'} <class 'dict'>

    def
    f1(**kwargs): print(kwargs,type(kwargs)) li = {'k1':'v1','k2':'v2'} #f1(k1='v1') f1(**li)

    {'k1': 'v1', 'k2': 'v2'} <class 'dict'>

          3)万能函数:

        

        

    def f1(*args,**kwargs):
        print(args)
        print(kwargs)
    
    f1(1,2,3,4,k1='v1')
    1,2,3,4会变成元组中的元素。
    k1='v1'会变成字典
    (1, 2, 3, 4)
    {'k1': 'v1'}

    并且是打印两行

      4,补充:

        字符串format:

        

      {0} {1}按照顺序进行赋值。

        函数创建:
           函数参数传递是引用进行传递。 

          

      f1先引用内存里的a1+a2

      之后有引用了a1*a2

      所以在调用函数的时候 返回的结果就是 a1*a2

      

          

      首先先将a1加了999,函数调用了l1 这个列表,l1就加了999

      结果就是 :[11, 22, 33, 44, 999]

          
           全局变量(作用域)----所有的地方都能读 但是会优先用自己变量
                         ----列表字典可修改,不可以重新赋值

          

        5, 三目运算:
          if 1==1:
            name = 'alex'
          else:
             name = 'sb


           name = 'alex' if 1==1 else 'sb'  #三目运算表达式。

        6,lambda:

          

    def f1(a1):
        return a1 + 100
    
    f2 = lambda a2,a1=10:a2+120+a1
    res1 = f1(1)
    res2 = f2(20)
    print(res1)
    print(res2)

    在lambda中,a1,a2就是参数 a1是默认参数,:后面是返回值就是150

        7,内置函数简介:

          abs()绝对值  
          all()
          any()

          n = all([1,2,3,4,45,5,0])
          print (n)


          bin() 10 -2
          oct() 10 -8
          hex() 10 -16
          进制的 转换

          代码测试:

          

    n = abs(-10)
    print(n)
    
    n1 = all([10,1,2,3,4,5,0])
    print(n1)
    
    n2 = any([1,2,3,0,[]])
    print(n2)
    
    print(bin(10))
    print(oct(10))
    print(hex(10))

          字符问题:

        

        代码如下:

        

    s = '李杰'
    n = bytes(s,encoding='utf-8')
    print(n)

    将汉字转化为直接格式
    b'xe6x9dx8exe6x9dxb0' f
    =open('db','ab') f.write(bytes('立即',encoding='utf-8')) f.close()

    用字节格式打开,要用字节进行写入。 f
    = open('db','rb') n=f.read() print(n,type(n))

    四,文件处理:

        

       1,打开文件,
          r 读
          w 写 先清空
          x 文件存在就报错,不存在,创建并写内容=w
          a 追加  --- 永远会写在最后

          常用的r+可以按照指针进行修改
          a+永远会写在最后
          w+会清空后再写

          如果模式无B按照字符读取。
          seek按照字节找位置(永远是字节)
          tell 获取当前的指针位置以字节的位置调整

          

       2,操作文件:
          read() 无参数,读全部
            有参数 b 按照字节
              无b按照字符
            flush()强刷
          readline 仅仅读取一行
          truncate 截断,指针后面的 清空。
          for循环文件对象,
            for line in

        3,关闭文件:

          close()

          with open('db') as f:

            pass

        **python3最新推出同时开两个文件:

        

        可以用于相互的拷贝,已经备份更新等。
        
        
    以上是这节课所学到的知识。

    #########################黄金分割线#############################

    以下是我的一些感想:

      set(集合):是无序的,不可以重复的,可以嵌套。他和列表很相似,但是也有一些不同,比如他不允许重复。

            他在差异性判断中很有用处,可以通过集合来确认出两组数据有什么不同,有什么相同。在比较数据前后变化是很有用处。

      函数:函数非常重要,我认为函数就是程序中的功能,也可以说程序就是通过一个个函数来完成他的工作。每一个函数就是这个程序的一个功能,而且函数           可以增强整个程序的灵活性,需要那种功能就通过函数来完成在添加到想用的位置即可。

        至于形式参数,默认参数,动态参数,还有内置函数等,主要看个人的习惯,那种用的熟,哪种更方便,就用哪种,当然要明确程序的可用性,减少         bug

      关于类的概念:

        我感觉所有的对象都属于类,每个类中都有相应的功能,类中的对象可以通过这些功能来完成复杂的程序。

      文件处理:

        单个文件的处理还好理解一下,但是一定要注意for循环的这个区间,以及缩进问题,还有continue break的应用。

        我认为多个文件的操作是一个难点,尤其是读一个文件再写到另一个文件,其中的逻辑性非常强,很容易迷糊,需要多加练习。

        谢谢

        

        

         

        

        

        

      

      

      

  • 相关阅读:
    pandas Dataframe filter
    process xlsx with pandas
    data manipulate in excel with easyExcel class
    modify registry in user environment
    add number line in vim
    java import webservice
    ctypes MessageBoxA
    music 163 lyrics
    【python实例】自动贩卖机
    【python基础】sys模块(库)方法汇总
  • 原文地址:https://www.cnblogs.com/aaron-shen/p/5518607.html
Copyright © 2011-2022 走看看