Using A Node For Its Function

Hello All,

Looking through the forums and reading other posts, I sometimes see situations in a script where someone is using a node with no inputs for its function and the following nodes are still working. I have tried playing around with it and I am having trouble understanding the difference between using one set of nodes over another to do the same thing.

Could someone explain:

  1. The difference, on the list side, what is happening when you use a blank node for its function instead of just plugging in that node’s parameters?
  2. Where it would be more practical to use a node for its function instead of just using that node?

Applying a function is a similar concept to lacing or list levels. Your comparison here is actually a little unfair because you’re comparing the function against a node with lacing applied.

In the image below you can see the difference between the default state of the node (auto lacing and no list levels) and the function.


The List.Combine node won’t incorporate any lacing or list levels so you have to make an equal comparison against the node. Now you can see the difference between using the node and applying the function. This also proves the similarity to lacing and list levels. In most cases the three options are the same, however there are still some scenarios where list structure or logical functionality prevent lacing and list levels from producing the expected outcome. This can be a case for using List.Combine and an applied function instead.

To be honest, I don’t ever use applied functions. If I ever run into one of those rare scenarios I usually pivot to a different approach, typically something more robust like Python. Someone else may be able to give you some solid examples of when to use functions over lacing and list levels.

3 Likes

Gotcha, I have had issues with finding the “just right” way to lace some lists in my older graphs. This would add a few more tools to the tool box. I agree that sometimes its easier to lace things in python, I’m just not there yet. Though Dynamo has given me a drive to pick python back up.

1 Like

A few things

  1. Function passing is exponentially slower. And it is a larger exponent too. It should be avoided if possible.
  2. Function passing suppresses warnings. If you are expecting a warning (with really big coordinates in Civil 3D; or when a FilterByBoolMask could return an empty list, you may want to use function passing. Note that this is a double edged sword as it suppresses all warnings, so proceed with caution.
  3. Function passing suppresses element binding in Revit (not sure about Civil 3D). This is also a double edged sword as it can produce duplicate instances in your model.
3 Likes