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

相关文章

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

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

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: 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.有符号转换为无符号数 测试结果: 其他

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

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