第六节-函数的定义与调用

习题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

猜你喜欢

转载自blog.csdn.net/sdhotn/article/details/80323456