python 高级语言特性_Python3(4) Python 高级特性

本系列主要学习Python的基本使用和语法知识,后续可能会围绕着AI学习展开。

Python3 (1) Python语言的简介

Python3 (2) Python语法基础

Python3 (3) Python函数

Python3 (4) Python高级特性

python 高级特性,主要是数据的迭代部分的知识,包括 切片、迭代、列表生成式、生成器、迭代器,整体来看比java等语言更加强大,方便。

切片

切片可以截取list的部分数据。查找数据更加方便,相当于java字符串subString()方法。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

L = list(range(20))

print(L)

#取前三个数据

print(L[0:3])

#取下标1-3条数据

print(L[1:3])

#取倒数第一条数据

print(L[-1:])

#取倒数1-2条数据

print(L[-2:])

#每隔两个取一条数据

print(L[::2])

#前6个数据,每隔三个去一条

print(L[:6:3])

#复制一个list

print(L[:])

输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

[0, 1, 2]

[1, 2]

[19]

[18, 19]

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

[0, 3]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

以上就是切片的使用规则,由于tuple,str 可以看成list,也支持切片操作。

迭代

迭代指对数据的遍历,一般通过for循环来进行遍历,如list 、tuple。python中for循环不需要有下标,只要是可迭代对象,无论有无下标,都可以迭代。如dict:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

D = {'张三': 16, '李四': 17, '王五': 18}

#遍历key

for key in D:

print(key)

#遍历 value

for value in D.values():

print(value)

#遍历 key,value

for k,v in D.items():

print(k,'=',v)

#遍历 下标,key,value

for i,(k,v) in enumerate(D.items()):

print(i,k,v)

输出结果:

张三

李四

王五

16

17

18

张三 = 16

李四 = 17

王五 = 18

0 张三 16

1 李四 17

2 王五 18

以上是对dict 的遍历,list、tuple 比 dict 更简单, 其中,如果要得到list下标,可以通过关键字 enumerate获取对应的下标,并且for 遍历支持多种返回值。

列表生成式

python中可以通过表达式来生成list ,可以方便的生成符合条件的list。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import os

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

print(L)

#增加条件限制

K = [x*x for x in range(1,11)if x%2 == 0]

print(K)

#多层嵌套

C = [a+b for a in "abc" for b in "ABC"]

print(C)

#生成两个变量组成的list

D = {'张三': 16, '李四': 17, '王五': 18}

M = [(k,v) for k,v in D.items()]

print(M)

#当前目录下的所有文件和目录名

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

print(O)

输出结果:

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

[4, 16, 36, 64, 100]

['aA', 'aB', 'aC', 'bA', 'bB', 'bC', 'cA', 'cB', 'cC']

[('张三', 16), ('李四', 17), ('王五', 18)]

['.idea', 'call_func.py', 'def_func.py', 'HelloWord.py', 'var_args.py']

这就是list 生成式的强大之处,可以通过各种表达式,生成需要的list。

生成器

生成器就是按动态的需求生成list,与列表生成式相比,不需要一次性生成完整的数据,可以节约内存。即:列表元素按照某种算法推算出来,边循环一边计算的机制的机制称为 generator,用()代替列表生成器的[]。

g = (x * x for x in range(5))

print(g)

print(next(g))

print(next(g))

print(next(g))

print(next(g))

print(next(g))

print(next(g))

输出结果:

Traceback (most recent call last):

at 0x000001BF3FD2A200>

File "F:/python/HelloWord/def_func.py", line 11, in

0

1

print(next(g))

4

StopIteration

9

16

直接打印g,输出的是 at 0x000001BF3FD2A200>,说明我们定义的是一个generator, 通过连续next(g)可以打印出对应的数据,但是超出范围会报Traceback (most recent call last): Stoplteration错误,由于generator也是可迭代对象

g = (x * x for x in range(5))

for n in g:

print(n)

输出结果:

0

1

4

9

16

如果上面的for 循环不能瞒住需求,我们可以通过函数来实现, 我们来写一个斐波拉契数列数列,这个数列就是根据前面数据来推断后面的数,在函数中使用关键字yield 可以转化成 generator

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

#用函数实现fib

def fib(max):

n, a, b = 0, 0, 1

while n < max:

print(b)

a, b = b, a + b

n = n + 1

return 'done'

fib(5)

print("-----------------")

#将函数转化成 generator

def generator_fib(max):

n, a, b = 0, 0, 1

while n < max:

yield b

a, b = b, a + b

n = n + 1

return 'done'

g = generator_fib(5)

print(g)

#输出generator:

while True:

try:

x = next(g)

print('g:', x)

except StopIteration as e:

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

break

输出结果:

1

1

2

3

5

-----------------

g: 1

g: 1

g: 2

g: 3

g: 5

Generator return value: done

这里我们要清楚yield的使用规则:函数中return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。写一个杨辉三角练练:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

def triangles():

N = [1]

while True:

yield N

N.append(0)

N = [N[i] + N[i - 1] for i in range(len(N))]

n = 0

for t in triangles():

print(t)

n = n + 1

if n == 10:

break

输出结果:

[1]

[1, 1]

[1, 2, 1]

[1, 3, 3, 1]

[1, 4, 6, 4, 1]

[1, 5, 10, 10, 5, 1]

[1, 6, 15, 20, 15, 6, 1]

[1, 7, 21, 35, 35, 21, 7, 1]

[1, 8, 28, 56, 70, 56, 28, 8, 1]

[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

迭代器

理解迭代器generator要清楚一个概念,可以进行for 循环的为可迭代对象Iterable,并不是迭代器,迭代器是指以被next()函数调用并不断返回下一个值的对象,表示一个惰性计算的序列。是迭代器一定是可迭代对象,可迭代对象不一定是迭代器。

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

可迭代对象:list、tuple、dict、set、str、generator、generator function

迭代器:generator、generator function 可以通过iter()函数获得一个Iterator对象

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

from collections import Iterable, Iterator

L = [1,2,3,4,5]

D = {"张三":15,"李四":16,"王五":17}

T = (1,2,3,4,5)

G = (n for n in range(5))

print(isinstance(L,Iterable))

print(isinstance(D,Iterable))

print(isinstance(T,Iterable))

print(isinstance(G,Iterable))

print("--------------------------------------")

print(isinstance(L,Iterator))

print(isinstance(D,Iterator))

print(isinstance(T,Iterator))

print(isinstance(G,Iterator))

print("--------------------------------------")

print(isinstance(iter(L),Iterator))

print(isinstance(iter(D),Iterator))

print(isinstance(iter(T),Iterator))

输出结果:

True

True

True

True

--------------------------------------

False

False

False

True

--------------------------------------

True

True

True

上面的代码验证了list、dict、tuple、generator是否是迭代器和可迭代对象,通过isinstance判断,可迭代对象可以通过iter()函数生成迭代器。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python高级特性是指一些内置函数的高级用法,可以帮助我们更方便地完成一些功能。以下是一些常见的Python高级特性的介绍和示例: 1. 列表推导式(List Comprehension):通过简洁的语法创建新的列表。可以在一个列表中根据条件筛选元素、对元素进行操作等。例如: ```python # 创建一个包含1到10的平方的列表 squares = [x**2 for x in range(1, 11)] print(squares) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ``` 2. 字典推导式(Dictionary Comprehension):类似于列表推导式,可以用简洁的语法创建新的字典。例如: ```python # 创建一个包含1到10的平方的字典 squares_dict = {x: x**2 for x in range(1, 11)} print(squares_dict) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100} ``` 3. 生成器表达式(Generator Expression):类似于列表推导式,但是返回一个生成器对象,可以逐个生成值,而不是一次性生成所有值。例如: ```python # 创建一个生成器,逐个生成1到10的平方 squares_gen = (x**2 for x in range(1, 11)) print(next(squares_gen)) # 输出:1 print(next(squares_gen)) # 输出:4 # ... ``` 4. 匿名函数(Lambda Function):一种简洁的函数定义方式,通常用于需要一个简单函数的地方。例如: ```python # 定义一个匿名函数,计算两个数的和 add = lambda x, y: x + y print(add(3, 5)) # 输出:8 ``` 5. 高阶函数(Higher-order Function):可以接受函数作为参数或返回函数的函数。例如,`map()`函数可以将一个函数应用到一个可迭代对象的每个元素上。例如: ```python # 将函数应用到列表的每个元素上 numbers = [1, 2, 3, 4, 5] squared_numbers = list(map(lambda x: x**2, numbers)) print(squared_numbers) # 输出:[1, 4, 9, 16, 25] ``` 这些是Python的一些常见高级特性,它们可以帮助我们更加简洁和高效地编写代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值