Julia函数进阶:匿名函数、函数复合、管道计算

news2026/4/2 3:07:10

文章目录

    • 可变参数
    • 匿名函数
    • 函数式
    • 函数复合

Julia系列:编程初步🔥数组🔥元组、字典、集合

Julia作为科学计算语言,对函数式编程提供了良好的支持,不仅支持匿名函数,还支持管道操作,并且为函数复合提供了运算符,十分强大且便利。

可变参数

有一些函数可以传入任意个数的参数,例如最大值函数

> max(1,2,3)
3

这种机制在Julia中由arg...实现,比如下面定义一个Max函数

function Max(arg...)
    M = -Inf
    for a in arg
        if a > M
            M = a
        end
    end
    return M
end

Max(3,1,4,5)    # 返回5

其逻辑是,把3,1,4,5映射为arg...,则arg自动变成[3,1,4,5],从而可以被迭代。

反过来说,...可以理解为把一个数组展开,效果如下

Max([3,1,4,5])  # 报错!!!
Max([3,1,4,5]...)   # 返回5,等价于Max(3,1,4,5)

匿名函数

目前我们讲了两种定义函数的方法,一种类似于f(x)=x^2,另一种则用function...end来实现,这两种写法均把一段映射和一个名字等同起来了。如果在创建函数时,并不声明函数的名字,那么就相当于创建了一个匿名函数,比如

function (x)
    x^2
end

这个就是匿名函数。当然,这个匿名函数毫无意义,因为没有名字就没法调用,但如果写成如下形式,就可以调用了。

f = function (x)
    x^2
end

f(5)    # 25

在这个过程中,函数名f和函数的实际内容x->x^2被分离开了,相当于把函数当作一个变量赋值给了f,这就是函数式编程的核心思想:函数也是一种变量。

匿名函数还有一种更为简单的写法,这种写法一般也叫做lambda表达式

f = x->x^2
f(5)    # 25

事情到了这个地步,量变也就引起了质变,匿名函数支持一种更加玄幻的写法,即不通过函数名,直接调用

(x->x^2)(5) # 返回25

函数式

函数既然可以被赋值,那么也自然可以作为参数在另一个函数中传递,比如下面写一个函数生成器,用以生成N次方函数

function gen(N)
    x->x^N
end

其输入是一个整数,输出为一个函数,下面测试一下

e5 = gen(5)
e5(3)   # 返回243,即3的5次方

此外,Julia提供了Lisp家族的书写风格,即可以把所有的二元运算改写成函数的形式,示例如下

+(1,2,3)   # 6
*(2, +(3, 5))   # 16, 即2*(3+5)

函数复合

Julia还提供了Ocaml家族的链式风格,用以完成函数复合,比如下面的表达式用于求1,2,3,4,5的均方根

[1:5;] |> (x->x.^2) |> (x->sum(x)/length(x)) |> sqrt 

其中经过三层管道

  1. 对每个元素求平方
  2. 取平均值,由于Base中不提供平均值函数,所以用sum和length自己做了一个
  3. 开根号

管道起到的作用其实是函数的复合,Julia为函数复合提供了运算符,在命令行中可输入\circ然后按下tab键即可,有了这个就可以将上面的三个函数合在一起了,但需要注意,其书写顺序和管道操作|>正好相反,对于f∘g∘h(x)来说,其运算顺序为f(g(h(x))),而对应的管道计算应该表示为x|> h |> g |> f

std = sqrt ∘ (x->sum(x)/length(x))(x->x.^2) 
std([1,2,3,4,5])    # 3.3166247903554

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1241222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电线电缆行业生产管理怎么数字化?

行业介绍 随着市场环境的变化和现代生产管理理念的不断更新,电缆的生产模式也在发生转变,批量小,规格多,交期短的新型制造需求逐年上升,所以企业车间管理的重要性越发凸显,作为企业良性运营的关键&#xf…

MySQL--慢查询(一)

1. 查看慢查询日志是否开启 show variables like slow_query%; show variables like slow_query_log; 参数说明: 1、slow_query_log:这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。 2、long_query_time:当SQL语句执行…

汇编-PUSHFD和POPFD标志寄存器值压栈和出栈

PUSHFD指令将32位EFLAGS寄存器内容压入堆栈, 而POPFD指令则将栈顶单元内容弹出到EFLAGS寄存器 格式:

【开源】基于Vue和SpringBoot的学校热点新闻推送系统

项目编号: S 047 ,文末获取源码。 \color{red}{项目编号:S047,文末获取源码。} 项目编号:S047,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新…

opencv- CLAHE 有限对比适应性直方图均衡化

CLAHE(Contrast Limited Adaptive Histogram Equalization)是一种对比度有限的自适应直方图均衡化技术,它能够提高图像的对比度而又避免过度增强噪声。 在OpenCV中,cv2.createCLAHE() 函数用于创建CLAHE对象,然后可以…

MYSQL索引使用注意事项

索引使用注意事项: 1.索引列运算 不要在索引列上进行运算操作,否则索引将失效; 2.字符串不加引号 字符串类型使用时,不加引号,否则索引将失效; 3.模糊查询 如果仅仅是尾部模糊匹配,索引将不会失…

P4 C++ 条件与分支(if)

前言 今天我们来看看条件语句,换句话说,也就是 if 语句、if else 和 else if 等等这写语句。 我知道大家基本上已经非常了解 if 语句和所有 C 中的分支语句,但我还是鼓励你们继续看完这一讲,这里可能包含一些新东西。我们还会深入…

什么是搜索相关性?AI如何驱动搜索相关性?

训练数据驱动机器学习,机器学习促进丰富的人机交互体验。在快速迭代的互联网时代,我们不断被各种广告铺盖,甚至经常细思极恐,“天呐,小红书怎么知道我面膜没了。”这都是算法和机器学习的鬼斧神工洞察着用户的搜索意图…

今年嵌入式行情这么差吗?学了三年至今无面?

先不说嵌入式行情,目前来看,我感觉是整体的行情都不太好。 之前郭嘉公布的失业率,后来停止公布了,至于为什么,这里就不说了吧。 此处省略N个字,下面说说我身边的情况,可见一斑。 先说公司裁员 我…

Linux基础命令3

移动,剪切文件 普通文件的移动剪切 现在在这儿 上图中,mv y.x ./tmp的意思,就是将当前路径下的y.x文件进行剪切,然后放到路径为当前路径下的tmp目录文件夹里面 操作完成后可以cd tmp,ls看到y.x文件已经在里面了 现在…

DolphinDB 浙商银行 | 第二期现场培训圆满结束

自 DolphinDB 高级工程师计划开展以来,客户们纷纷响应,除了定期收看我们每周三开设的线上公开课外,也有部分客户报名参加了 “总部工程师培训计划” 。 上周,我们迎来了总部培训的第二期学员:来自浙商银行的4位策略研…

Cookie与Session

文章目录 Cookie的介绍Cookie的由来什么是CookieCookie原理Cookie覆盖浏览器查看Cookie 在Django中操作Cookie设置Cookie查询浏览器携带的Cookie删除Cookie Cookie校验登录session Cookie的介绍 Cookie的由来 首先我们都应该明白HTTP协议是无连接的。 无状态的意思是每次请求…

联想拯救者Lenovo Legion R9000K 2021H(82N6)原装出厂Windows10/Win11系统ISO镜像

链接:https://pan.baidu.com/s/13NkeCXNdV0Ib5eeRnZUeAQ?pwdnlr7 提取码:nlr7 拯救者笔记本电脑原厂WIN系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文…

《数据仓库入门实践》

前言: 1、问什么要写这篇博客? 随着自己在数仓岗位工作的年限增加,对数仓的理解和认知也在发生着变化 所有用这篇博客来记录工作中用到的知识点与经验 2、这篇博客主要记录了哪些内容? 在日常工作中,发现刚接触不久数仓…

故障识别:CNN-BiLSTM-SelfAttention时空特征融合多头自注意力机制的故障识别程序,数据由Excel导入,直接运行!

适用平台:Matlab2023版及以上 本程序参考中文EI期刊《基于CNN-BiLSTM 的滚动轴承变工况故障诊断方法法》,程序注释清晰,干货满满,下面对文章和程序做简要介绍。 在CNN-BiLSTM-SelfAttention故障识别模型中,结合了卷积…

Vue中的$nextTick

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中的$nextTick 目录 🐋Vue中的$nextTick有什么作用? 🐋一、…

易点易动设备管理系统:提升企业设备维修效率的工具

在现代企业运营中,设备的正常运行和及时维修至关重要。然而,传统的设备维修管理方法往往效率低下、易出错,给企业带来了不小的困扰。为了解决这一问题,易点易动设备管理系统应运而生。作为一款先进的智能化系统,易点易…

绝地求生:PUBG全新强化比赛验证系统即将上线,外挂的末日要来了?

就在之前官博发布了一则公告 将在未来的更新中上线强化版的比赛验证系统 具体的变更内容为:从原本的SMS验证(短信验证)变成了ARS验证(语音验证码验证)。看起来好像跟原本的验证方式没有太大区别。不过很多黑号他们是没…

3分钟使用 WebSocket 搭建属于自己的聊天室(WebSocket 原理、应用解析)

文章目录 WebSocket 的由来WebSocket 是什么WebSocket 优缺点优点缺点 WebSocket 适用场景主流浏览器对 WebSocket 的兼容性WebSocket 通信过程以及原理建立连接具体过程示例Sec-WebSocket-KeySec-WebSocket-Extensions 数据通信数据帧帧头(Frame Header&#xff09…

Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像处理方案FPGA图像缩放方案自己写的HLS图像缩放方案 3、设计思路详解Video Processing Subsystem 介绍 4、工程代码详解PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项…