当前位置: 首页 > news >正文

昆明网站建设 昆明光硕友情链接检测

昆明网站建设 昆明光硕,友情链接检测,合肥房地产交易网,长沙雨花区建设局网站对于中级Python开发者来说,了解了Python的基础语法、库、方法,能够实现一些功能之后,进一步追求的就应该是写出优雅的代码了。 这里介绍一个很有趣的概念“柯里化”。 所谓柯里化(Currying)是把接受多个参数的函数变换…

对于中级Python开发者来说,了解了Python的基础语法、库、方法,能够实现一些功能之后,进一步追求的就应该是写出优雅的代码了。 这里介绍一个很有趣的概念“柯里化”。

所谓柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。
引自 百度百科

这里我们举一个例子:我们在初中的时候都学过自由落体,在不考虑风阻的情况下,物体在一定高度下落的时间是一定的。 计算公式是:时间 = 开平方(2 * 高度 / 重力加速度)

如果我们要用python实现这个函数

def fall_time(height)return math.sqrt(2 * height * 9.8)

但是实际上, 重力加速度G的值是随着纬度不同发生变化的。 我们中学的时候只是取了一个近似值。实际上当要求计算精度的时候, 赤道上应该是9.78,南北极是9.832。这中间可是差着0.5呢。

此时,我们有些同学觉得,这个简单,两个参数不就行了?于是就出现了如下方法:

def fall_time_with_ga(height, ga):return math.sqrt(2 * height * ga)

这样做虽然没问题, 但是写代码的时候参数太多了。 一旦你要计算多个数值的时候,就会出现如下的代码:

print(fall_time_with_ga(100, 9.80122))
print(fall_time_with_ga(200, 9.80122))
print(fall_time_with_ga(300, 9.80122))

还记得我们为什么学Python么?Python的重要特性之一就是优雅干净。为此田辛老师希望柯里化这个函数,降低函数的参数数量,这时候我们用到的内部函数的办法:

def fall_time_setup(ga:float):def fall_time(height:float):return math.sqrt(2 * height * ga)return fall_time

对于这个函数,相对来说调用的时候就简单多了。

beijing = fall_time_setup(9.80122)  # 首先设定重力加速度的值, 真正计算的时候只关心高度即可
print(beijing(100))
print(beijing(200))
print(beijing(300))

这样调用起来,思路就清晰多了。

那有些同学可能会说, 调用思路清晰了。 可是函数本身复杂了呀。 整个函数本来两行的,现在四行了,不优雅!!!

这里田辛老师就要说,用后一种方法函数体写成两行也没问题。

仔细观察改造后的这个函数。 fall_time这个内部函数的函数名是不是在调用的时候自始至终没有被使用过?我们是不是可以用一个匿名函数去取代它。 要知道,Python是支持lambda的呦~

lambda的语法是:lambda arguments : expression

于是,新的函数诞生了:

def fall_time_setup_bylambda(ga:float)->float:return lambda height : math.sqrt(2 * height * ga)

调用部分的代码,和刚才的调用一模一样。

OK,下面是前面所有的代码以及调用,可以直接保存 .py 文件看看效果。

# 如何在 Python 中使用“柯里化”编写干净且可重用的代码import mathdef fall_time(height: float) -> float:"""计算物体下落时间,强制按照北京的重力加速度设定:@param: height: 物体所处高度"""return math.sqrt(2 * height * 9.80122)print(fall_time(100))
print(fall_time(200))
print(fall_time(300))def fall_time_with_ga(height, ga):"""计算物体下落时间,考虑到重力加速发生变化,作为形参传入:@param: height: 物体所处高度"""return math.sqrt(2 * height * ga)print(fall_time_with_ga(100, 9.80122))
print(fall_time_with_ga(200, 9.80122))
print(fall_time_with_ga(300, 9.80122))def fall_time_setup(ga: float):"""计算物体下落时间,考虑到重力加速发生变化并且为了代码简洁,做了柯里化的处理:@param: height: 物体所处高度"""def fall_time(height: float):return math.sqrt(2 * height * ga)return fall_timebeijing = fall_time_setup(9.80122)  # 首先设定重力加速度的值, 真正计算的时候只关心高度即可
print(beijing(100))
print(beijing(200))
print(beijing(300))def fall_time_setup_bylambda(ga: float) -> float:"""计算物体下落时间,使用匿名函数"""return lambda height: math.sqrt(2 * height * ga)beijing = fall_time_setup_bylambda(9.80122)
print(beijing(100))
print(beijing(200))
print(beijing(300))
http://www.mmbaike.com/news/94346.html

相关文章:

  • 怎样做网站搜索推广重庆百度seo排名
  • 北京做网站费用百度官方网址
  • 公众号做微网站吗营销推广费用预算表
  • 没有网站可以做淘宝客吗网络营销与直播电商是干什么的
  • 依兰县建设局网站软文广告是什么
  • 网站建立时间查询自媒体培训
  • 做网站需要买服务器吗爱站网影院
  • 广东省政府网站集约化平台建设天津百度优化
  • 空间业务建设网站品牌推广营销
  • 做营销型网站的公司信息流广告投放工作内容
  • 营销推广的主要方式seo定义
  • 事业单位网站建设方案什么是关键词
  • 政府网站建设和服务友情链接对网站的作用
  • 网站建设 仿站导购网站怎么推广
  • 同程网 网站模板百度指数下载手机版
  • 国外做gif的网站网络优化工程师为什么都说坑人
  • 丽水网站建设免费私人网站建设平台
  • 关于戒烟网站怎么做seo实战密码第三版pdf
  • 利用赞赏码做网站收款百度客服24小时人工电话
  • python做网站服务器操作系统网络公司网站建设
  • 雨岑信息科技有限公司做企业型网站做的怎么样_公司规模如何做网络推广的团队
  • 网站推广代运营多少钱北京自动网络营销推广
  • 怎么建设一个优秀的网站百度框架户开户渠道代理
  • 做俄罗斯外贸网站海外推广服务
  • 数据开放网站建设内容哈尔滨seo公司
  • 宝安高端网站设计怎么样北京有限公司
  • wordpress 关站今日关键词
  • 安徽省网站优化 seo和sem
  • 南京营销型网站制作seogw
  • 自贡做网站的公司seo快速排名外包