4. Function
1 #!/user/bin/env python
2 # -*- coding:utf-8 -*-
3 """
4 Function ;
5 Is Mutable
6 mutable :
7 list set dict
8 immutable : If you modify the value of a variable, address changes too
9 int str float tuple
10
11 Copy : Back up a container's data in a new address
12 shallow copy:
13 1. For the immutable type Number String Tuple, shallow replication is just address pointing,
14 and does not open up new space.
15 2. For variable types List, Dictionary, Set, shallow replication opens up new spatial addresses
16 (just the top level opens up new space, and the element addresses in the inner layer are the same),
17 and shallow replication takes place.
18 3. After shallow copy, changing the value of elements of variable type in the original object will affect
19 the copy object at the same time; changing the value of elements of variable type in the original object,
20 only the original type is affected.
21
22 numbers = [1, 2, 3, [4, 5, 6]]
23 new_numbers = numbers.copy()
24 numbers[3][0] = 7
25 numbers
26 # >>> [1, 2, 3, [7, 5, 6]]
27 new_numbers
28 # >>> [1, 2, 3, [7, 5, 6]]
29 deep copy:
30 1. In addition to the top-level copy,
31 the deep copy also copies the sub-elements (essentially recursive shallow copy)
32 2. After deep copy, all element addresses of the original object and the copy object are not the same.
33
34 import copy
35 numbers = [1, 2, 3, [4, 5, 6]]
36 numbers[3][0] = 7
37 numbers
38 # >>> [1, 2, 3, [7, 5, 6]]
39 new_numbers
40 # >>> [1, 2, 3, [4, 5, 6]]
41
42 Ordinary Function :
43 Format
44 def function_name([param....]):
45 Function Body
46
47 Invoking:
48 function_name([param....])
49
50 Invoking between functions
51
52 Param and Return value :
53 Param
54 General Parameters
55 list, set, dict
56 str, tuple, int, float
57
58 Default value Parameters
59 def func(a, b=[Fixed Value]):
60 # :param a:
61 # :param b: # default b = [Fixed Value]
62 # :return:
63 pass
64
65 func(5)
66 # >>> a = 5, b = [Fixed Value]
67 func(5, 10)
68 # >>> a = 5, b = 10
69 Keyword Parameters
70 Specify invoking parameters
71
72 Variable Parameters
73 Unpacking
74 def func(*args, **kwargs):
75 print(args)
76 print(kwargs)
77
78 numbers = [1, 2, 3, 4, 5]
79 dictionary = {"YeYuanXinZhiZhu": 5, "TieBiATongMu": 7}
80
81 func(numbers, 10, dictionary)
82 # >>> ([1, 2, 3, 4, 5], 10, {"YeYuanXinZhiZhu": 5, "TieBiATongMu": 7})
83 # >>> {}
84 func(*numbers, 10, dictionary)
85 # >>> (1, 2, 3, 4, 5, 10, {'YeYuanXinZhiZhu': 5, 'TieBiATongMu': 7})
86 # >>> {}
87 func(*numbers, 10, **dictionary)
88 # >>> (1, 2, 3, 4, 5, 10)
89 # >>> {"YeYuanXinZhiZhu": 5, "TieBiATongMu": 7}
90
91 packing
92 numbers = [1, 2, 3, 4, 5]
93 x, *y, z = numbers
94 # >>> x y z
95 # >>> 1 [2, 3, 4] 5
96 def add(*args)
97 pass
98
99 Return Value
100 1. Return the result to the invoking place and return the control of the program together
101 2. If the function does not return, default return a None object
102 3 .If multiple objects are returned,
103 the interpreter encapsulates multiple objects into a tuple and returns them as a whole.
104
105 def func():
106 return
107 # >>> func()
108 # >>> None
109
110 def func():
111 return value
112 # >>> func()
113 # >>> value
114
115 def func():
116 return value_1, value_2, value_3,
117 # >>> func()
118 # >>> (value_1, value_2, value_3)
119
120 Scope
121 Local
122 Functions can only change their own variables
123 locals() Return the dictionary containing the current scope's local variables.
124 Usually used in functions,
125 Enclosing
126 1. An interior function is defined in an exterior function.
127 2. Temporary variables of the exterior function are used in the interior function
128 3. the return value of the exterior function is the reference of the interior function.
129 Global
130 globals() Return the dictionary containing the current scope's global variables.
131 Variables generated by default and User-defined variable
132 Builtins
133
134 Functions are used as parameters
135
136 Decorator : They are functions that modify the function of a function
137 decorator param : Implementation of Three-Level functions
138 def first_decorator(Param):
139 def second_decorator(Func):
140 def third_decorator(*args, **kwargs):
141 pass
142 return third_decorator
143 return second_decorator
144
145 multilayer decorator
146 def first_decorator(func):
147 def wrapper(*args, **kwargs):
148 pass
149 return wrapper
150
151 def second_decorator(func):
152 def wrapper(*args, **kwargs):
153 pass
154 return wrapper
155
156 @second_decorator # param = function first_decorator..wrapper at ...
157 @first_decorator # Executing closer first
158 def foo(): # foo = function second_decorator..wrapper at ...
159 pass
160
161 Anonymous Functions and High-Order Functions:
162 Anonymous Functions Format : lambda param : return value
163 func = lambda x: x + 1
164 func(5)
165 # >>> 6
166
167 Using Anonymous Function combine with High-Order Function
168 1. A function can be passed as a parameter to another function
169 2. The return value of a function is another function
170
171 sorted : sorted(iterable, key, reverse) -> list
172 numbers = [5, 2, 6, 12, 10, 37]
173 print(sorted(numbers))
174 # >>> [2, 5, 6, 10, 12, 37]
175
176 # Sort by age
177 numbers = [("GeBiCunGaHa", 25), ("YeYuanXinZhiZhu", 5), ("TieBiATongMu", 7)]
178 print(sorted(numbers, key=lambda x: x[1]))
179 # >>> [("YeYuanXinZhiZhu", 5), ("TieBiATongMu", 7), ("GeBiCunGaHa", 25)]
180 print(sorted(numbers, key=lambda x: x[1]))
181 # >>> [("GeBiCunGaHa", 25), ("TieBiATongMu", 7), ("YeYuanXinZhiZhu", 5)]
182
183 map : map(function, *iterables) -> map object
184 print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])))
185 # >>> [1, 4, 9, 16, 25]
186
187 print(list(map(lambda x, y: x + y, [1, 2, 3], [4, 5, 6]))
188 # >>> [5, 7, 9]
189
190 filter : filter(function or None, iterable) -> filter object
191 numbers = [0, 1, 2, 3, 4, 5]
192 print(list(filter(lambda x: x % 2 == 0, numbers)))
193 # >>> [1, 2, 3, 4, 5]
194
195 numbers = [1, 2, 3, 4, 5]
196 print(list(filter(None, numbers)))
197 # >>> [0, 2, 4]
198
199 reduce : reduce(function, sequence[, initial=None]) -> value
200 from functools import reduce
201 numbers = [1, 2, 3, 4, 5]
202 print(reduce(lambda x, y: x + y), numbers)
203 # >>> 15
204
205 numbers = [1, 2, 3, 4, 5]
206 print(reduce(lambda x, y: x + y), numbers, 10)
207 # >>> 25
208
209 Extended content
210 partial
211 from functools import partial
212 def add(x, y):
213 return x + y
214
215 new_add = partial(add, 5)
216 print(new_add(4))
217 # >>> 9
218 wraps
219 from functools import wraps
220
221 Comprehensions :
222 List Comprehensions
223 numbers = [1, 3, 5, 7, 9, 2, 4, 6, 8]
224 new_numbers = [x for x in numbers if x % 2 == 0]
225 # >>> [2, 4, 6, 8]
226 new_numbers = [x if x % 2 == 0 else x + 1 for x in iterables]
227 # >>> [2, 4, 6, 8, 10, 2, 4, 6, 8]
228 [(x, y) for x in iterables1 for y in iterables2]
229 Set Comprehensions
230 numbers = [1, 2, 3, 4, 1, 2, 3, 4]
231 new_numbers = {x for x in numbers if x % 2 == 0}
232 # >>> {2, 4}
233 new_numbers = {x if x % 2 == 0 else x + 1 for x in iterables}
234 # >>> {2, 4}
235 dict Comprehensions
236 dictionary = {"a": 1, "b": 2, "c": 3}
237 new_dictionary = {value: key for key, value in dictionary.items()}
238 # >>> {1: 'a', 2: 'b', 3: 'c'}
239 Generator :
240 The mechanism of one-sided loop and one-sided computation
241 Define :
242 List Comprehension's symbols are replaced by ()
243 combining with the method named "next()" for getting the next element
244 generator = (x for x in range(10) if x % 2 == 0)
245 next(generator)
246 # >>> 0
247 next(generator)
248 # >>> 2
249 yield method and function
250 yield : 1. return 2.stop
251 combining with the method named "next()" for getting the next element
252 if function has return values, the return value will throw as a error named "StopIteration" + value
253 def func():
254 for i in range(5):
255 yield i
256 print("This is {} step".format(i)
257
258 generator = func()
259 print(generator)
260 # >>> 261 print(next(generator))
262 # >>> 0
263 # >>> this is 0 step
264 print(next(generator))
265 # >>> 1
266 # >>> this is 1 step
267 Method :
268 generator.close()
269 generator.__next__() is equal to next(generator)
270 generator.send()
271 the first parameter must be None
272
273 Application : Multitask switching
274 def study():
275 pass
276
277 def listen_music():
278 pass
279
280 def chat():
281 pass
282
283 The relationship between iterable objects, iterators and generators :
284
285 ↓next() or object.__next__()
286 ↑---→ iterators--→ generators
287 iterable Objects ↑iter()
288 ↓ ↑ ↑---→ Sequence(list, tuple, string)
289 \→ Non-iterator
290 \---→ dictionary
291
292 Example :
293 from collections import Iterator, Iterable
294 isinstance(range(0, 5), Iterator)
295 # >>> False
296 isinstance(range(0, 5), Iterable)
297 # >>> True
298
299 Recursion Function :
300 Recursion functions must have exits and keep approaching them
301
302 Example : Implementing Fibonacci Sequence by Recursion
303 def fibonacci(n):
304 if n == 1 or n == 2:
305 return 1
306 return fibonacci(n - 1) + fibonacci(n - 2)
307 """
다음으로 전송:https://www.cnblogs.com/gebicungaha/p/11310525.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.