Python函数,匿名函数,高阶函数,内置函数——08


函数

当一个函数的返回值是另一个函数的函数名时,只是返回该函数的内存地址,该函数的作用域不会发生改变。

name = 'winsodm'
def test():
    name = 'xl'
    print('in the test')

def test1():
    print('in the test1')
    return test

res = test1()
res()
#结果是:
name = 'xl'
'in the test'
#这里返回的test 之后运行 还是输入test里的变量name的值,而不是全部变量的name='winsdom'

匿名函数

lambda关键字

格式:lambda 形参:return值

lambda x:x+1
lambda x,y,z:(x+1,y+1,z+1)

匿名函数,使用完后自动释放内存空间。

高阶函数

1、把函数当作参数传递给另一个函数(函数接收的参数是一个函数名)

2、返回值中包含函数

符合以上两个规则中任意一个的函数叫高阶函数

def test():
    name = 'xl'
    print('in the test')#非高阶函数

def test1():
    print('in the test1')#高阶函数
    return test

map内置函数

传入一个函数,一个可迭代对象,遍历可迭代对象,将可迭代对象用传入的函数作一个处理并返回操作结果

num_l = [1,3,5,2,10,4,6,9,8]#定义一个列表

new_num_l =list(map(lambda x:x+1,num_l))#传入一个自增1的匿名函数和一个列表,并将其转换成list形式赋值给new_num_l这个新列表
#结果是:
print(new_num_l)
new_num_l = [2, 4, 6, 3, 11, 5, 7, 10, 9]

自己实现:

num_l = [1,3,5,2,10,4,6,9,8]#定义一个列表

def add_one(x):
    #定义一个自增1的函数    
    return x +1
def map_1(fucn,l):
    new_num_l = []#创建一个新列表
    for i in l:
        new_num_l.append(fucn(i))#遍历num_l,使用传入的函数自增1,然后加到新列表new_num_l当中去
    return new_num_l#返回新列表
new_num_l = map_1(add_one,num_l)#接收新列表
#new_num_l = map_1(lambda x:x+1,num_l)  #也可以直接传入匿名函数
print(new_num_l)
#结果是:
new_num_l = [2, 4, 6, 3, 11, 5, 7, 10, 9]

例:使用map内置函数将字符串转换成列表的形式,并且全部大写

name = 'winsdom'
name_list = list(map(lambda x:x.upper(),name))
print(name_list)
#结果是:
name_list = ['W', 'I', 'N', 'S', 'D', 'O', 'M']

filter内置函数

传入一个函数,一个可迭代对象,遍历可迭代对象,将可迭代对象里的每一个元素做一个bool值判断,如果是Ture则保留下来

name_list = ['xlc','hhc','hzzc','hc','winsdom']
print(list(filter(lambda x:x.endswith('m'),name_list)))
#结果是:
['winsdom']
name_list = ['xlc','hhc','hzzc','hc','winsdom']
print(list(filter(lambda x:not x.endswith('c'),name_list)))
#结果是:
['winsdom']

自己实现:

name_list = ['xlc','hhc','hzzc','hc','winsdom']
def end_with(x):
    #定义一个判断是否以c结尾的函数
    return x.endswith('c')
def filter_1(func,array):
    new_name_list = []#创建一个新列表
    for n in array:
        if not func(n):#判断  如果不是以c结尾则加入新列表
            new_name_list.append(n)
    return new_name_list

new_name_list = filter_1(end_with,name_list)
#new_name_list = filter_1(lambda x:x.endswith('c'),name_list)#用匿名函数直接传入,由于filter_1里写了not 所以这里的匿名函数不需要写not
print(new_name_list)
#结果是:
new_name_list = ['winsdom']

reduce内置函数

传入一个函数,一个可迭代对象,一个默认参数,将可迭代对象压缩成一个值返回

reduce在python2中可以直接使用,在python3中需要import

from functools import reduce

num_l = [1,3,5,100]
num = reduce(lambda x,y:x*y,num_l,2)
print(num)
#结果是:
num = 3000

自己实现:

from functools import reduce

num_l = [1,3,5,100]

def reduce_1(func,array,init = None):#init表示一个初始值
    if init == None:
        res = array.pop(0)
    else:
        res = init
    for i in  array:
        res = func(res,i)
    return res

res = reduce_1(lambda x,y:x*y,num_l,100)
print(res)

bool 布尔值判断 (空、None、0为False,其余为True)

bool(0)
#结果是False

abs取绝对值

print(abs(-1))  #取绝对值
#结果是:1

all会将所有的元素拿出来做一个bool运算 只要有一个是假就返回为False

print(all([1,4,'2']))
#结果是True

any 如果有一个为真,结果就是True

any([1,0,'2'])
#结果是True

bin 十进制转换为二进制

print(bin(3))
#结果是:0b11

hex十进制转换为十六进制

print(hex(12))
#结果是:0xc

oct十进制转换为八进制

print(oct(2))
#结果是:0o2

bytes 转换为bytes类型

name = '你好'
print(bytes(name,encoding = 'utf-8'))#编码
#结果是:b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(bytes(name,encoding = 'utf-8').decode('utf-8'))#解码     用什么编码就用什么解码
#结果是:‘你好’

chr 按照ASCII码进行对应转换 ord则反之

print(chr(93))
#结果是:]

dir 打印对象下面都有哪些方法

print(dir(all))
#结果是:['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

eval

dic = {'name':'winsdom'}
dic_s = str(dic)
eval(dic_s)  #可以将字符串中的数据结构给提取出来
express = '1+2*(3/3-1)-2'
eval(express)#可以把字符串中的表达式进行运算

divmod 除以10得3,余1 用来做分页功能

print(divmod(10,3))   
#结果是:
(3,1)

hash() 可hash 的数据类型即不可变数据类型,不可hash的数据类型即可变数学类型

isinstance(1,int)判断一个是不是什么类型 True

print(globals())打印全局变量
print(locals())打印局部变量

优质内容筛选与推荐>>
1、VB程序破解之API断点[bp __vbaVarTstEq]
2、c# 数据库更新和界面刷新的问题
3、24 二叉树中和为某一值的路径
4、poj 2431 Expedition 贪心 优先队列 题解《挑战程序设计竞赛》
5、人工智能第二课:认知服务和机器人框架探秘


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn