如何理解python中面向对象的函数式编程_python高级特性、函数式编程、面向对象...

切片

list和tuple、字符串。

L[:]

L[1:4]

L[-1]

str[::2]

迭代

python的迭代:只要是可迭代对象都可以,和下标没关系。

判断一个对象是否是可迭代的,通过collections模块中的Iterable类型判断。

from collections import Iterable

isinstance('abc', Iterable)

isinstance([1,2,3], Iterable)

isinstance(123, Iterable) -- false

对list实现下标循环,使用python的enumerate函数把list变成索引-元素对。

for i, value in enumerate(['a', 'b', 'c']):

print(i, value)

0 a

1 b

2 c

# 同时引用两个变量

for x, y in [(1, 1), (2, 4), (3, 9)]:

print(x, y)

1 1

2 4

3 9

列表生成式 -- List Comprehensions

用来创建list的生成式

list(range(1,11))

[1,2,3,4,5,6,7,8,9,10]

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

[1, 4, 9, ...]

# 列表生成式中的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']

# 使用列表生成式,列出目录下的所有文件和目录

import os

[d for d in os.listdir('.')]

# 列表生成式使用dict生成list

d = {'x':'a', 'y':'b', 'z':'c'}

[k + '=' + v for k, v in d.items()]

['y=b', 'x=a', 'z=c']

生成器 -- 解决列表生成式的内存溢出问题。

在循环过程中不断推算后续的元素,不必创建完整的list,节省内存。一边循环一边计算 -- 生成器 -- generator

正常的做法是:在创建了一个generator后,使用for来迭代。

定义generator的另一种方法:在函数定义中包含yield关键字。

def fib(max):

n, a, b = 0, 0, 1

while n 

yield b

a, b = b, a+b

n = n+1

return 'done'

该generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行从上次返回的yield语句继续执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值