python学习记录七(高级函数)

python3中有很多比较别致的函数定义方式,让没有见过的同学总是很头痛,这一堆表达式到底是想干什么呀ヽ(#`Д´)ノ,本篇就总结一下python中出现的别致函数定义

lambda 表达式

定义:创建一个匿名函数对象,不提供函数名
lambda [参数1,,参数2,...]:表达式
让给定的参数执行表达式的操作然后返回操作结果
表达式的调用与函数的调用相同
myadd = lambda a,b:a+b
# 等同于
def myadd (a,b):
    return a+b

注意:
lambda只是一个表达式,用来创建一个函数对象,当表达式调用时首先执行冒号后的表达式,然后返回结果
lambda表达式中冒号后只能包含一条表达式
再举一个栗子ヽ(・ω・´メ)

# 判断一个数的2次方+1能否被5整除,如果能被整除返回True,否则返回False
fx = lambda n: [True if (n**2+1)%5==0 else False]#创建lambda表达式
fx(3)   #调用表达式

这里写图片描述

eval函数

定义:把一个字符串当成一个表达式来执行,并返回表达式执行的结果
eval(source,globals = None,locals = None)
source:一定要是一个表达式
globals和locals确定表达式应用的作用域
其中locals优先于globals
 s = '100+200*300'
 v = eval(s)
 print(v)

这里写图片描述

# eval中关于作用域的吐血应用
x = 100
y = 200
v = eval('x+y')
print(v)

dict_local = {'x':1,'y':2}
v = eval('x+y',None,dict_local)
print(v)

dict_global = {'x':10,'y':20}
v = eval('x+y',dict_global,dict_local)
print(v)

v = eval('x+y',None,{'y':2})
print(v)

v = eval('x+y',{'x':1})
print(v)

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

exec 函数

将字符串当成程序来执行,是上面eval的升级版,产生的变量创建在指定的作用域内

exec(source,globals =None,locals =None)
x = 100
y = 200
s = '''
z = x+y
print('z=',z)
print("hi python")
'''
dict_local = {'x':1}
exec(s,None,dict_local)
print(dict_local)

这里写图片描述
需要执行的字符串内的程序必须符合pep8编码

map函数

map(func,*iterable)
作用:将iterable内的值作为func的输入参数
,func函数的返回值在map的组织下生成新的可迭代对象
def power(x):
    return x**2

L = map(power,range(1,10))  #求1-9自然数的平方
for x in L:
    print(x)

这里写图片描述

filter 函数

filter(func,iterable)
作用:按照func定义的规则对iterable的数据进行筛选,满足条件的保留
注意:一般func的定义的判断标准都是返回True或False
def is_prime(x):
    if x< 2:
        return False
    for i in range(2,x):
        if x%i == 0:
            return False
    return True
for x in filter(is_prime,range(100,150)):
     print(x,end = '')
 a = sum(filter(is_prime,range(100,150)))
 L = filter(is_prime,range(100,150))
 for x in L:
        print(x,end = ' ')

这里写图片描述

注意:filter筛选出来的不能直接打印,需要转化成相应的列表或者字典才能打印,但是可以使用内建函数进行计算

sorted函数

sorted(iterable ,key =None,reverse =False)
作用:将可迭代对象按照key的规则排序
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
def get_key(n): #用来绑定每个参数中的每个元素,此函数需要返回一个能比较大小的依据
    print("get_key")
    return  n[::-1]
L = sorted(names,key=get_key)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/patrisk/article/details/80889226