zoukankan      html  css  js  c++  java
  • python05-09

    一、lambda表达式

    def f1():
        return 123
    f2 = lambda : 123
    
    def f3 = (a1,a2):
        return a1+a2
    f4 = lambda a1,a2 : a1+a2
    

     

    二、内置函数

    1、 abs()取绝对值

      all()所有,需要给我传一个可以迭代的东西,给我的所有的值都为真,返回True

      any()只要有一个为真就是真

      ascii(对象)去对象的类中,找__repr__方法获取其返回值

    ascii的执行过程:ascii对象找到类,找到def函数,使用__repr__方法,最后返回一个hello

    2、 bin()#二进制 r = bin(11)十进制转二进制

      oct()#八进制

      int()#十进制

      hex()#十六进制

    进制转换:

    i = int("0b11",base=2)#二进制转换十进制

    i = int("11",base=8)#八进制转换成十进制

    .......

    3、bool,判断真假,把一个对象转换成布尔值:

    4、 bytes         字节

      bytearray 字节列表(元素是字节)

     字节、字符串转换

     bytes("xxxx",encoding="utf-8")

    5、chr():c = chr(65)  print(c)>>>A;c = chr(66)   print(c)>>>B

       ord():i = ord("t")  print(i)>>>116

    #一个字节=8位,共256种可能

    随机验证码:

    #生成一个随机数,65-91
    #数字转换成字母,chr(数字)(数字是随机生成的,所有这个生成的字母也是随机的)
    #
    import random#导入随机数的模块
    
    temp = ""#temp等于一个空的字符串
    for i in range(6):
        num = random.randrange(0,10)#随机数0-9
        if num  == 3 or num ==6:#如果系统产生的随机数是3或者是6则执行if(产生数字),如果不是则执行else产生字母
            rad2 = random.randrange(0,10)#rad2是数字类型
            temp = temp + str(rad2)
    
        else:
            rad1 = random.randrange(65, 91)  # 生成65到90的随机的数字
            c1 = chr(rad1)  # 将rad1生成的随机数字转换成一个随机的字母
    
            temp = temp + c1
    print(temp)
    

    6、callable()#是否可以被执行

    7、divmod()#

    r = divmod(10, 3)
    print(r)
    >>>(3, 1)3余1
    

    8、enumerate参数为可遍历的变量,如字符串,列表等,返回值为enumerate类

      函数用于遍历序列中的元素以及他们的下标

    例1:

     for i,j in enumerate(('a','b','c')):
     print(i,j)
    

     结果

    0 a
    1 b
    2 c
    

     例2:

    for i,j in enumerate({'a':1,'b':2}):
    print(i,j)
    

     结果:

    0 a
    1 b
    

     注:字典在遍历的时候,循环的是keys,然后通过enumerate方法给每一个key加索引,

    9、eval():将字符串当成有效表达式来求值并返回计算结果

    ret = eval(" a + 60",{"a" : 99})
    print()
    >>>159
     exec("for i in range(10):print(i)")#执行py代码没有返回值
    >>>0
            1
            2   
            3    
            .
            .
            .
            9
    

     10、filter(函数,可以迭代的对象)(过滤)

    循环可以迭代的对象,获取每一个参数,并让其执行函数

    def f1(x):
        if x > 22:
            return Ture
        else:
            return False
    ret = filter(f1, [11,22,33,225])
    for i in ret:
        print(i)
    >>>33
       225

    def f1(x):
      return x > 22
    ret = filter(lambda x: x > 22, [11,22,33,225])
    for i in ret:
    print(i)
    >>>33
       225

     map(函数,可以迭代的对象)

    def f1(x):
        return x + 100
    ret = map(f1, [1,2,3,4,5])
    print(ret)#直接打印会报错,这里需要用for迭代输出
    for i in ret:
        print()
    >>>101
           102
           103
           104
           105  
    
    def f1(x):
       return x + 100   
    ret = map(lambda x: x + 100, [1,2,3,4,5])
    for i in ret:
        print()
    

     11、global()全局变量

        local()局部变量

    12、isinstance()判断某个对象是否是某个类创建的

    li = [11,22]
    r = isinstance(li, list)
    print(r)
    
    >>True
    

    13、iter()

    obj = iter([11,22,33,44])
    print(obj)
    >>>
            <list_iterator object at 0x0000000000B59438>      
    r1 = next(obj)
    print(r1)
    >>>11
    r2 = next(obj)
    print(r2)
    >>>22
    

    14、 round()四舍五入

    15、slice()

    16、sum()求和

    r = sum([11,22,33,44])
    print(r)
    >>>110
    

     17zip()

    li1 = [11,22,33,44]
    li2 = ["a","bb","c","e"]
    r = zip(li1,li2)
    #print(r)
    for i in r:
        print(i)
    >>>
    (11, 'a')
    (22, 'bb')
    (33, 'c')
    (44, 'e')
    

     18、排序

    li = [1,211,22,3,4]
    print(li)
    >>>[1,211,22,3,4]
    li.sort()
    print(li)
    >>>[1,3,4,22,211]
    

    三、文件操作

    • 打开文件
    • 操作文件
    • 关闭文件

    open(文件名/文件路径,模式,编码)

    1、基本的打开方式(字符串的形式打开的文件)当文件中有汉字会报错要加上文件内容的编码

      在基本打开方式是可以加encoding="utf-8"

    "+"表示可以同时读写摸个文件

     

    r+的形式打开

    从头开始读取内容

    w的时候是在末尾追加,指针到最后
    注意:

      读,从零开始读

      写:

        先读最后追加

        主动seek,写从当前的seek指针到的位置开始写入

    w+先清空,再写入,你可以读新写入的内容,写了之后指针到最后

    从开始往后读

    x+文件存在报错

    a+打开的同时,将指针移至最后,写的时候也是在最后追加,指针到最后

    2、以字节的方式打开 rb

    以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

    f = open("ha.log","rb",encoding="utf-8")
    data = f.read()
    f.colse()
    print(data)
    print(type(data))
    

     只写wb

    f = open("ha.log","wb")
    #f.write("中国")要求以字节的方式写入,给了一个字符串要进行类型转换
    f.write(bytes("中国",encoding = "utf-8"))
    f.close
    

    注:(带着b的自己转换不带b,python自己转换)

    write写入的时候要是字节

    data = read()也是字节

    普通方式打开

    python内部将010101010==》转换成字符串、通过字符串操作

    左边010101          中间是python解释器              程序员

    二进制方式打开

     f.tell()#获取指针位置

    f.seek()#调整指针位置

    3.2文件操作

    class TextIOWrapper(_TextIOBase):
        """
        Character and line based layer over a BufferedIOBase object, buffer.
        
        encoding gives the name of the encoding that the stream will be
        decoded or encoded with. It defaults to locale.getpreferredencoding(False).
        
        errors determines the strictness of encoding and decoding (see
        help(codecs.Codec) or the documentation for codecs.register) and
        defaults to "strict".
        
        newline controls how line endings are handled. It can be None, '',
        '
    ', '
    ', and '
    '.  It works as follows:
        
        * On input, if newline is None, universal newlines mode is
          enabled. Lines in the input can end in '
    ', '
    ', or '
    ', and
          these are translated into '
    ' before being returned to the
          caller. If it is '', universal newline mode is enabled, but line
          endings are returned to the caller untranslated. If it has any of
          the other legal values, input lines are only terminated by the given
          string, and the line ending is returned to the caller untranslated.
        
        * On output, if newline is None, any '
    ' characters written are
          translated to the system default line separator, os.linesep. If
          newline is '' or '
    ', no translation takes place. If newline is any
          of the other legal values, any '
    ' characters written are translated
          to the given string.
        
        If line_buffering is True, a call to flush is implied when a call to
        write contains a newline character.
        """
        def close(self, *args, **kwargs): # real signature unknown
            关闭文件
            pass
    
        def fileno(self, *args, **kwargs): # real signature unknown
            文件描述符  
            pass
    
        def flush(self, *args, **kwargs): # real signature unknown
            刷新文件内部缓冲区
            pass
    
        def isatty(self, *args, **kwargs): # real signature unknown
            判断文件是否是同意tty设备
            pass
    
        def read(self, *args, **kwargs): # real signature unknown
            读取指定字节数据
            pass
    
        def readable(self, *args, **kwargs): # real signature unknown
            是否可读
            pass
    
        def readline(self, *args, **kwargs): # real signature unknown
            仅读取一行数据
            pass
    
        def seek(self, *args, **kwargs): # real signature unknown
            指定文件中指针位置
            pass
    
        def seekable(self, *args, **kwargs): # real signature unknown
            指针是否可操作
            pass
    
        def tell(self, *args, **kwargs): # real signature unknown
            获取指针位置
            pass
    
        def truncate(self, *args, **kwargs): # real signature unknown
            截断数据,仅保留指定之前数据
            pass
    
        def writable(self, *args, **kwargs): # real signature unknown
            是否可写
            pass
    
        def write(self, *args, **kwargs): # real signature unknown
            写内容
            pass
    
        def __getstate__(self, *args, **kwargs): # real signature unknown
            pass
    
        def __init__(self, *args, **kwargs): # real signature unknown
            pass
    
        @staticmethod # known case of __new__
        def __new__(*args, **kwargs): # real signature unknown
            """ Create and return a new object.  See help(type) for accurate signature. """
            pass
    
        def __next__(self, *args, **kwargs): # real signature unknown
            """ Implement next(self). """
            pass
    
        def __repr__(self, *args, **kwargs): # real signature unknown
            """ Return repr(self). """
            pass
    
        buffer = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        closed = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        encoding = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        errors = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        line_buffering = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        name = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        newlines = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        _CHUNK_SIZE = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
        _finalizing = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    
    3.x
    文件操作源码
    • truncate()方法截取该文件的大小,如果可选尺寸参数存在,该文件将被截断(最多)的大小

      大小默认为当前的位置,当前文件位置不改变,注意:如果一个指定的大小超过了文件的当前大小,其结果依赖于平台

      此方法不会在当前文件工作在只读模式打开。

    fileObject.truncate([size])

      size--如果可选参数存在,文件被截断(最多)的大小

      没有返回值

    #!/usr/bin/python
    
    # Open a file
    fo = open("foo.txt", "rw+")
    print "Name of the file: ", fo.name
    
    # Assuming file has following 5 lines
    # This is 1st line
    # This is 2nd line
    # This is 3rd line
    # This is 4th line
    # This is 5th line
    
    line = fo.readline()
    print "Read Line: %s" % (line)
    
    # Now truncate remaining file.
    fo.truncate()
    
    # Try to read file now
    line = fo.readline()
    print "Read Line: %s" % (line)
    
    # Close opend file
    fo.close()
    truncate

    结果:

    Name of the file:  foo.txt
    Read Line: This is 1st line
    
    Read Line:
    

    a = open("5.log","r+",encoding="utf-8")

    a.close()        #关闭

    a.flush()        #强行加入内存

    a.read()         #读

    a.readline()     #只读取第一行

    a.seek(0)        #指针

    a.tell()         #当前指针位置

    a.write()        #写

    • 管理上下文

    1、代码简便,可以通过管理上下文来解决

      with open (文件名,打开方式) as f:

      #这个方法,通过with代码执行完毕之后,内部会自动关闭并释放文件资源

    2、支持打开两个文件

    #关闭文件with
    with open("5.log","r") as a:
        a.read()
    
    #同事打开两个文件,把a复制到b中,读一行写一行,直到写完
    with open("5.log","r",encoding="utf-8") as a,open("6.log","w",encoding="utf-8") as b:
        for line in a:
            b.write(line)
    

     实例:

    线上优雅的修改配置文件:

    global       
            log 127.0.0.1 local2
            daemon
            maxconn 256
            log 127.0.0.1 local2 info
    defaults
            log global
            mode http
            timeout connect 5000ms
            timeout client 50000ms
            timeout server 50000ms
            option  dontlognull
    
    listen stats :8888
            stats enable
            stats uri       /admin
            stats auth      admin:1234
    
    frontend oldboy.org
            bind 0.0.0.0:80
            option httplog
            option httpclose
            option  forwardfor
            log global
            acl www hdr_reg(host) -i www.oldboy.org
            use_backend www.oldboy.org if www
    
    backend www.oldboy.org
            server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
    
    原配置文件
    原文件
    1、查
        输入:www.oldboy.org
        获取当前backend下的所有记录
    
    2、新建
        输入:
            arg = {
                'bakend': 'www.oldboy.org',
                'record':{
                    'server': '100.1.7.9',
                    'weight': 20,
                    'maxconn': 30
                }
            }
    
    3、删除
        输入:
            arg = {
                'bakend': 'www.oldboy.org',
                'record':{
                    'server': '100.1.7.9',
                    'weight': 20,
                    'maxconn': 30
                }
            }
    
    需求
    需求
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import json
    import os
    
    
    def fetch(backend):
        backend_title = 'backend %s' % backend
        record_list = []
        with open('ha') as obj:
            flag = False
            for line in obj:
                line = line.strip()
                if line == backend_title:
                    flag = True
                    continue
                if flag and line.startswith('backend'):
                    flag = False
                    break
    
                if flag and line:
                    record_list.append(line)
    
        return record_list
    
    
    def add(dict_info):
        backend = dict_info.get('backend')
        record_list = fetch(backend)
        backend_title = "backend %s" % backend
        current_record = "server %s %s weight %d maxconn %d" % (dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
        if not record_list:
            record_list.append(backend_title)
            record_list.append(current_record)
            with open('ha') as read_file, open('ha.new', 'w') as write_file:
                flag = False
                for line in read_file:
                    write_file.write(line)
                for i in record_list:
                    if i.startswith('backend'):
                        write_file.write(i+'
    ')
                    else:
                        write_file.write("%s%s
    " % (8*" ", i))
        else:
            record_list.insert(0, backend_title)
            if current_record not in record_list:
                record_list.append(current_record)
    
            with open('ha') as read_file, open('ha.new', 'w') as write_file:
                flag = False
                has_write = False
                for line in read_file:
                    line_strip = line.strip()
                    if line_strip == backend_title:
                        flag = True
                        continue
                    if flag and line_strip.startswith('backend'):
                        flag = False
                    if not flag:
                        write_file.write(line)
                    else:
                        if not has_write:
                            for i in record_list:
                                if i.startswith('backend'):
                                    write_file.write(i+'
    ')
                                else:
                                    write_file.write("%s%s
    " % (8*" ", i))
                        has_write = True
        os.rename('ha','ha.bak')
        os.rename('ha.new','ha')
    
    
    def remove(dict_info):
        backend = dict_info.get('backend')
        record_list = fetch(backend)
        backend_title = "backend %s" % backend
        current_record = "server %s %s weight %d maxconn %d" % (dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
        if not record_list:
            return
        else:
            if current_record not in record_list:
                return
            else:
                del record_list[record_list.index(current_record)]
                if len(record_list) > 0:
                    record_list.insert(0, backend_title)
            with open('ha') as read_file, open('ha.new', 'w') as write_file:
                flag = False
                has_write = False
                for line in read_file:
                    line_strip = line.strip()
                    if line_strip == backend_title:
                        flag = True
                        continue
                    if flag and line_strip.startswith('backend'):
                        flag = False
                    if not flag:
                        write_file.write(line)
                    else:
                        if not has_write:
                            for i in record_list:
                                if i.startswith('backend'):
                                    write_file.write(i+'
    ')
                                else:
                                    write_file.write("%s%s
    " % (8*" ", i))
                        has_write = True
        os.rename('ha','ha.bak')
        os.rename('ha.new','ha')
    
    if __name__ == '__main__':
        """
        print '1、获取;2、添加;3、删除'
        num = raw_input('请输入序号:')
        data = raw_input('请输入内容:')
        if num == '1':
            fetch(data)
        else:
            dict_data = json.loads(data)
            if num == '2':
                add(dict_data)
            elif num == '3':
                remove(dict_data)
            else:
                pass
        """
        #data = "www.oldboy.org"
        #fetch(data)
        #data = '{"backend": "tettst.oldboy.org","record":{"server": "100.1.7.90","weight": 20,"maxconn": 30}}'
        #dict_data = json.loads(data)
        #add(dict_data)
        #remove(dict_data)
    
    demo
    操作步骤
  • 相关阅读:
    __all__
    python内置函数
    qZnF新存马王至许观制两利各
    PHP中获取当前页面的完整URL
    DedeCms用tag调用全站相关文章
    dedecms如何利用tag来调取相关文章
    SQL Server TempDB
    SQL Server Pivot 隐藏group
    Rebind and Rewind in Execution Plans
    batch 数字进制的问题
  • 原文地址:https://www.cnblogs.com/mosson0816/p/5478259.html
Copyright © 2011-2022 走看看