• Python 学习笔记(五)杂项


    1. Assert

    assert len(unique_characters) <= 10, 'Too many letters'
    #…等价于:
    if len(unique_characters) > 10:
        raise AssertionError('Too many letters'

    2.找出不同字母

    >>> words = ['SEND', 'MORE', 'MONEY']
    >>> ''.join(words)                   #join 字符串连接符
    'SENDMOREMONEY'
    >>> set(''.join(words))              #set 返回不重复字符
    {'E', 'D', 'M', 'O', 'N', 'S', 'R', 'Y'}

    3. List Set Tuple

    >>> unique_characters = {'E', 'D', 'M', 'O', 'N', 'S', 'R', 'Y'}
    >>> tuple(ord(c) for c in unique_characters)
    (89, 83, 82, 77, 79, 78, 69, 68)
    >>> set(ord(c) for c in unique_characters)
    {68, 69, 77, 78, 79, 82, 83, 89}
    >>> list(ord(c) for c in unique_characters)
    [89, 83, 82, 77, 79, 78, 69, 68]

    4. 排列

    list(itertools.permutations('ABC', 3))    #取ABC 3个元素的排列组合
    [('A', 'B', 'C'), ('A', 'C', 'B'),
     ('B', 'A', 'C'), ('B', 'C', 'A'),
     ('C', 'A', 'B'), ('C', 'B', 'A')]

    5. 排列分组

    >>> names = ['Alex', 'Anne', 'Chris', 'Dora', 'Ethan','John', 'Lizzie', 'Mike', 'Sarah', 'Wesley']
    >>> import itertools
    >>> groups = itertools.groupby(names,len)
    >>> groups
    <itertools.groupby object at 0x01433F30>
    >>> list(groups)
    [(4, <itertools._grouper object at 0x013DA830>),
     (5, <itertools._grouper object at 0x01426190>),
     (4, <itertools._grouper object at 0x01426C70>),
     (5, <itertools._grouper object at 0x01426130>),
     (4, <itertools._grouper object at 0x01426030>),
     (6, <itertools._grouper object at 0x014261D0>),
     (4, <itertools._grouper object at 0x014265D0>),
     (5, <itertools._grouper object at 0x01426110>),
     (6, <itertools._grouper object at 0x01426150>)]
    >>> names = sorted(names,key=len) #列表需要排序才能group by
    >>> names
    ['Alex',
     'Anne',
     'Dora',
     'John',
     'Mike',
     'Chris',
     'Ethan',
     'Sarah',
     'Lizzie',
     'Wesley']
    >>> A = itertools.groupby(names,len)
    >>> list(A)  #调用list() 函数会“耗尽”这个迭代器, 也就是说 你生成了迭代器中所有元素才创造了这个列表
    [(4, <itertools._grouper object at 0x014261D0>),
     (5, <itertools._grouper object at 0x014268D0>),
     (6, <itertools._grouper object at 0x01426C90>)]
    >>> for name_len, name_iter in A:  #List(A) 为空
    ...     print('%d' %(name_len))
    ...     for name in name_iter:
    ...         print(name)
    ...         
    >>> 
    >>> A = itertools.groupby(names,len) #重新产生
    >>> for name_len, name_iter in A:
    ...     print('%d' %(name_len))
    ...     for name in name_iter:
    ...         print(name)
    ...         
    4
    Alex
    Anne
    Dora
    John
    Mike
    5
    Chris
    Ethan
    Sarah
    6
    Lizzie
    Wesley

     6. List 的extend 和append的差别

    >>> a_list = ['a','b','c']
    >>> a_list.extend(['d','e']) #extend() 方法只接受一个参数,而该参数总是一个列表
    >>> a_list
    ['a', 'b', 'c', 'd', 'e']
    >>> len(a_list)
    5
    >>> a_list.append(['f','g']) #append() 方法只接受一个参数,但可以是任何数据类型
    >>> a_list
    ['a', 'b', 'c', 'd', 'e', ['f', 'g']]
    >>> len(a_list)
    6

    7. Set 的discard和remove的差别

    >>> a_set = {1, 3, 6, 10, 15, 21, 28, 36, 45}
    >>> a_set
    {1, 3, 36, 6, 10, 45, 15, 21, 28}
    >>> a_set.discard(10)                        ①
    >>> a_set
    {1, 3, 36, 6, 45, 15, 21, 28}
    >>> a_set.discard(10)                        ②
    >>> a_set
    {1, 3, 36, 6, 45, 15, 21, 28}
    >>> a_set.remove(21)                         ③
    >>> a_set
    {1, 3, 36, 6, 45, 15, 28}
    >>> a_set.remove(21)                         ④
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 21
    #区别在于:如果该值不在集合中,remove() 方法引发一个 KeyError 例外

    8.混合字典 

    SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
                1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}
    >>> SUFFIXES[1024]     ④
    ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
    >>> SUFFIXES[1000][3]  ⑤ #
    'TB'

    9.文件路径操作

    >>> import os
    >>> print(os.getcwd()) #当前工作路径
    D:studyworkspacepythonTestsrc
    >>> print(os.path.expanduser('~')) #$home路径
    C:Documents and Settingsyfzhou
    >>> print(os.path.join(os.path.expanduser('~'),'hello','world','python.py')) #构建动态的文件夹和文件
    ... 
    C:Documents and Settingsyfzhouhelloworldpython.py

    10. 罗列目录下的文件

    >>> os.chdir('/Users/pilgrim/diveintopython3/') #改变当前路径
    >>> import glob
    >>> glob.glob('examples/*.xml')  #返回匹配的文件
    ['examples\feed-broken.xml',
    'examples\feed-ns0.xml',
    'examples\feed.xml']
    >>> os.chdir('examples/')  #改变路径
    >>> glob.glob('*test*.py')  #返回匹配的通配符文件
    ['alphameticstest.py',
    'pluraltest1.py'
    ]

    11.文件元信息

    >>> metadata = os.stat('roman.py') #用os.stat() 函数返回一个包含多种文件元信息的对象
    >>> metadata.st_mtime
    1373272096.4869184
    >>> import time
    >>> time.localtime(metadata.st_mtime)
    time.struct_time(tm_year=2013, tm_mon=7, tm_mday=8, tm_hour=16, tm_min=28, tm_sec=16, tm_wday=0, tm_yday=189, tm_isdst=0) #可读性更强
    >>> metadata.st_size #文件大小
    2546
    >>> print(os.path.realpath('roman.py')) #文件绝对路径
    D:studyworkspacepythonTestsrc
    oman.py

    12.字典键值互换

    >>> a_dict = {'a': 1, 'b': 2, 'c': 3}
    >>> {value:key for key, value in a_dict.items()}
    {1: 'a', 2: 'b', 3: 'c'}

     13. __str__ and __repr__

    • __str__ is tried first for the print operation and the str built-in function (the internal

    equivalent of which print runs). It generally should return a user-friendly
    display.

    • __repr__ is used in all other contexts: for interactive echoes, the repr function, and

    nested appearances, as well as by print and str if no __str__ is present. It should
    generally return an as-code string that could be used to re-create the object, or a
    detailed display for developers

    >>> class addboth(adder):
    ... def __str__(self):
    ... return '[Value: %s]' % self.data # User-friendly string
    ... def __repr__(self):
    ... return 'addboth(%s)' % self.data # As-code string
    ...
    >>> x = addboth(4)
    >>> x + 1
    >>> x # Runs __repr__
    addboth(5)
    >>> print(x) # Runs __str__
    [Value: 5]
    >>> str(x), repr(x)
    ('[Value: 5]', 'addboth(5)')

    Two usage notes:

    1.keep in mind that __str__ and__repr__ must both return strings

    2.depending on a container’s string-conversion logic, the user-friendly display of __str__ might only applywhen objects appear at the top level of a print operation; objects nested in larger objects might still print with their __repr__ or its default

    >>> class Printer:
    ... def __init__(self, val):
    ... self.val = val
    ... def __str__(self): # Used for instance itself
    ... return str(self.val) # Convert to a string result
    ...
    >>> objs = [Printer(2), Printer(3)]
    >>> for x in objs: print(x) # __str__ run when instance printed
    ... # But not when instance in a list!
    2
    3
    >>> print(objs)
    [<__main__.Printer object at 0x025D06F0>, <__main__.Printer object at ...more...
    >>> objs
    [<__main__.Printer object at 0x025D06F0>, <__main__.Printer object at ...more...
    
    ----------------------------
    >>> class Printer:
    ... def __init__(self, val):
    ... self.val = val
    ... def __repr__(self): # __repr__ used by print if no __str__
    ... return str(self.val) # __repr__ used if echoed or nested
    ...
    >>> objs = [Printer(2), Printer(3)]
    >>> for x in objs: print(x) # No __str__: runs __repr__
    ...
    23
    >>> print(objs) # Runs __repr__, not ___str__
    [2, 3]
    >>> objs
    [2, 3]
  • 相关阅读:
    副业收入是我做程序员的2倍!副业这么有 “钱”景,我要考虑转行吗?
    C语言丨const关键字的用法详解
    C/C++学习笔记:C/C++函数调用的方式,你应该要学会这五种
    软件崩溃了,该如何解决? 解决问题的关键要会对症下药!
    C语言丨深入理解volatile关键字
    C语言丨getch(),getche()和getchar()的区别
    学编程的误区——眼高手低,不重视练习!
    通过编写“猜测数字”游戏来探索Linux中的Bash
    零基础想要更快入门Linux?找对方法,让你少奋斗10年!
    VS/VC 出现闪退怎么办?这4个技巧要知道!
  • 原文地址:https://www.cnblogs.com/zyf7630/p/3165292.html
Copyright © 2020-2023  润新知