变量
- Julia允许重新定义内置常量和函数的值,前提是该常量或函数没有被引用过。
- 命名规范
- 变量的名字采用小写。
- 用下划线(
_
)分隔名字中的单词,但是不鼓励使用下划线, 除非在不使用下划线时名字会非常难读。 - 类型(Type)和模块(Module)的名字使用大写字母开头,并且用大写字母 而不是用下划线分隔单词。
- 函数(Function)和宏(Macro)的名字使用小写,不使用下划线。
- 会对输入参数进行更改的函数要使用
!
结尾。这些函数有时叫做 “mutating” 或 “in-place” 函数,因为它们在被调用后,不仅仅会返回一些值 还会更改输入参数的内容。 #### 数值类型
- 字面量和原始数值类型
- 字面量(numeric literal):整数和浮点数在代码中作为立即数(
1.0
,1
的显示表示)时称作数值的字面量。 - 原始数值类型(numeric primitive):数值的内置表示(内存中二进制表示)。
- 字面量(numeric literal):整数和浮点数在代码中作为立即数(
- 无符号整数
0b
/0o
/0x
前缀,以2/8/16进制输入输出。- 当字面量不是开头全是
0
时,它们二进制数据项的位数会是最少需要的位数。 - 当开头都是
0
时,位数取决于一个字面量需要的最少位数,这里的字面量指的是一个有着同样长度但开头都为1
的数。 - 无符号数前加
-
号,产生补码数。
- 可以用下划线作为数字的分隔符。
julia> 10_000, 0.000_000_005, 0xdead_beef, 0b1011_0010
(10000, 5.0e-9, 0xdeadbeef, 0xb2)
特殊值:
Inf
/-Inf
/NaN
除
0
- 整数类型除
0
报错。 - 浮点数类型除
0
同数学。
- 整数类型除
字面量系数:变量直接跟在一个数值字面量后,暗指乘法。
2x^2 - 3x + 1
等价于2*x^2-3*x+1
,优先级同一元操作符。2^3x--->2^(3x)
,2x^3--->2*(x^3)
。- 也可以作用于括号:
2(x-1)
或者(x-1)x
,但是(x-1)(x-1)
或者x(x-1)
不行。
- 也可以作用于括号:
运算符
Dot
操作:每个二元运算符都有一个Dot
运算符对应,.^
与^
对应,将^
广播到数组上。- 将点运算符用于数值字面量可能会导致歧义。例如,
1.+x
到底是表示1. + x
还是1 .+ x?
这会令人疑惑。因此不允许使用这种语法,遇到这种情况时,必须明确地用空格消除歧义。
- 将点运算符用于数值字面量可能会导致歧义。例如,
julia> [1,2,3] .^ 3
3-element Array{Int64,1}:
1
8
27
#三者等价
a .^ b
(^).(a,b)
@. a^b
- 特殊数值比较
+0
<=-0
Inf
=Inf
,Inf
大于除了NaN
的所有数NaN
不等于、不小于且不大于任何数值,包括它自己(用==
时)isequal(NaN, NaN)
可以返回true
julia> isequal([1 NaN], [1 NaN])
true
julia> isequal(NaN, NaN32)
true
julia> -0.0 == 0.0
true
julia> isequal(-0.0, 0.0)
false
- 链式比较
julia> 1 < 2 < 3 != 5
true
注意链式比较的执行顺序:
julia> v(x) = (println(x); x)
v (generic function with 1 method)
julia> v(1) < v(2) <= v(3)
2
1
3
true
julia> v(1) > v(2) <= v(3)
2
1
false
数值转换
Julia 支持三种数值转换,它们在处理不精确转换上有所不同。
T(x)
和convert(T,x)
都会把x
转换为T
类型。- 如果
T
是浮点类型,转换的结果就是最近的可表示值,可能会是正负无穷大。 - 如果
T
为整数类型,当x
不为T
类型时,会触发InexactError
- 如果
x % T
将整数x
转换为整型T
,与x
模2^n
的结果一致,其中n
是T
的位数。换句话说,如果用二进制表示是被砍掉一部分的。舍入函数 接收一个
T
类型的可选参数。比如,round(Int,x)
是Int(round(x))
的简写版。
复数和有理数
- 全局常量
im
被绑定到复数\(i\) - 数学函数通常应用于实数就返回实数值,应用于复数就返回复数值。
julia> sqrt(-1)
ERROR: DomainError with -1.0:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
Stacktrace:
[...]
julia> sqrt(-1 + 0im)
0.0 + 1.0im
- 用变量构建复数时,建议用
complex
函数:complex(a, b)=a+b*im