python学习一

作者: 瀚宇泽霖 | 来源:发表于2017-06-28 23:58 被阅读0次

    1 python 如何管理内存

    对象引用计数机制,垃圾回收机制,内存池机制

    一。对象引用机制

    python内部引用计数,来保持追踪内存中的对象,所以对象都有引用计数。

    引用计数增加的情况:(1,一个对象分配一个新名称。2,将其放入一个容器中<如列表,元组或字典>)

    引用计数减少的情况:(1,使用del语句对对象别名显示的销毁。2,引用超出作用域或被重新赋值)

    sys.getrefcount()函数可以获得对象的当前引用计数

    多数情况下,引用计数比你猜测的要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。

    二 垃圾回收

    1 当一个对象的引用计数归零时,它将被垃圾收集机制处理掉 2 当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象不会销毁。(从而导致内存泄漏)为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问的对象的循环并删除它们。

    三 内存机制

    python、提供了对内存的垃圾手机机制,但是它将不用的内存放到内存池而不是返回操作系统

    1 Pymalloc机制。为了加速python的执行效率,python引入了一个内存池机制,用于管理对小块内存的申请和释放 2 python中所有小于256个字节的对象都使用pymalloc实现的分配机制,而大的对象则使用系统的malloc 3 对于python对象,如整数,浮点数和list,都有独立的私有内存池。也就是你分配又释放了大量的整数,用于缓存这些整数的内存就不能在分配给浮点数

    2 lambda函数

    lambda通常在需要一个函数却不想去命名一个函数的场合下使用,也就是指匿名函数

    lambda函数:首要用途是指点短小的回调函数

    lambda[arg]:expression

    例如 a = lambda x,y:x+y

    3 tuple list转换

    tuple(list) list(tuple)

    4 删除list里的重复元素

    使用set函数 set(list)

    5 sorted与sort

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。

    sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效

    sort(key=None,reverse=False) 就地改变列表  reverse:True反序;False 正序

    例如

    >>>sorted([1,3,2,4,5])

    [1,2,3,4,5]

    >>>a=[5,4,3,2,1]

    >>>a.sort()

    >>>a

    [1,2,3,4,5] #若用list.sort()则list本身将被修改

    >>>sorted("This is a test string from Andrew".split(), key=str.lower)  #加了key,忽略大小写

    ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']                 #key=len按照长度进行排序

    >>>sorted("This is a test string from Andrew".split())    #未加key,默认大写在前,小写在后

    ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']

    >>> student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]

    >>> sorted(student_tuples, key=lambda student: student[2])   # sort by age

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    >>>student_tuples.sort(key=lambda x: x[2])

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    >>>s=”Hello79351WorldMyNameIsMrFiona0352231964”

    >>>''.join(sorted(s,key=lambda x: (x.isdigit(),x.isdigit() and int(x)%2==0,x.islower(),x.isupper(),x)))

    'FHIMMNWaadeeilllmnooorrsy113335579902246'

    大写在前,小写在后,数字放在最后并且奇数在偶数之前

    >>>s={‘a’:10,’t’:5,’c’:2,’b’:12}

    >>>sorted(s,key=lambda x:x[0])

    [‘a’,’b’,’c’,’t’]

    >>>s=[]

    一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配

    #encoding=utf-8importrandom

    # 定义一个列表用来保存3个办公室

    offices = [[],[],[]]

    # 定义一个列表用来存储8位老师的名字

    names = ['A','B','C','D','E','F','G','H']

    i =0

    for name in names:    

          index = random.randint(0,2) 

          offices[index].append(name)

    i =1

    for tempNames in offices:

           print('办公室%d的人数为:%d'%(i,len(tempNames)))

           i+=1

           for name in tempNames: 

                  print("%s"%name,end='')

                  print("\n") 

                  print("-"*20)

    运行结果如下:

    相关文章

      网友评论

        本文标题:python学习一

        本文链接:https://www.haomeiwen.com/subject/yljpcxtx.html