前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >函数特殊用法与偏函数

函数特殊用法与偏函数

作者头像
数据山谷
发布2020-12-22 11:32:07
3560
发布2020-12-22 11:32:07
举报
文章被收录于专栏:数据山谷
第一趴:函数特殊用法

我们今天来给大家讲讲函数的特殊用法,看看函数有哪些特殊的用法,大家是不是已经开始好奇了,函数就是简单的函数呗,咋还有特殊呢?搬好小板凳了吗?马上开始啦~

PART

1

变量也可以指向函数

函数调用---abs() 求绝对值

我们通过以上看出,abs就是函数名,也就是函数本身。现在我们来打印一下,看看结果来验证一下。

现在我们将函数的结果赋值给一个变量:

然后我们就可以将一个变量指向一个函数了。

通过以上我们得出的结论是: 1.函数本身也可以赋值给变量,换句话说,变量也可以指向一个函数 2.如果一个变量指向了一个函数,那么,则可以通过这个变量去调用这个函数【调用函数本身和使用变量调用结果一模一样】

最后我们再来应用一下:

代码语言:javascript
复制
def test():
    print("hello")
#正常调用
test()

t = test
#变量调用
t()

PART

2

函数名是变量

函数名其实就是指向函数的变量

代码语言:javascript
复制
#abs()   abs看成变量,它指向一个可以计算绝对值的函数

#错误演示:
#abs = 10

#print(abs(-10))   #TypeError

PART

3

传入函数

变量可以指向函数,函数的参数能够接受变量

代码语言:javascript
复制
def test(num):
    pass

n = 100
test(n)
一个函数接收另一个函数作为参数,这种函数被称为高阶函数
def add(x,y,f):  #f = abs
#f则可以被当成函数来进行调用
    return f(x) + f(y)

print(add(-10,20,abs))  #30

我们现在来剖析一下这个过程,看看高阶函数怎么运算的,看看推导的过程

代码语言:javascript
复制
"""
推导过程
x = -10
y = 20
f = abs
f(x) + f(y) ----->abs(-10) + abs(20) ----->30
"""

我们再来实践运用一下,再来举个栗子:

代码语言:javascript
复制
def hello():
     print("hello")

def check(f):
     f()

check(hello) #-------> hello

相信大家已经看懂一个函数接收另一个函数作为参数的传入函数了,如上所示,我们将hello这个函数传入到了check这个函数的里面,然后通过调用check这个函数来继续调用hello函数执行函数。

第二趴:偏函数

又到了普及知识的时候了,大家快来接着收割了!所谓的偏函数就是当一个函数有很多参数时,调用者就需要提供多个参数。

首先我们需要导入模块:

代码语言:javascript
复制
#模块functools其中就有偏函数的功能
import functools
#函数的默认参数:设定参数的默认值【可以降低函数调用的难度】
def test(num1,num2=10):
           return num1 + num2
test(2,3)  #------>输出5,因为返回2+3
test(34)   #------>输出44,因为返回34+10

简洁明了的偏函数理解如下: 偏函数:对参数做一些控制的函数 偏函数一般不需要自己定义,直接使用

代码语言:javascript
复制
#int() 将字符串或者浮点型转换为整型,当传入字符串的时候,默认按照十进制进行输出
print(int("123"))   #123

#事实上,其实int()中还提供了一个额外的参数base,默认值为10
print(int("123",base=10))  #123

#如果传入base参数,则可以进行N进制的转换
print(int("12345",base=8))

#二进制
print(int("110",base=2))  #6

#如果有大量的数据需要按照二进制输出,则需要重复int("110",base=2),则封装函数
"""
def int2(x,base=2):
    return int(x,base)
print(int2("110"))
"""

如何创建一个偏函数: 参数一:需要创建偏函数的函数名 参数二:需要设定的默认值

代码语言:javascript
复制
#functools.partial;帮助我们创建一个偏函数,不需要自定义int2()
int2 = functools.partial(int,base=2)
print(int2("110"))  # 6

print(int2("101010")) # 42

print(int2("110",base=10))  #110

print(int("1001"))     # 1001
print((int2("1001")))  #9

总结:functools.partial的作用:当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数。 把一个函数的某些参数固定【设置默认值】,返回一个新的函数,则以后使用的时候就可以根本不同的需求调用不同的函数。

1

今天分享的内容就到这里啦~欢迎大家一起来探讨~~~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据山谷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档