习题1: 将写过的代码整理成函数的形式, 并尝试调用, 观察是否能得到相同的结果.
习题2、: 使用 reduce + lambda 实现计算阶乘的函数, 并尝试使用不同的正整数调用
reduce( )
函数会对参数序列中元素进行累积操作
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(假如有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
reduce(function, iterable[, initializer])
>>>def add(x, y) : # 两数相加
... return x + y ...
>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5 15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15
lambda :匿名函数, 是指一类无需定义标识符(函数名)的函数或子程序。
1、lambda只是一个表达式,函数体比def简单很多。
2、lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
3、lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
f = lambda x,y,z:x + y + z
print f(1,2,3)
print f(4,5,6)
>>
6
15
from functools import reduce
#习题2、使用 reduce + lambda 实现计算阶乘的函数
"""阶乘"""
def factorial(number):
a = reduce(lambda x,y:x*y,range(1,number+1))
return a
print(factorial(3))
print(factorial(10))
print(factorial(11))
>>
6
3628800
39916800
习题3、: 读取数据文件 iris_data.csv(数据在课件中), 使用 map + lambda 实现数据处理. 将每一行
4.9,3.1,1.5,0.1,Iris-setosa
处理成
['Iris-setosa', 4.9, 3.1, 1.5, 0.1]
即每一行是一维列表, 数字是 float 类型, 文字是 str 类型
map( )
会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map(function, iterable, ...)
* function -- 函数,有两个参数
* iterable -- 一个或多个序列
>>>def square(x) : # 计算平方数
... return x ** 2 ...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
习题3、实现文件读取,数据整理操作
"""
data = []
# j = []
with open("../data/iris_data.csv","r") as file:
for i in file:
if i != '\n':
#消除换行符,此处切片
i = i[:-1].split(',')
#转换数据类型、拼接
j = i[4:] + list(map(lambda x:float(x),i[:-1]))
data.append(j)
print(data)
>>
[['Iris-setosa', 5.1, 3.5, 1.4, 0.2], ['Iris-setosa', 4.9, 3.0, 1.4, 0.2],...
习题4:
定义函数, 输入文件路径, 输出文件大小.
习题4、定义函数, 输入文件路径, 输出文件大小."MB"
"""
import os
def get_Files_size(file_path):
size = 0
for root,dirs,file_names in os.walk(file_path):
for file_name in file_names:
size += os.path.getsize(os.path.join(root,file_name))
size /= (1024 * 1024)
return (size)
print(get_Files_size('E:/test/'),"MB")
>>
6.847097396850586 MB
习题5:
定义一个函数, 输入x, y, 输出它们分别计算加减乘除后的结果. 你如何解决多个输出(return)的问题?
python- 如何return返回多个值,函数的return 语句只能返回一个值,可以是任何类型。
因此,我们可以“
返回一个 tuple类型,来间接达到返回多个值
”。
"""
习题5、输入x, y, 输出它们分别计算加减乘除后的结果.
"""
def calc(x,y):
a = x + y
b = x - y
c = x * y
d = x / y
#这里使用元组或列表返回都可以
return((a,b,c,d))
print(calc(2,3))
>>
(5, -1, 6, 0.6666666666666666)
测试题1、
习题2、使用 reduce + lambda 实现计算阶乘的函数
"""
from functools import reduce
def factorial(number):
if number != 0:
a = reduce(lambda x,y:x*y,range(1,number+1))
else:
a = 1
return a
print(factorial(20))
"""
课后测试题2、求斐波那契数列
"""
from functools import reduce
def Fibonacci(n):
series = [1, 1]
while len(series)<n:
series.append(reduce(lambda x,y:x+y,series[-2:]))
return series[-1]
print(Fibonacci(200))
>>
2432902008176640000
280571172992510140037611932413038677189525