Python 的元组与数组类似,都是有序的元素集合,不同之处在于元组的元素不能修改。

另外元组使用小括号 (...),数组使用方括号 [...]。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可,数组中的很多函数也可以在元组中使用。

如下实例:

实例

julia> tupl=(5,10,15,20,25,30)   # 创建一个元组
 (5, 10, 15, 20, 25, 30)

 julia> tupl
 (5, 10, 15, 20, 25, 30)

 julia> tupl[3:end]          # 输出第三个到最后一个元素的元组
 (15, 20, 25, 30)

 julia> tupl = ((1,2),(3,4))   # 创建二维元组
 ((1, 2), (3, 4))

 julia> tupl[1]      # 访问二维元组元素,输出第一维元组
 (1, 2)

 julia> tupl[1][2]    # 访问二维元组元素,输出第一维元组的第二个元素
 2

元组的元素是不能修改,如果我们尝试修改它就回报错:

实例

julia> tupl2=(1,2,3,4)
 (1, 2, 3, 4)

 julia> tupl2[2]=0
 ERROR: MethodError: no method matching setindex!(::NTuple{4, Int64}, ::Int64, ::Int64)
 Stacktrace:
  [1] top-level scope
    @ REPL[8]:1

元组命名

我们可以为元组命名,从而可以更方便的访问它。

以下列出了几种不同元组的命名方式。

1、元组中的键(key)和值(value)分开命名

元组中的键(key)和值(value)可以分开独立命名,实例如下:

实例

julia> names_shape = (:corner1, :corner2)
 (:corner1, :corner2)

 julia> values_shape = ((100, 100), (200, 200))
 ((100, 100), (200, 200))

 julia> shape_item2 = NamedTuple{names_shape}(values_shape)
 (corner1 = (100, 100), corner2 = (200, 200))

我们可以使用 . 点号来访问元组:

实例

julia> shape_item2.corner1
 (100, 100)

 julia> shape_item2.corner2
 (200, 200)

2、键(key)和值(value)同时在一个元组中

键(key)和值(value)可以同时在一个元组中,实例如下:

实例

julia> shape_item = (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))
 (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

我们可以使用 . 点号来访问元组:

实例

julia> shape_item.corner1
 (1, 1)

 julia> shape_item.corner2
 (-1, -1)

 julia> shape_item.center
 (0, 0)

 julia> (shape_item.center,shape_item.corner2)
 ((0, 0), (-1, -1))

我们还可以像使用普通元组一样访问所有值,如下所示:

实例

julia> c1, c2, center = shape_item
 (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

 julia> c1
 (1, 1)

3、合并两个已命名的元组

我们可以使用 merge() 函数来合并两个已命名的元组,实例如下:

实例

julia> colors_shape = (top = "red", bottom = "green")
 (top = "red", bottom = "green")

 julia> shape_item = (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))
 (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

 julia> merge(shape_item, colors_shape)
 (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0), top = "red", bottom = "green")

元组作为函数参数

以下实例我们创建一个 testFunc 函数,并将元组 options 作为参数传入:

实例:test.jl 文件代码

# 创建函数
 function testFunc(x, y, z; a=10, b=20, c=30)
     println("x = $x, y = $y, z = $z; a = $a, b = $b, c = $c")
  end

 # 创建元组
  options = (b = 200, c = 300)
  
 # 执行函数,元组作为参数传入
  testFunc(1, 2, 3; options...)

使用 julia 命令执行以上文件,输出结果为:


$ julia test.jl
x = 1, y = 2, z = 3; a = 10, b = 200, c = 300


如果指定的参数在元组后面,则会覆盖元组中已有的参数:

实例

# 创建函数
 function testFunc(x, y, z; a=10, b=20, c=30)
     println("x = $x, y = $y, z = $z; a = $a, b = $b, c = $c")
  end

 # 创建元组
  options = (b = 200, c = 300)

 # 执行函数,元组作为参数传入,指定参数在元组前,不会覆盖
 testFunc(1, 2, 3; b = 1000_000, options...)

 # 执行函数,元组作为参数传入,指定参数在元组后,会覆盖
 testFunc(1, 2, 3; options..., b= 1000_000)

使用 julia 命令执行以上文件,输出结果为:

$ julia test.jl
x = 1, y = 2, z = 3; a = 10, b = 200, c = 300
x = 1, y = 2, z = 3; a = 10, b = 1000000, c = 300