Python3 个人笔记 —— Page one

Page one : python基础

1.请注意,保存数据时绝对不能用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。

2.Python提供了一个input(),可以让用户输入字符串,并存放到一个变量里

3.python3除法定义

"/" 除法计算结果是浮点数

"//",称为地板除,两个整数的除法仍然是整数

4.只有1个元素的tuple定义时必须加一个逗号‘,’,来消除歧义


>>> t = (1,)

>>> t

(1,)

5.“非零数值、非空字符串、非空list等”== True,否则为False

6.数据类型检查可以用内置函数isinstance()实现

7.定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:


def calc(*numbers):

    sum = 0

    for n in numbers:

        sum = sum + n * n

    return sum



>>> calc(1, 2)

5

>>> calc()

0

8.for循环作用在可迭代对象上

collections模块的Iterable可判断对象是否可迭代。

python内置的isinstance(data, data_type)方法判断数据是否为给定的数据类型


>>> from collections import Iterable

>>> isinstance('abc', Iterable) # str是否可迭代

True

>>> isinstance([1,2,3], Iterable) # list是否可迭代

True

>>> isinstance(123, Iterable) # 整数是否可迭代

False

9.enumerate()函数可以把一个list变成索引-元素对


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

...    print(i, value)

...

0 A

1 B

2 C

10.列表生成式(List comprehension)是Python内置的非常简单却强大的可以用来创建list的生成式

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来


>>>[x * x for x in range(1, 11)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:


>>> [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']

11.生成器(generator),一边循环一遍计算出后续的元素

create method1:把一个列表生成式的[]改成()


>>> L = [x * x for x in range(10)]

>>> L

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x * x for x in range(10))

>>> g

<generator object <genexpr> at 0x1022ef630>

通过next()函数可以获得生成器的下一个返回值


>>> next(g)

0

>>> next(g)

1

>>> for i in g:

>>> print(i)

create method2:如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator


def fib(max):

    n, a, b = 0, 0, 1

    while n < max:

        yield b

        a, b = b, a+b

        n += 1

    return 'done'

调用generator时,首先生成一个generator对象,然后用next()函数不断获得下一个返回值


def odd():

    print 'step1'

    yield 1

    print 'step2'

    yield(3)

    print 'step3'

    yield(5)


>>> o = odd()

>>> next(o)

step1

1

>>> next(o)

step2

3

>>> next(o)

step3

5

>>> next(o)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

StopIteration

odd不是普通函数,而是generator,在执行过程中,遇到yield就中断,下次又继续执行。执行3次yield后,已经没有yield可以执行了,所以,第4次调用next(o)就报错。

但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:


>>> for n in fib(6):

...    print(n)

...

1

1

2

3

5

8


>>> g = fib(6)

>>> while True:

...     try:

...         x = next(g)

...         print('g:', x)

...     except StopIteration as e:

...         print('Generator return value:', e)

...         break

...

g: 1

g: 1

g: 2

g: 3

g: 5

g: 8

Generator return value: done

12.迭代器

  • iter()函数可实现将可迭代对象Iterable(聚集对象list,tuple,set,str,dict)转换为迭代器iterator(数据流,提前不可知数据长度,不断调用next()返回值);

  • python的for循环本质上通过不断调用next()函数实现

  • iterator是惰性的,只有在需要返回下一个数据时它才会进行计算


for x in range(10):

    pass


it = iter(list(range(11)))

# 循环

while True:

    try:

        x = next(it)

    except StopIteration:

        break

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容