\csnumgdef, from the etoolbox package (for you, loaded by biblatex) is defined as:
\newrobustcmd*{\csnumgdef}[1]{%
\expandafter\numgdef\csname#1\endcsname}
in terms of \numgdef which, in turn, is defined as:
\newrobustcmd*{\numgdef}[2]{%
\ifundef#1{\let#1\z@}{}%
\xdef#1{\the\numexpr#2}}
Let's walk an example step by step. Suppose you do \csnumgdef{foo}{1+1}. First, \csnumgdef takes one argument, foo, and does (the {1+1} is still there from the previous step, untouched):
\expandafter\numgdef\csname foo\endcsname{1+1}
The \expandafter skips over \numgdef and expands \csname. \csname builds a control sequence (thus the cs in the name of \csnumgdef) out of everything until the matching \endcsname, which is the argument foo. This becomes:
\numgdef\foo{1+1}
so you can conclude that \csnumgdef{foo} and \numgdef\foo are equivalent.
Now \numgdef expands, grabbing two arguments, \foo and 1+1:
\ifundef\foo{\let\foo\z@}{}%
\xdef\foo{\the\numexpr 1+1}
The \ifundef test checks if \foo is undefined, and does \let\foo\z@ if so, otherwise it does nothing.
Now for the good part: \xdef is equivalent to \global\edef (and now you see that the g in (cs)numgdef stands for \global), which will make a global assignment, and \edef will expand everything inside the definition. It will expand \the, which will trigger \numexpr. \numexpr will then evaluate the integer expression following it (1+1) and leave the result there. After the expansion, you have (sort of):
\global\def\foo{2}
and now things go as usual, and now \foo expands to 2.
In short, \csnumgdef{<name>}{<intexpr>} will evaluate the integer expression <intexpr> and will store it in \<name>. The version without cs in the name takes a control sequence as argument (as opposed to a control sequence name): \numgdef\<name>{<intexpr>}, and the version without g does a local assignment.
These naming conventions are useful (especially when followed correctly ;-) because you don't need to look up the definition of some command to find ouy what it does. If you know that \numdef\foo{1+1} does, then it's not hard to deduce what \csnumdef or \numgdef do (given, of course, you know these conventions).
expl3's conventions define that a function that contains set in its name does an assignment (much like the def in \numdef). If the function is gset then such assignment is global. Knowing that, it's fairly easy to guess what \int_set:Nn do: it's (almost1) the same as \numdef :-)
If you know that, then \int_gset:Nn is easy.
But what about the cs version, you ask. This one is denoted in the argument specification. Instead of a single Normal argument, the argument is a csname. \int_set:cn (equivalent of \csnumdef) and \int_gset:cn (equivalent of \csnumgdef) do exactly that :-)
1 \numdef stores the number in a macro, while \int_set:Nn stores it in a count register.
\csnumgdeffrom? (csstands for "control sequence".\csname,\csnumgdef,\documentclass,\begin, are all examples of control sequences.gpossibly means "global", for a global assignment) – Phelype Oleinik Nov 19 '19 at 23:44csnumgdefin their manuals. Thanks for the explanation ofcsandg. – user001 Nov 19 '19 at 23:48\csname,\csuse, and\csdef), only\csnameis a TeX primitive (\csname something\endcsnameexpands to\something). The other two (and possibly more\cs<whatever>are macros which (usually) use\csnameto make a control sequence of the argument.\csuse{<arg>}is just\csname <arg>\endcsname.\csdef{<name>}{<definition>}does\def\<name>{<definition>}. – Phelype Oleinik Nov 20 '19 at 00:11cscommands are macros and which are TeX primitives was most helpful. – user001 Nov 20 '19 at 00:13\show. If you do\show\csname, TeX will print> \csname=\csnameto the terminal, meaning it's a primitive. If you do\show\csdef, TeX will print:> \csdef=\protected macro: #1->\expandafter \def \csname #1\endcsname. – Phelype Oleinik Nov 20 '19 at 00:40\show. – user001 Nov 20 '19 at 00:48