Python高级特性与函数式编程

字典的迭代

#字典的迭代
userInfo = {"name":"FreeMan","age":"36","city":"重庆"}
# k(key)是字典的键,v(value)是字典的值
for k,v in userInfo.items():
     print("key =>",k,"value=>",v)

结果:

key => name value=> FreeMan
key => age value=> 36
key => city value=> 重庆

可迭代对象

通过for循环来遍历list、dict或tuple,这种遍历我们称为迭代(Iteration)。
那么,如何判断一个对象是可迭代对象呢?

#collections模块的Iterable类型判断:
from collections import Iterable
print(isinstance('abc',Iterable))
print(isinstance([1,2,3],Iterable))
print(isinstance((123),Iterable))
print(isinstance('苹果',Iterable))

结果:

True
True
False
True

改变list为索引-元素进行迭代

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

#改变list为索引-元素进行迭代--enumerate()函数
fruit = ["苹果","香蕉","栗子","西瓜"]
for k,v in enumerate(fruit):
    print(k,v)

结果:

0 苹果
1 香蕉
2 栗子
3 西瓜

简单的列表生成式

语法:[表达式 for 变量 in 列表[条件]]

如果要生成[1,2,…,100]怎么做?
方法一:

#列表生成式
List1 = [i for i in range (1,101)]
print(List1)

方法二:

#不用列表生成式,生成[1,100]
List1 = []
for i in range(1,101):
    List1.append(i)
print(List1)

for循环还可以加上if判断,就可以筛选出仅偶数的平方

#生成1~100的偶数,[表达式 for 变量 in 列表 if...]
Even = [i for i in range (1,101) if i%2 == 0]
print(Even)
#常规for循环方法
List1 = []
for i in range(1,101):
    if i%2 ==0:
        List1.append(i)
print(List1)

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

#列表生成式
List1 = [i +j for i in "ABC" for j in "XYZ"]
print(List1)
#常规for循环方法
for i in "ABC":
    for j in "XYZ":
        print(i+j)

结果:

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

使用列表生成式获取当前目录文件

#使用列表生成式获取当前目录文件
import os
List1 = [i for i in os.listdir()] #listdir()可以写你想获取指定路径的文件
print(List1)

生成器的创建(generation)

方法一:把一个列表生成式的[]改成()

#创建一个生成器
G = (i**2 for i in range(1,101))
print(G)

结果:

<generator object <genexpr> at 0x0000025BF86C5C50>
#0x0000025BF86C5C50 生成器的内存地址

使用迭代获取生成器推算的每个元素

#使用迭代获取生成器推算的每个元素
G = (i**2 for i in range(1,101))
for i in G:
    print(i)

map()函数

map()函数接收两个参数,一个是函数,一个是Iterable
map()将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterable返回

#我们可以使用map函数做到同样的效果map(func,iter) 工厂函数
#对后面可迭代的对象,去除里面的每一个元素对其进行加工处理
#map只能对一个元素进行操作,所以只能传一个值x

#对List1里的每一个元素加1
List1 = [i for i in range(1,11)]
print(List1)
def add1(x):
    return x+1
print(list(map(add1,List1)))

结果:

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

匿名函数

python中提供了对匿名函数的有限支持,使用关键字lambda
语法:lambda[arg1[,arg2,…argn]]:expression

#如果不想占内存地址,那么就可以用lambda函数
List7 = [i for i in range(1,7)]
def sqr(x):
    return x**2
print(list(map(sqr,List7)))
#匿名函数输出结果与上面代码等价于
print(list(map(lambda x:x**2,List7)))

结果:

[1, 4, 9, 16, 25, 36]
[1, 4, 9, 16, 25, 36]

写CSDN是为了记录自己所学习的知识
为了巩固
为了更自律
如果有问题请各位指正,谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值