## Understanding Python closures should be the best example

Tianyuan prodigal son 2020-11-13 09:06:07
understanding python closures best example

As a programming language feature , Closures are supported by many programming languages ,Python No exception . So called closure , stay Python A function that carries one or more free quantities . The free quantity of a closure function is not a parameter of the function , It's the environment variable when the function is generated . Once the closure is generated , Free variables are bound to functions , Even if you leave the environment that created it , The amount of freedom is still valid . To sum up , The concept of closure has three main points .

• Closure is a function
• Closure functions are generated by other code
• The closure function carries information about the generation environment

There is a good example to help beginners understand closures . We know , Almost all the computing modules , such as Python Built in standard math module math, The logarithmic function provided can only be calculated with 2 Bottom 、 With e At the bottom and with 10 Three logarithms at the base .

>>> import math
>>> math.log(math.e) # Return to e Bottom e The logarithmic
1.0
>>> math.log2(4) # Return to 2 Bottom 4 The logarithmic
2.0
>>> math.log10(1000) # Return to 10 Bottom 1000 The logarithmic
3.0


If you want to calculate with a Bottom b The logarithmic , You need to use the logarithmic bottoming formula .

l o g a b = l o g 10 b l o g 10 a log_ab=\frac{log_{10}b}{log_{10}a}

>>> def glog(b, a): # Return to a Bottom b The logarithmic
return math.log(b)/math.log(a)
>>> glog(25, 5) # # Return to 5 Bottom 25 The logarithmic
2.0


Of course, we can define a function like the code above glog(), Calculate logarithms based on any number , But you always have to enter two parameters at a time , and math Modular log()、log2()、log10() Function styles are inconsistent . If you use closures , Can generate and math The style of logarithmic functions is consistent .

>>> def log_factory(n): # Define a closure generating function
def log_n(x): # Generating closures
return math.log(x)/math.log(n) # The closure carries the environment parameters n
return log_n # Back to closure
>>> log5 = log_factory(5) # Generating closures with closure generators
>>> log7 = log_factory(7) # Generating closures with closure generators
>>> log5(25) # The free quantity carried by the closure is 5
2.0
>>> log7(49) # The free quantity carried by the closure is 7
2.0


Above code , Firstly, a logarithmic function generator is designed log_factory(), Enter an integer n, Just return one to n Base logarithmic function . The generator is then used to generate two closure functions , A group called log5, A group called log7. Finally, verify , Everything is exactly the same as we thought .

The example cited in this article , From my new book 《Python The way of Master Cultivation 》, There are many similar examples in the book . The book has been officially launched and pre sold in Jingdong and Dangdang , During the period of double 11, the preferential power is unprecedented （ Discount time ：11 month 9 Japan ~11 month 11 Japan ）. If you think this book is good , Don't miss the moment . Students who want to sign , Please pay attention to the official account. “Python Homework counselor ”, reply “Python The way of Master Cultivation ”, You will receive instructions on how to purchase the signature version .

Channel one ： Jingdong self owned books

• Discount time ：11 month 9 Japan ~11 Japan

Channel 2 ： Dangdang self owned books

• Activity time ：11 month 9 Japan ~11 Japan

Channel 3 ： Signature of the author

• Official account “Python Homework counselor ”
• reply “Python The way of Master Cultivation ”, You will receive instructions on how to purchase the signature version

Price and preferential measures are subject to the actual release of each platform .