# How to pass NamedTuples as arguments to a function?

**URL:** <https://discourse.julialang.org/t/how-to-pass-namedtuples-as-arguments-to-a-function/34911>\
**Category:** New to Julia\
**Tags:** argument, namedtuple, functions\
**Created:** [February 20, 2020, 3:36pm UTC](https://discourse.julialang.org/t/how-to-pass-namedtuples-as-arguments-to-a-function/34911 "2020-02-20T15:36:09Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Elmer\_Cusipuma](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elmer_cusipuma/32/11958_2.png) [@Elmer\_Cusipuma](https://discourse.julialang.org/u/Elmer_Cusipuma)\
**Post date:** [February 20, 2020, 3:36pm UTC](https://discourse.julialang.org/t/how-to-pass-namedtuples-as-arguments-to-a-function/34911/1 "2020-02-20T15:36:10Z")

</div>

I have the following function defined.  
`f(a::Int64,r::Float64,q::Float64,p::Int64) = a + r + q + p`

```julia
t1 = (a=1,c=3,r=5.3)
t2 = (d=3,q=6.2,p=8)

```

How do I pass the namedtuples as function arguments?  
e.g.  
`_f(t1,t2) = f(a,r,q,p)`  
Desired output:  
`_f(a=1,c=3,r=5.3,d=3,q=6.2,p=8) = f(a,r,q,p)`

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [February 20, 2020, 3:40pm UTC](https://discourse.julialang.org/t/how-to-pass-namedtuples-as-arguments-to-a-function/34911/2 "2020-02-20T15:40:00Z")

</div>

Define `f` with keyword arguments and splat after `;`.

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [February 20, 2020, 3:55pm UTC](https://discourse.julialang.org/t/how-to-pass-namedtuples-as-arguments-to-a-function/34911/3 "2020-02-20T15:55:10Z")

</div>

But wouldn’t this fail in the above given that the named tuple includes names that aren’t kwargs?

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [February 20, 2020, 4:07pm UTC](https://discourse.julialang.org/t/how-to-pass-namedtuples-as-arguments-to-a-function/34911/4 "2020-02-20T16:07:07Z")

</div>

One can always do some version of

```julia
_f(t1, t2) = f(t1.a, t1.r, t2.q, t2.p)

```

but generally it is a somewhat brittle design (and no, I would not use introspection to extract the argument names for `f`).

Just to clarify: I was suggesting

```julia
f(; a::Int64, r::Float64, q::Float64, p::Int64, _...) = a + r + q + p
f(; merge(t1, t2)...)

```

I assume that this is for quick prototyping — for everything else I would recommend putting parameters in `struct`s, and using

> **[GitHub - mauro3/Parameters.jl: Types with default field values, keyword...](https://github.com/mauro3/Parameters.jl)**
>
> Types with default field values, keyword constructors and (un-)pack macros - GitHub - mauro3/Parameters.jl: Types with default field values, keyword constructors and (un-)pack macros

---

<div class="post-metadata">

**Author:** ![Jaap\_Haitsma](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jaap_haitsma/32/32965_2.png) [@Jaap\_Haitsma](https://discourse.julialang.org/u/Jaap_Haitsma)\
**Post date:** [January 31, 2022, 5:47pm UTC](https://discourse.julialang.org/t/how-to-pass-namedtuples-as-arguments-to-a-function/34911/5 "2022-01-31T17:47:22Z")

</div>

Aren’t you looking for something like this

```julia
t1 = (a=1,c=3,r=5.3)
t2 = (d=3,q=6.2,p=8)

function f(a1::@NamedTuple{a::Int64, c::Int64, r::Float64}, a2::@NamedTuple{d::Int64, q::Float64, p::Int64})::Float64
    return a1.a + a1.r + a2.q + a2.p
end
f(t1, t2)

```
