zoukankan      html  css  js  c++  java
  • python基础知识(四)

    摘要:主要涉及lambda表达式、python内置函数(open文件重点)、冒泡排序

    一、lambda表达式

      适用于创建简单函数,也叫匿名函数, 函数名 = lambda 参数 : 返回值
      function = lambda a1,a2 : a1+a2

    二、python内置函数

      abs() 绝对值 print(abs(-12))
         all(iterable) 所有元素为真才为真
         any() 有某个元素为真则为真
         bool()  0,空值,None,空列表 空元组,空字典,空set集合【set()】,空字符串【连空格都没有的】  为假
         bin() 将十进制转换为二进制 0b表示二进制
         oct() 将十进制转化为八进制 0o表示八进制
         int() 单个参数,直接放入数字,就是十进制转换十进制,如果是其他进制转换为十进制,并要求是字符串形式数字,

        int('0b011100',base=2)
           ‘0o + 数字’,表示八进制     base = 2
           ‘0b + 数字’,表示二进制   base = 8
           ‘0x + 数字’,表示十六进制   base = 16
         hex() 将十进制转换为十六进制 0x表示十六进制
         ascii() 不常用,
         bytes() 主要记住字节与字符之间的转换 bytes('字符',encoding='utf-8')
         bytearray() 类似于字节列表
         chr() 将十进制数字转换成ascii对应的字母或数字等 print(chr(65)) --> A
         ord('A') 将字母或数字等转换成对应的ascii十进制数字 print(ord('A'))  --> 65

      isinstance(object,type)  ---> isinstance(args,tuple) ---> True or False 可以用来判断参数的类型是什么

    #插播练习
    #实现随机验证码
    
    import random
    
    temp = ' '
    
    for i in range(6):
        num = random.randrange(0,4)
        if num == 1 or num == 3:
            j = random.randrange(0,10)
        temp = temp + str(j)
        else:
        h = random.randrange(65,91)
        rad = chr(h)
        temp = temp + rad
    print(temp)

      callable() 判断是否可执行的, 记住:凡是变量名字后面加() 就是可执行的,返回True,没什么用处的
         compile() 编译代码,
         exec()  只用来执行代码,无返回值 exec('for i in range(4):print i')
         eval()  编译字符串形式的表达式,有返回值 , 例如 a = '1+3'  b = eval(a)  print(b) --> 4
           例如 : ret = eval('a + 99',{'a':100}) ----> print(ret)
         dir()  li = [] ,print(dir(li))
         divmod()  print(divmod(10,3)) --> (3, 1)  (商,余数) 以后可以用在分页方面

      filter(函数,可迭代对象)  筛选,将可迭代对象的元素倒入函数,将返回值为True的元素筛选出来

     1 def f1(x):
     2     if x > 22:
     3         return True
     4     else:
     5         return False
     6 ret = filter(f1,[11,22,33,44])
     7 for i in ret:
     8     print(i)    ----> 33
     9                            44
    10 
    11 #或者结合lambda表达式  
    12 ret = filter(lambda x : x > 22,[11,22,33,44])
    13 for i in ret:
    14     print(i)
    15             
    View Code

      map(函数,可迭代对象) 将可迭代元素倒入函数,将函数返回值重新赋值给元素

     1 ret = map(lambda x : x + 100,[1,2,3,4,5])
     2 print(ret)
     3 for i in ret:
     4     print(i) ----> 101
     5                 102
     6                 103
     7                 104
     8                 105
     9                         
    10 ret  = map(lambda x : x + 100 if x % 2 == 1 else x,[1,2,3,4,5])    
    11 print(ret)
    12 for i in ret:
    13     print(i)    
    14 
    15 
    16     -----> <map object at 0x00000067784C9748>
    17           101
    18           2
    19           103
    20           4
    21           105    
    View Code

      locals()  代码按顺序执行到现在的所有局部变量
          globals() 代码按顺序执行到现在的所有全局变量
          hash() 转变成哈希值,节省空间,可用来给字典的key做优化

      iter() 将括号内容生成为可迭代对象
          next(可迭代对象)  print(next(可迭代对象)) ---> 返回对象的第一个元素,一直next() 可将迭代元素取完,超出会报错
          max() 最大
          min() 最小
          sum() 求和
          pow() 求幂 pow(2,10) 求2的10次方
          round() 四舍五入 print(round(3.3)) ---> 3
          sorted() 数字与字符串不可比较排序,内置函数排序需要是同一种类型

             字符串的排序 : 先是字符串里的数字,再字母,再中文

     1 li = ['1','23','abc','12','222','李强','崔亮','','','sb','A','a','B']
     2 q = sorted(li)
     3 print(q)
     4 for j in q:
     5     f = bytes(j,encoding='utf-8')
     6     print(f)
     7 
     8 ['1', '12', '222', '23', 'A', 'B', 'a', 'abc', 'sb', '崔亮', '', '李强', '']
     9 b'1'
    10 b'12'
    11 b'222'
    12 b'23'
    13 b'A'
    14 b'B'
    15 b'a'
    16 b'abc'
    17 b'sb'
    18 b'xe5xb4x94xe4xbaxae'
    19 b'xe5xbcxa0'
    20 b'xe6x9dx8exe5xbcxba'
    21 b'xe7x8ex8b'
    View Code

      zip(self, iter1, iter2=None, *some)        

        l1 = [11,22,33,44]     l2 = [55,66,77,88]     

        ret = zip(l1,l2)     

        for i in ret:        

          print(i)   ---->   (11, 55)
                       (22, 66)
                       (33, 77)
                       (44, 88)

      open(文件名,打开方式)
             普通打开方式:计算机硬盘存储的为0101二进制模式,当通过python打开文件时,默认将二进制转换成字符串显示  ==》字符串类型
              'r' 只可读,为默认的打开方式
              'w' 只可写,不可读,文件不存在则创建,存在则清空文件内容
              'x' 只可写,不可读,文件不存在则创建,存在则报错
              'a' 追加模式,不可读,不存在则创建,存在则只追加内容

         例如:# f = open('test2.py','r')      

            # data = f.read()      

            # print(data)      

            # f.close()

               # f = open('test3.txt','w')      

            # f.write('what are you doing?')      

            # f.close()

               # f = open('test3.txt','a')      

            # f.write('what are you doing?')      

            # f.close()

       以二进制方式打开:  ==》字节类型      

        'rb' 只可读,以二进制的方式读取        

          例如: f = open('text.txt','rb')          

             data = f.read()          

             print(data)          

             str_data = str(data,encoding = 'utf-8')          

             f.close()          

             print(str_data)      

         'wb' 只可写,需要以二进制方式写入        

          例如: f = open('text.txt','wb')          

             str_name = '中国人'          

             bytes_name = bytes(str_name,encoding = 'utf-8')          

             f.write(bytes_name)          

             f.close()

                  'xb' 只可写,需要以二进制方式写入     

           'ab' 只可写,末尾追加,需要以二进制方式写入

      '+' 表示可以同时读写摸个文件
           r+ 可读写,打开时指针在最开始,【最常用】

          读完之后(也可以只读几个字符,f.read(1) ) ,再写的话,先要调整指针到想要的位置,不调整的话,会在结尾开始写了
              f.tell() 判断指针所在位置,以字节来显示
              f.read(1) 读取一个字符,中文为1个汉字,英文为1个字母
              f.seek(num) 调整指针

         w+ 可写读,先清空,再写(写了指针就到最后),之后再可读
              f = open('test2.py','w+')
              f.write('what are u doing? my love')
              f.seek(0)
              data = f.read()
              f.close()
              print(data)
           x+ 可写读,先清空,再写(写了指针就到最后),之后再可读 【文件存在就会报错】
           a+ 可追加读取,打开的同时将指针调整到最后,再读的话都不到内容的,因为指针在最后,后面没内容了,就算是调整指针,写的话也是在最后开始写

      文件操作方法      

        f.flush() 把内存中的write内容刷到硬盘里       

          当使用f.write()时,只有全部结束时,才会写入硬盘      

        f.read() 可加参数,是按照字符来读取的      

        f.readline() 默认值只读取第一行      

        f.readlines()  --->生成列表  [‘第一行’,‘第二行’ ...]      

        f.write()      

        f.tell() 定位指针时,指针是按照字节计算的      

        f.seek(num) 修改指针位置,以字节来表示的      

        f.truncate() 指针在哪,截取到哪,指针之前都保留      

        f.close() 关闭文件

        with open('test2.py','r') as f :   等同于 f = open('test2.py','r')      with 会帮助自动关闭文件

          python2.7之后支持with 同时打开2文件

             with open('log1','r') as f1 ,open('log2','w') as f2:       

            for line in f1:        

            f2.write(line)      

    三、冒泡排序
       一个for循环就会将序列编排一次,将最大值放到列表最后

    li = [22,11,2,32,9,443,4,53,7554,4321,5652,2,435,67]
    for j in range(1,len(li)):
        for i in range(len(li) - j):
        # current_value = li[i]
        # next_value = li[i + 1]
        # if current_value > next_value:
        #     temp = current_value
        #     current_value = next_value
        #     next_value = temp
        if li[i] > li[i + 1]:
            temp = li[i]
            li[i] = li[i + 1]
            li[i + 1] = temp
            print(li)  
    
     -------> [2, 2, 4, 9, 11, 22, 32, 53, 67, 435, 443, 4321, 5652, 7554]
  • 相关阅读:
    「从零单排canal 03」 canal源码分析大纲
    「从零单排canal 02」canal集群版 + admin控制台 最新搭建姿势(基于1.1.4版本)
    「从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)
    实时数据订阅与分发系统概述
    使用phoenix踩的坑与设计思考
    「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践
    「从零单排HBase 11」HBase二级索引解决方案
    「从零单排HBase 10」HBase集群多租户实践
    「从零单排HBase 09」HBase的那些数据结构和算法
    Netty源码分析之自定义编解码器
  • 原文地址:https://www.cnblogs.com/ethancui/p/5560190.html
Copyright © 2011-2022 走看看