zoukankan      html  css  js  c++  java
  • Julia

    不定参数

    不定参数的函数也称变参函数

    函数的参数可以被定义成任意个

    可以在最后一个参数后紧跟省略号“...”来定义变参函数

    julia> bar(x, y, z...) = (x, y, z)
    bar (generic function with 1 method)
    

    对变参函数进行参数传递

    julia> bar(1)
    ERROR: MethodError: no method matching bar(::Int64)
    Closest candidates are:
      bar(::Any, ::Any, ::Any...) at REPL[1]:1
    Stacktrace:
     [1] top-level scope at none:0
    
    julia> bar(1, 2)
    (1, 2, ())
    
    julia> bar(1, 2, 3)
    (1, 2, (3,))
    
    julia> bar(1, 2, 3, 4)
    (1, 2, (3, 4))
    
    julia> bar(1, 2, 3, 4, 5)
    (1, 2, (3, 4, 5))
    

    最前的两个参数 x,y 为普通的参数,需要对其进行传值,不然就报错了

    变量 z 是尾随的可迭代的参数集合,其参数个数为 0 或多个,返回的是一个多元组

    函数调用时,也可以使用“...”

    julia> bar(x, y, z...) = (x, y, z)
    bar (generic function with 1 method)
    
    julia> z = (3, 4)
    (3, 4)
    
    julia> bar(1, 2, z...)
    (1, 2, (3, 4))
    

    多元组的值完全按照变参函数的定义进行内插,也可以不完全遵守其函数定义来调用

    julia> bar(x, y, z...) = (x, y, z)
    bar (generic function with 1 method)
    
    julia> z = (2, 3, 4)
    (2, 3, 4)
    
    julia> bar(1, z...)
    (1, 2, (3, 4))
    
    julia> z = (1, 2, 3, 4)
    (1, 2, 3, 4)
    
    julia> bar(z...)
    (1, 2, (3, 4))
    

    被内插的对象也可以不是多元组

    julia> bar(x, y, z...) = (x, y, z)
    bar (generic function with 1 method)
    
    julia> z = [3, 4]
    2-element Array{Int64,1}:
     3
     4
    
    julia> bar(1, 2, z...)
    (1, 2, (3, 4))
    
    julia> z = [2, 3, 4]
    3-element Array{Int64,1}:
     2
     3
     4
    
    julia> bar(1, z...)
    (1, 2, (3, 4))
    
    julia> z = [1, 2, 3, 4]
    4-element Array{Int64,1}:
     1
     2
     3
     4
    
    julia> bar(z...)
    (1, 2, (3, 4))
    

    可选参数

    函数的参数可以设置默认值

    julia> function f(x, y=3)
               x + y
           end
    f (generic function with 2 methods)
    
    julia> f(4)
    7
    
    julia> f(4, 5)
    9
    

    定义了一个函数 f() ,有两个参数,一个是参数 x,一个是默认值为 3 的参数 y

    调用该函数的时候,如果只传入一个值,则这个值赋给参数 x,参数 y 为默认值 3

    如果传入两个值,则第一个值赋给参数 x,第二个值赋给参数 y,覆盖了默认值 3

    关键字参数

    使用关键字参数的函数,在函数签名中使用分号来定义

    julia> function f(name, age; sex="male", country="jp")
               println(name)
               println(age)
               println(sex)
               println(country)
           end
    f (generic function with 1 method)
    
    julia> f("jack", 23)
    jack
    23
    male
    jp
    
    julia> f("jack", country="us",22, sex="female")
    jack
    22
    female
    us
    
    julia> f("jack", country="us", sex="female", 34)
    jack
    34
    female
    us
    

    额外的关键字参数,可以像变参函数中一样,使用“...”来匹配

    function f(x; y=0, args...)
        ###
    end
    

    在函数 f 内部, args 可以是 (key,value) 多元组的集合,其中 key 是符号

    可以在函数调用时使用分号来传递这个集合,如 f(x, z=1; args...),这种情况下也可以使用字典

    关键字参数的默认值仅在必要的时候从左至右地传值(当对应的关键字参数没有被传递),所以默认的(关键字参数的)表达式可以调用在它之前的关键字参数

    默认值的求值作用域

    可选参数和关键字参数的区别在于它们的默认值是怎样被求值的

    当可选的参数被求值时,只有在它之前的的参数在作用域之内

    当关键字参数的默认值被计算时, 所有的参数都是在作用域之内

    function f(x, a=b, b=1)
        ###
    end
    

    在 a=b 中的 b 指的是该函数的作用域之外的 b ,而不是接下来的参数 b

  • 相关阅读:
    CENTOS7下安装REDIS
    金融量化之tushare模块的使用
    fiddler抓包出现错误 creation of the root certificate was not successful
    matplotlib学习
    Android-消息处理学习总结(Handler,Looper)
    Android-View的绘制源码学习总结
    数据库练习
    编译原理实验一
    图形学
    资源分配(分组背包)
  • 原文地址:https://www.cnblogs.com/sch01ar/p/9508434.html
Copyright © 2011-2022 走看看