csdn_export_md

一、高阶函数

写出下列代码运行结果:

def f(x):
    return x*x


if __name__=='__main__':
    r = map(f,[1,2,3,4,5,6,7,8,9])
    s = map(str,[1,2,3,4,5,6,7,8,9])
    print(type(r))
    print(type(s))
    print(list(s))
    print(list(r))

答:r和s都是map对象,在转换成list之后才是列表。
class map
class map
#得到str的list
[‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’]
#转化为整型的数
[1,4,9,16,25,36,49,64,81]

二、写出下列代码的运行结果:

from functools import reduce
def add(x,y):
    return x+y

if __name__=='__main__':
    result = reduce(add,[1,3,5,7,9])
    print(type(result))
    print(result)

答:
class int
25

三、写出下列代码的运行结果:

from functools import reduce
def fn(x, y):
    return x * 10 + y
def CharToInt(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 
8, '9': 9}[s]
if __name__ == '__main__':
    result = reduce(fn, map(CharToInt, '13579'))
    print(result)

答:#(((1*10+3)*10+5)*10+7)*10+9,
13579
这个{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]是一个一个返回的?

四、写出下列代码的运行结果:

from functools import reduce
def fn(x,y):
    return x*10+y
def CharToInt(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 
8, '9': 9}[s]

if __name__=='__main__':
    result = reduce(lambda x,y:x*10+y,map(CharToInt,'13579'))
    print(result)

答:
13579

五、写出下列代码的运行结果:

def is_odd(n):
    return n % 2 == 1
def not_empty(s):
    return s and s.strip()
if __name__ == '__main__':
    result=filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
    print(type(result))
    print(list(result))
    print(list(filter(not_empty, ['A', '', 'B', None, 'C', '  '])))

答:得到所有通过筛选,为True的数
class filter
[1,5,9,15]
去掉首尾空白后非空的字符
[‘A’,‘B’,‘C’]

六、写出下列代码的运行结果:

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum
if __name__ == '__main__':
    f = lazy_sum(1, 3, 5, 7, 9)
    print(type(f))
    print(f())

答:f指向sum函数
class function
25

sorted(iterable, cmp=None, key=None, reverse=False)

  • iterable – 可迭代对象。
  • cmp --比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key-- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回新生成的数组

七、写出下列代码的运行结果:

from operator import itemgetter
L = ['bob', 'about', 'Zoo', 'Credit']
print(sorted(L))
print(sorted(L, key=str.lower))
students = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
print(sorted(students, key=itemgetter(0)))
print(sorted(students, key=lambda t: t[1]))
print(sorted(students, key=lambda t: t[1],reverse=True))
print(sorted(students, key=itemgetter(1), reverse=True))

答:
[‘Credit’, ‘Zoo’, ‘about’, ‘bob’]
#字母升序
[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]
#小写字母升序
[(‘Adam’, 92), (‘Bart’, 66), (‘Bob’, 75), (‘Lisa’, 88)]
#元组第一个数为key升序
[(‘Bart’, 66), (‘Bob’, 75), (‘Lisa’, 88), (‘Adam’, 92)]
#元组第二个数为key升序
[(‘Adam’, 92), (‘Lisa’, 88), (‘Bob’, 75), (‘Bart’, 66)]
#元组第二个数为key降序
[(‘Adam’, 92), (‘Lisa’, 88), (‘Bob’, 75), (‘Bart’, 66)]
#元组第二个数为key降序

八、写出下列代码的运行结果,并用lambda表达式改写:

def square(num):
    return num**2
items = [1, 2, 3, 4]
squared = list(map(square, items))
print(squared)

答:
[1,4,9,16]

#使用lambda为
print(list(map(lambda x:x**2,[1,2,3,4])))

九、写出下列代码运行结果,并实现阶乘的lambda表达式版本:

from functools import reduce
def add(x, y):
    return x + y
n = 4
result = reduce(add, range(n+1))
print(result)

答:0+1+2+3+4
10

#lambda表达式版本
from functools import reduce
n = 4
result = reduce(lambda x,y:x+y,range(n+1))
print(result)

十、写出下列代码的运行结果:

l = [1, 2, 3, 4]
result = filter(lambda x: x % 2 == 1, l)
print(type(result))

答:
class filter

十一、写出下列代码的运行结果:

from collections.abc import Iterable, Iterator
def g():
    yield 1
    yield 2
    yield 3
print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable))
print('Iterable? \'abc\':', isinstance('abc', Iterable))
print('Iterable? 123:', isinstance(123, Iterable))
print('Iterable? g():', isinstance(g(), Iterable))
print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator))
print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator))
print('Iterator? \'abc\':', isinstance('abc', Iterator))
print('Iterator? 123:', isinstance(123, Iterator))
print('Iterator? g():', isinstance(g(), Iterator))

答:
Iterable? [1, 2, 3]:True
Iterable? ‘abc’:True
Iterable? 123:False
Iterable? g():True
Iterator? [1, 2, 3]:False
Iterator? iter([1, 2, 3]):True
Iterator? ‘abc’:False
Iterator? 123:False
Iterator? g():True

十二、使用生成器编写代码,代码实现功能:不断生成杨辉三角:

输出格式:

[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]

import copy
def yhsj():
    a = []     
    while True:
        a.append(1)
        if len(a)>=3:
            b = copy.copy(a)
            for i in range(1,len(a)-1):
                a[i]=b[i]+b[i-1]
        yield a


if __name__ =='__main__':
    for i in yhsj():
        print(i)
        #设一个上限
        if(len(i)>=100):
            break

十三、生成器和迭代器有什么关系?请简要说明。

答:首先,生成器是特殊的迭代器。
迭代器是指有__iter__和__next__方法的对象,可以一个一个输出迭代器内的数据;
生成器内存放的是数据产生的方式,而不是数据本身,这就可以节约大量的内存。生成器使用时和迭代器是一样的。
另外,生成器可以实现send()方法,能够改变生成器的状态,这就为协程提供了条件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值