What is a closure in Python? Answer: A closure is a function object that has access to variables in its enclosing lexical scope, even when the function is called outside that scope. How is a closure created in Python? Answer: A closure is created by defining a nested function that references variables from the outer function's scope. What is the purpose of using closures in Python? Answer: Closures allow data encapsulation, provide a way to implement function factories, and can be used for maintaining state across multiple function calls. How do you define a closure in Python? Answer: Define an outer function that contains a nested function that references variables from the outer function, then return the nested function. What is the difference between a closure and a regular function in Python? Answer: A closure is a function object that remembers values in the enclosing scope, whereas a regular function does not retain any memory of variables from previous invocations. How does a closure retain the values of variables? Answer: When a closure is created, it keeps a reference to the variables in its enclosing scope, even if the enclosing function has finished executing. Can closures modify variables in their enclosing scope? Answer: Yes, closures have access to the variables in their enclosing scope and can modify them if they are mutable. How can you access variables from the enclosing scope within a closure? Answer: Variables from the enclosing scope can be accessed by referencing them directly within the closure's code. What is a free variable in a closure? Answer: A free variable is a variable that is referenced within a closure but is not defined within the closure itself. How does a closure differ from a global variable? Answer: A closure keeps the variables local to its enclosing scope, while a global variable is accessible from anywhere in the program. Can you pass arguments to a closure in Python? Answer: Yes, closures can accept arguments just like regular functions. What happens when a closure is returned from its defining function? Answer: When a closure is returned, it maintains its access to the variables in the enclosing scope even after the enclosing function has finished executing. How can you check if a function is a closure in Python? Answer: You can check if a function is a closure by using the inspect.isclosure() function from the inspect module. Can you create a closure without using a nested function? Answer: No, a closure in Python requires a nested function to reference variables from the enclosing scope. Are closures used frequently in Python programming? Answer: While closures can be powerful, they are not used as frequently as other language features in Python. Can a closure access variables defined in other closures? Answer: No, a closure can only access variables from its immediate enclosing scope, not variables from other closures. How does a closure help with data encapsulation? Answer: Closures allow you to encapsulate data by keeping it private within the scope of the closure, preventing direct access from outside. What is the lifespan of a closure in Python? Answer: The lifespan of a closure is determined by the lifespan of its defining function. Once the defining function has finished executing, the closure can still be invoked as long as it is referenced. Can a closure reference variables from multiple enclosing scopes? Answer: Yes, a closure can reference variables from multiple enclosing scopes as long as those scopes are in the chain of its lexical environments. How can you delete a closure in Python? Answer: You cannot explicitly delete a closure in Python.