julia-符号标识符Core.Symbol(第12讲)

2024-03-20 09:08

本文主要是介绍julia-符号标识符Core.Symbol(第12讲),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

符号标识符Core.Symbol1.1.定义:用于表示已解析julia代码(AST)中的标识符的对象类型。也经常用作名称或标签来标识实体(如作为字典键)
1.2.说明:能够将自定义的语言代码表示为语言本身的数据结构;Symbol是不可变;是不支持对字符进行迭代的“原子”或“标量”实体在表达式上下文中符号用于指示对变量的访问;当计算表达式时,在适当的范围内,符号将替换为绑定到该符号的值1.3.用途:符号用于表示元编程中的变量;可将赋值、函数调用 、文本表达式表示成符号
2.1.创建:# 用:语法符号名称必须是有效标识符:foo           # :foo# 有时需在参数周围加括号:以免在解析时产生歧义::(:)           # :(:):(::)          # :(::)#Symbol(x...) -> Symbol将参数字符串连接在一起来创建Symbol("foo")  # 构造函数创建:#:fooSymbol("x", 1) # :x1Symbol(:var,'_',"sym")# :var_sym2.2.比较::foo===Symbol("foo") # 高效-只能比较指针 true
2.3.计算:实例1:显示标签内容foo="hello",eval(:foo)#"hello"x = 42,eval(:x)       # 42实例2:更改标签内容sym = :foo# :foo eval(sym) #"hello"ex = :($sym = "world"; 1 + 2):(beginfoo = "world"1 + 2end)eval(ex)# 3foo     # "world"

 

实例3:通过字符串调用函数time()fn = "time"
Symbol(fn)#:timegetfield(Main, Symbol(fn))()# 1.580791892769e9 ,相当于调用 time() 函数
eval(Meta.parse("$fn()"))   # 1.591600693101e9  不安全
实例4:迭代递归动态调用函数fn = "deg2rad" # 将角度转为弧度# 为了获得最佳性能,必须使用常量绑定f
const f = getfield(Main, Symbol(fn))#进行const绑定function fast(n)t = 0.0for i = 1:nt += f(i)# 递归中使用endreturn t
end@time fast(10^6) # 第一次使用会执行JIT编译 0.001049 seconds
@time fast(10^6) # 第二次会更快            0.001006 seconds  #查看代码执行情况
@code_llvm fast(100000)
# ...
# ; ┌ @ math.jl:245 within `deg2rad'
# ...# 如需在多个地方动态指定函数将函数f作为参数传递:
function fast(f,n)t = 0.0for i = 1:nt += f(i)endreturn t
end@time fast(getfield(Main, Symbol(fn)), 10^6)# 0.001661 seconds (6 allocations: 192 bytes)
@time fast(getfield(Main, Symbol(fn)), 10^6)#0.001014 seconds (2 allocations: 32 bytes)

 

这篇关于julia-符号标识符Core.Symbol(第12讲)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828965

相关文章

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

jupyter在加载pkl文件时报错ModuleNotFoundError: No module named 'pandas.core.internals.managers'; '的解决方法

笔者当看到这个错误的时候一脸懵逼,在pycharm上正常运行的code 放在jupyter就不成了,于是就研究一翻。 一开始以为自己的pkl文件有问题,研究重点放在这里,最后发现不是。 然后取搜索pycharm和jupyter下的python的\Lib\site-packages\pandas\core\internals有什么不同 发现jupyter下没有pandas\core\intern

C#/.NET/.NET Core推荐学习路线文档文章

前言 专门为C#/.NET/.NET Core推荐学习路线&文档&文章提供的一个Issues,各位小伙伴可以把自己觉得不错的学习路线、文档、文章相关地址分享出来🤞。 https://github.com/YSGStudyHards/DotNetGuide/issues/10 🏷️C#/.NET/.NET Core优质学习资料 📚.NET 入门教程 📚

ASP.NET Core 入门教学十七 GraphQL入门指南

GraphQL 是一种用于 API 的查询语言,允许客户端请求所需的数据,并能够合并多个资源到一个请求中。在 ASP.NET Core 中使用 GraphQL 可以提供更灵活、高效和实用的数据查询方式。以下是 ASP.NET Core 中 GraphQL 的入门指南: 1. 安装必要的 NuGet 包 首先,你需要安装以下 NuGet 包: GraphQLGraphQL.Server.Tra

【流程图】流程图符号

1、常用符号 2、例子(胡乱画的)

有符号和无符号的转化

1.无符号转有符号 测试结果: 2.有符号转换为无符号数 测试结果: 其他

流程图符号速查:快速掌握流程图绘制要点

流程图是一种以图形化方式表示算法或过程的步骤和逻辑关系的图表,它通过使用一系列标准的符号和连接线来清晰地展示流程的顺序和决策点。这种表示方法不仅使得复杂的过程更加易于理解,而且也便于跟踪和优化。以下是对流程图的进一步扩写,包括其制作步骤、应用场景和一些实用技巧。流程图常常用来表示一些动态过程,通常会有一个“起点”, 可以有一个或多个终点,流程图可以直观、明确地表示动态过程从开始到结束的全部步骤,在

Hessian矩阵判定极值之MATLAB实现符号解

By WC 1.9 .2015 1.Hessian矩阵 其定义如下: 如果函数f在D区域内二阶连续可导,那么黑塞矩阵H(f) 在 D 内为对称矩阵。原因是:如果函数f连续,则二阶偏导数的求

【UE4源代码观察】观察Core模块

话题 Core模块是整个引擎中最核心的模块,在之前的博客【UE4源代码观察】可视化所有模块的依赖情况中有统计,它被983个模块引用,恐怕除了第三方的模块外基本所有模块都有引用。我想首先观察其中的内容,然后再做测试:将Core模块拷贝到之前【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程建立的空白工程中,看能否将它成功编译,理论上讲,“核心”不应再依赖太多其他的东西,所以我应该不会再需

Spark Core源码精读计划7 | Spark执行环境的初始化

推荐阅读 《Spark源码精度计划 | SparkConf》 《Spark Core源码精读计划 | SparkContext组件初始化》 《Spark Core源码精读计划3 | SparkContext辅助属性及后初始化》 《Spark Core源码精读计划4 | SparkContext提供的其他功能》 《Spark Core源码精读计划5 | 事件总线及ListenerBus》 《Spa