惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Spread Privacy
Spread Privacy
H
Hacker News: Front Page
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
罗磊的独立博客
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
美团技术团队
Help Net Security
Help Net Security
The Hacker News
The Hacker News
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
The Register - Security
The Register - Security
IT之家
IT之家
WordPress大学
WordPress大学
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Help Net Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
NISL@THU
NISL@THU
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
B
Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
S
Security Affairs
小众软件
小众软件
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
A
Arctic Wolf
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence

谭升的博客

一封来自读者的信 【杂文】中美人工智能对比(一篇博人关注的软文) 【强化学习】2.2 行为评价方法(Action-value Methods) 【Hexo】Hexo下next主题valine强化版本的改造 【强化学习】2.1 k臂赌博机(k-armed bandits)问题 【强化学习】2.0 多臂赌博机 【Julia】整型和浮点型数字 【强化学习】1.6 本章总结、强化学习历史简述 【Julia】开始使用Julia 【Julia】Julia环境搭建(Mac,Windows,Linux) 【强化学习】 1.5 强化学习的一个扩展举例 【强化学习】 1.4.1 强化学习与优化方法 【Julia】Julia编程语言介绍 【信息论、推理与学习算法】本系列博客介绍 【强化学习】 1.4.0 “进化方法”和 “决策梯度方法” 概论 【强化学习】1.3 强化学习的基础元素 【强化学习】1-2 强化学习举例 【强化学习】1-1-4 强化学习和人工智能 【强化学习】1-1-3 强化学习基本框架
【Julia】变量
本文作者: 谭升 · 2018-10-02 · via 谭升的博客

Abstract: 本文介绍Julia变量的相关内容,包括Julia的变量命名,以及命名的惯用法则(命名风格)
Keywords: Julia变量,Julia变量名,Julia命名一般规则

如果Julia不是你的入门编程语言,那么对于编程语言中的变量应该已经习以为常,在C语言中,变量名对应于一个内存地址(需要声明变量类型)而在高级一些的语言中,比如python,变量名更抽象,他对应于一个值,或者可以理解为它存储了这个值,这个值可以是该语言允许的任何类型(不需要声明变量类型)。
Julia的变量属于后者,不需要声明变量类型,而是可以让你的合法变量名随时存储任何Julia变量类型的值。
如果Julia是你的第一门编程语言,那么你只要知道,变量名存储了一个变量值就可以了。
在交互模式下,我们进行一下操作,比如输入 x=10 后回车,就会输出10这个结果,接着你可以输入指令 x+1 回车,就会显示 10+1 的结果,如下:

# Assign the value 10 to the variable x
julia> x = 10
10

# Doing math with x's value
julia> x + 1
11

# Reassign x's value
julia> x = 1 + 1
2

# You can assign values of other types, like strings of text
julia> x = "Hello World!"
"Hello World!"

任何编译器解释器都不会关心这个变量叫什么名字,所有变量在解释器面前一视同仁,所以你不用担心你的变量名字不好听而影响程序执行效果。
接着再看几个例子(例子都来自Julia文档)

julia> x = 1.0
1.0

julia> y = -3
-3

julia> Z = "My string"
"My string"

julia> customary_phrase = "Hello world!"
"Hello world!"

julia> UniversalDeclarationOfHumanRightsStart = "人人生而自由,在尊严和权利上一律平等。"
"人人生而自由,在尊严和权利上一律平等。"

更厉害的是Julia的变量名不止局限于英文字符的组合,unicode字符通过 UTF-8 编码也可以成为变量,换句话说,希腊字母,中文字符,日文,韩文等这些都可以做变量名,这就厉害了,python 和c/c++ 是不行的:

julia> δ = 0.00001
1.0e-5

julia> 你好地球 = "Hello world"
"Hello world"

julia> 안녕하세요 = "Hello"
"Hello"

怎么样,可以用中文命名变量名了以后,你会在你的工程中使用中文命名你的变量名么? 注意到上面 $\delta$ 的同学们可能在想这个变量在实际中怎么使用呢?好消息,用latex就可以,当然只有部分编辑器或者IDE支持这个功能,Julia REPL 是支持的,上面的 $\delta$ 在Julia REPL的写法就是 \delta-*tab* ,如果你发现那个字符不知道怎么写,比如你看别人的代码中有个 $\zeta$ 不知道怎么写,你只需要在Julia REPL 中输入 ? 然后在后面粘贴那个字符即可。 有一些编程语言会为编译器或者编辑器定义一些常量以及函数,这些常量或函数一般不允许用户修改,但是Julia可以,如果你明确知道自己在做什么,那么这个操作可以帮助你的程序更好更符合你想象的方式进行,但是如果你还是个新手,建议不要随意修改内置常量或函数,因为你很有可能忘记自己修改过这个常量或函数,而在别的部分再次当做原始功能使用,就会造成很隐蔽的bug。

julia> pi = 3
3

julia> pi
3

julia> sqrt = 4
4

但是如果这个常量或函数先被使用,而你在之后尝试重新定义或者修改,那么Julia就会抛出错误:

julia> pi
π = 3.1415926535897...

julia> pi = 3
ERROR: cannot assign variable MathConstants.pi from module Main

julia> sqrt(100)
10.0

julia> sqrt = 4
ERROR: cannot assign variable Base.sqrt from module Main

Julia 变量命名规则

变量名的命名规则:

  1. 变量名以字母 A-Z or a-z,下划线,或者Unicode中大于00A0的部分 开头(更过详细的Unicode参考4)
  2. 像 + 这类操作符也是可以用作标识符的,但是这种用法非常特殊,比如再从新定义加法操作的时候,加法操作就是用(+) 来定义的,(+)=f 就是重新定义加法操作(更过详细的Unicode参考4)
  3. 语言内置的状态符是不可以用作变量名的,比如你不可把 if,else这类关键字用作变量名:
    julia> else = false
    ERROR: syntax: unexpected "else"
    
    julia> try = "No"
    ERROR: syntax: unexpected "="
  4. Unicode变量名的有一些注意细节,如果要大量使用,可以参考文档:https://docs.julialang.org/en/latest/manual/variables/

Julia 变量名的常用风格

命名风格不是语法内容,这些内容是一些常见的比较利于编程的习惯,如果你有自己的更好的习惯,也可以用你的方法来写,但是代码的作用一是为了驱动程序,得出我们想要的结果,第二则是让别人了解你的思想,如果大家都看不懂你的什么,那么这个代码其实是不成功的。
常见的命名风格有以下几条:

  1. 变量名采用小写字母
  2. 每个单词之间用 _ 分开,但一般不要使用,除非这个变量名特别长,且不好读。
  3. Types或者Modules的名字以大写字母开头,每个单词首字母大写,用驼峰形式代替下划线
  4. functions或者macros用小写形式,不要使用下划线。
  5. function如果要对其参数进行写的操作的话,函数名后面要加!,这种函数叫做 “变异函数”(mutating)或者“取代函数”(in-place)因为这种函数不只返回一个结果,还会在过程中修改参数的值。
  6. 更多编程风格可以参考https://docs.julialang.org/en/latest/manual/style-guide/

总结

本文介绍了Julia变量和简单的命名风格,好的编程风格是很重要的,无论对于编码还是调试。

Reference

  1. https://docs.julialang.org/en/latest/manual/variables/

原文地址: https://face2ai.com/Julia-Lang-3-Variables