zoukankan      html  css  js  c++  java
  • Keynote of Python III

    Keynote of Python III

    1、许多大型网站是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。

    2、print()会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:

      

    3、input(),可以让用户输入字符串

    4、Python程序是大小写敏感的

    5、十六进制用0x前缀和0-9,a-f表示,例如:0xff000xa5b4c3d2

    6、1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5

    7、/除法计算结果是浮点数

    >>> 10 / 3
    3.3333333333333335

     //,称为地板除 

    >>> 10 // 3
    3
    >>> 10 % 3
    1

    8、Python的整数没有大小限制,Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。 

    9、>>> '中文'.encode('utf-8')

    b'xe4xb8xadxe6x96x87'.decode('utf-8')

    10、list拥有append、insert方法  

    classmates.append('Adam')
    classmates.insert(1, 'Jack')
    classmates.pop()

    要删除指定位置的元素,用pop(i)方法,其中i是索引位置:

    >>> classmates.pop(1)

    ist里面的元素的数据类型也可以不同,比如:

    >>> L = ['Apple', 123, True]

    11、

    如果要定义一个空的tuple,可以写成()

    >>> t = ()
    >>> t
    ()
    

    但是,要定义一个只有1个元素的tuple,如果你这么定义:

    >>> t = (1)
    >>> t
    1
    

    定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

    所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

    >>> t = (1,)
    >>> t
    (1,)
    

    Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

    12、input()返回的数据类型是strstr不能直接和整数比较,必须先把str转换成整数。Python提供了int()函数来完成这件事

    s = input('birth: ')
    birth = int(s)

    13、

    通过in判断key是否存在:

    >>> 'Thomas' in d

    通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:

    >>> d.get('Thomas')
    >>> d.get('Thomas', -1)
    -1

    要删除一个key,用pop(key)方法,对应的value也会从dict中删除:

    >>> d.pop('Bob')
    75

    14、

    通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

    >>> s.add(4)

    通过remove(key)方法可以删除元素:

    >>> s.remove(4)
    >>> s

    两个set可以做数学意义上的交集、并集等操作:

    >>> s1 = set([1, 2, 3])
    >>> s2 = set([2, 3, 4])
    >>> s1 & s2
    {2, 3}
    >>> s1 | s2
    {1, 2, 3, 4}

    15、help(abs)查看abs函数的帮助信息。

    16、默认参数必须指向不变对象!

    def add_end(L=None):
        if L is None:
            L = []
        L.append('END')
        return L

    17、参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数。这种方式定义的函数如下:

    def person(name, age, *, city, job):
        print(name, age, city, job)

    如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

    def person(name, age, *args, city, job):
        print(name, age, args, city, job)

    18、dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

    >>> d = {'a': 1, 'b': 2, 'c': 3}
    >>> for key in d:
    ...     print(key)

    Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

    >>> for i, value in enumerate(['A', 'B', 'C']):
    ...     print(i, value)

    如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

    >>> from collections import Iterable
    >>> isinstance('abc', Iterable) # str是否可迭代
    True

    任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。

    19、列表生成式

    >>> [x * x for x in range(1, 11) if x % 2 == 0]
    [4, 16, 36, 64, 100]

    还可以使用两层循环,可以生成全排列:

    >>> [m + n for m in 'ABC' for n in 'XYZ']
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

    20、

    凡是可作用于for循环的对象都是Iterable类型,Iterable表示是此类型是否定义了__iter__方法。

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列,Iterator表示此类型是否定义了__iter__、__next__方法。

    集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    >>> from collections import Iterable
    >>> isinstance([], Iterable)
    True
    >>> from collections import Iterator
    >>> isinstance((x for x in range(10)), Iterator)
    True

    21、

    关键字lambda表示匿名函数,冒号前面的x表示函数参数。

    >>> f = lambda x: x * x
    >>> f
    <function <lambda> at 0x101c6ef28>
    >>> f(5)
    25

    22、 

    decorator就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的decorator,可以定义如下:

    def log(func):
        def wrapper(*args, **kw):
            print('call %s():' % func.__name__)
            return func(*args, **kw)
        return wrapper
    def log(text):
        def decorator(func):
            def wrapper(*args, **kw):
                print('%s %s():' % (text, func.__name__))
                return func(*args, **kw)
            return wrapper
        return decorator
    

    这个3层嵌套的decorator用法如下:

    @log('execute')
    def now():
        print('2015-3-25')

    23、

    >>> import functools
    >>> int2 = functools.partial(int, base=2)
    >>> int2('1000000')
    64

    24、

    class Student(object):
        __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称

    25、

    from enum import Enum
    
    Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
    

    这样我们就获得了Month类型的枚举类

    26、

    如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:

    from enum import Enum, unique
    
    @unique
    class Weekday(Enum):
        Sun = 0 # Sun的value被设定为0
        Mon = 1
        Tue = 2
        Wed = 3
        Thu = 4
        Fri = 5
        Sat = 6

    27、

    >>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class
    >>> h = Hello()

    28、assert 无括号

    可以用断言(assert)来替代:

    def foo(s):
        n = int(s)
        assert n != 0, 'n is zero!'
        return 10 / n

     29、文件write时,可指定编码。

       outputStream = open(Common.kCheckerOutputFullPath, 'w', encoding='utf-8')

    30、收到网络数据时,数据是utf-8,需要解码

       outputStream.write(res.read().decode('utf-8')) 

    31、内存中编码:unicode,网络编码:utf-8,磁盘编码 :utf-8

  • 相关阅读:
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1100:金币
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1100:金币
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1100:金币
    windows下配置nginx
    python中对cookie进行添加、更新和删除
    xpathhelper使用
    xpathhelper 插件下载
    UvaLive7362 Fare(欧拉函数)
    UVaLive6834 Shopping
    UVa11384
  • 原文地址:https://www.cnblogs.com/tekkaman/p/5733511.html
Copyright © 2011-2022 走看看