python编写函数isodd(x)_Python之函数式编程

函数式编程

函数式编程是指用一系列函数决定问题

函数是一等公民

函数本身可以赋值给变量,赋值后变量绑定函数

允许将函数本身作为参数传入另一个函数

允许返回一个函数

函数的可重入性

可重入是指一个函数传的参数一定,则结果必须一定

def 定义的函数不要访问除局部变量以外的变量,结果不受外界的影响

# 以下是不可重入的函数myadd

y = 200

def myadd(x):

return x + y

print(myadd(10)) # 210

y = 300

print(myadd(10)) # 310

# 以下是可重入的函数 myadd

def myadd(x, y):

return x + y

print(myadd(10, 20)) # 30

高阶函数 (High Order Function)

什么是高阶函数:

满足下列一个条件的函数即为高阶函数:

函数接受一个或多个函数作为参数传入

函数返回一个函数

Python中内建的高阶函数

map 函数

map(func, *iterables) 用函数和对可迭代对象中的每一个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象不再提供数据时,此可迭代对象生成结束

可迭代对象的个数要与 func 函数的个数相同

def pow2(x):

return x ** 2

for x in map(pow2, range(1, 10)):

print(x,end = ' ') # 1 4 9 16 25 36 49 64 81

# ********************************************* #

# 内建的pow(x, y, z=None)

# 生成 1 ** 4 , 2**3 , 3 ** 2, 4 ** 1

for x in map(pow, range(1, 10), range(4,0,-1)):

print(x) # 1, 8, 9, 4

for x in map(pow, [2,3,5,7],[4,3,2,1], range(5, 10)):

print(x) # 1, 3, 4, 7

# 求 1 ** 2 + 2 ** 2 + 3 ** 2 + ... + 9**2 的和

def pow2(x):

return x**2

print(sum(map(pow2,range(1,10))))

print(sum(map(lambda x:x**2,range(1,10))))

# 求 1 ** 3 + 2 ** 3 + 3 ** 3 + ... + 9**3 的和

print(sum(map(lambda x:x**3,range(1,10))))

# 求 1**9 + 2**8 + 3**7 + ... + 9**1的和 # 11377

print(sum(map(lambda x,y:x**y,range(1,10),range(9,0,-1))))

# ********************************************* #

# 错误示例

def pow2(x,y):

return x ** y

for x in map(pow2, range(1, 10)):

print(x,end = ' ')

filter 函数

filter(func, iterable)

筛选可迭代对象 iterable 中的数据,返回一个可迭代对象,此可迭代对象将对 iterable 进行筛选

函数 func 将对每个元素进行求值,返回 False 则将此数据丢弃,返回True 则保留此数据

def isodd(x): # 此函数判断x是否为奇数

return x % 2 == 1

for x in filter(isodd, range(10)):

print(x,end=' ') # 1 3 5 7 9

# ************************************************* #

even = [x for x in filter(lambda x: x%2==0, range(10))]

print(even) # [0, 2, 4, 6, 8]

sorted 函数

将原可迭代对象的数据进行排序,生成排序后的列表

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

iterable可迭代对象

key 函数是用来提供一个参考值,这个值将作为排序的依据

reverse 标志用来设置是否降序排序

L = [5, -2, -4, 0, 3, 1]

L1 = sorted(L) # L1 = [-4, -2, 0, 1, 3, 5]

L2 = sorted(L, reverse=True) # L2 = [5, 3, 1, 0, -2, -4]

L3 = sorted(L, key=abs) # L3 = [0, 1, -2, 3, -4, 5]

eval() 函数

把一个字符串当成一个表达式来执行,返回表达式执行后的结果,如果字符串不是表达式则会出错

eval(source, global=None, locals=None)

x = 100

y = 200

a = eval('x+y')

print(a) # 300

exec() 函数

把一个字符串当成程序来执行

exec(source, globals=None, locals=None)

x = 100

y = 200

s = 'z = x+y; print(z); del z; print("删除成功")'

# 执行s绑定的语句

exec(s)

# 300

# 删除成功

# ********************************** #

# eval 和 exec 的两个参数 globals 和 locals

# 这两个参数是用来设置表达式或程序运行的全局变量和局部变量

x = 100

y = 200

s = 'print(x, y, x + y)'

exec(s) # 100 200, 300

exec(s, {'x': 10, 'y': 20}) # 10, 20, 30

exec(s, {'x': 10}, {'x': 1, 'y': 2}) # 1 2 3

exec(s, {'x': 10}, {'y': 2}) # 10 2 12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值