<jupyter_start><jupyter_text>Creating a FunctionIn Python a function is defined using the def keyword:<jupyter_code>def my_function():
  print("Hello from a function")<jupyter_output><empty_output><jupyter_text>Calling a FunctionTo call a function, use the function name followed by parenthesis:<jupyter_code>def my_function():
  print("Hello from a function")

my_function()<jupyter_output><empty_output><jupyter_text>ArgumentsInformation can be passed into functions as arguments.Arguments are specified after the function name, inside the parentheses. You can add as many arguments as you want, just separate them with a comma.The following example has a function with one argument (fname). When the function is called, we pass along a first name, which is used inside the function to print the full name:<jupyter_code>def my_function(fname):
  print(fname + " Refsnes")

my_function("Emil")
my_function("Tobias")
my_function("Linus")<jupyter_output><empty_output><jupyter_text>Number of ArgumentsBy default, a function must be called with the correct number of arguments. Meaning that if your function expects 2 arguments, you have to call the function with 2 arguments, not more, and not less.<jupyter_code>def my_function(fname, lname):
  print(fname + " " + lname)

my_function("Emil", "Refsnes")<jupyter_output><empty_output><jupyter_text>If you try to call the function with 1 or 3 arguments, you will get an error:<jupyter_code>def my_function(fname, lname):
  print(fname + " " + lname)

my_function("Emil")<jupyter_output><empty_output><jupyter_text>Arbitrary Arguments, *argsIf you do not know how many arguments that will be passed into your function, add a * before the parameter name in the function definition.This way the function will receive a tuple of arguments, and can access the items accordingly: If the number of arguments is unknown, add a * before the parameter name:<jupyter_code>def my_function(*kids):
  print("The youngest child is " + kids[2])

my_function("Emil", "Tobias", "Linus")<jupyter_output><empty_output><jupyter_text>Keyword ArgumentsYou can also send arguments with the key = value syntax.This way the order of the arguments does not matter.<jupyter_code>def my_function(child3, child2, child1):
  print("The youngest child is " + child3)

my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")<jupyter_output><empty_output><jupyter_text>Arbitrary Keyword Arguments, **kwargsIf you do not know how many keyword arguments that will be passed into your function, add two asterisk: ** before the parameter name in the function definition.This way the function will receive a dictionary of arguments, and can access the items accordingly: If the number of keyword arguments is unknown, add a double ** before the parameter name:<jupyter_code>def my_function(**kid):
  print("His last name is " + kid["lname"])

my_function(fname = "Tobias", lname = "Refsnes")<jupyter_output><empty_output><jupyter_text>Default Parameter ValueThe following example shows how to use a default parameter value.If we call the function without argument, it uses the default value:<jupyter_code>def my_function(country = "Norway"):
  print("I am from " + country)

my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")<jupyter_output><empty_output><jupyter_text>Passing a List as an ArgumentYou can send any data types of argument to a function (string, number, list, dictionary etc.), and it will be treated as the same data type inside the function.E.g. if you send a List as an argument, it will still be a List when it reaches the function:<jupyter_code>def my_function(food):
  for x in food:
    print(x)

fruits = ["apple", "banana", "cherry"]

my_function(fruits)<jupyter_output><empty_output><jupyter_text>Return ValuesTo let a function return a value, use the return statement:<jupyter_code>def my_function(x):
  return 5 * x

print(my_function(3))
print(my_function(5))
print(my_function(9))<jupyter_output><empty_output><jupyter_text>The pass Statementfunction definitions cannot be empty, but if you for some reason have a function definition with no content, put in the pass statement to avoid getting an error.<jupyter_code>def myfunction():
  pass<jupyter_output><empty_output><jupyter_text>RecursionPython also accepts function recursion, which means a defined function can call itself.Recursion is a common mathematical and programming concept. It means that a function calls itself. This has the benefit of meaning that you can loop through data to reach a result.The developer should be very careful with recursion as it can be quite easy to slip into writing a function which never terminates, or one that uses excess amounts of memory or processor power. However, when written correctly recursion can be a very efficient and mathematically-elegant approach to programming.In this example, tri_recursion() is a function that we have defined to call itself ("recurse"). We use the k variable as the data, which decrements (-1) every time we recurse. The recursion ends when the condition is not greater than 0 (i.e. when it is 0).To a new developer it can take some time to work out how exactly this works, best way to find out is by testing and modifying it.<jupyter_code>def tri_recursion(k):
  if(k > 0):
    result = k + tri_recursion(k - 1)
    print(result)
  else:
    result = 0
  return result

print("\n\nRecursion Example Results")
tri_recursion(6)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07797913234486546, 'fraction_numerical': 0.004210140948196961, 'mean_word_length': 5.996158770806658, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 54, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '115612', 'license': 'MIT', 'n_tokens_mistral': 1595, 'n_tokens_neox': 1559, 'n_words': 655, 'path': 'Tuesday/functions.ipynb', 'repo_name': 'JSJeong-me/KOSA-Python_Algorithm', 'size': '5463'}