08函数

  1 """
  2 小结:
  3 函数:
  4 print(),input(),len(),max(),min(),str(),list(),
  5 tuple(),dict(),set(),frozenset()
  6 系统内部定义好的函数
  7 for while True False in not in is is not
  8 用户定义的函数,函数名()
  9 """
 10 """
 11 函数是提前组织好的,完成一个任务的特定的代码块。
 12 定义格式:
 13 def 函数名 (形参):形式参数
 14     "函数的说明文档
 15     代码块
 16     return 表达式
 17 函数体最好与上下文各空两行
 18 函数要先定义后调用,一般定义写在文件的最上方
 19 函数名,要符合标识符的命名规则
 20 函数调用,函数名(实参)实际参数
 21 定义完之后没有任何执行
 22 """
 23 
 24 # def add_1(a, b):  # 函数的定义
 25 #     """用于求两个数的和"""
 26 #     c = a + b
 27 #     print(c)
 28 #     return c  # 函数的返回值
 29 
 30 
 31 # result = add_1(10, 20)  # 函数的调用,10 20 实参,分别赋值给a和b结果返回赋值给result
 32 # print(result)
 33 # # 计算0-100之间的整数和
 34 # result = 0
 35 # for i in range(0, 101):
 36 #     result += i
 37 # print(result)
 38 # # 调用函数,实现0-10之间的整数和
 39 # result = 0
 40 # # add_1(0)  # TypeError: add_1() missing 1 required positional argument: 'b'
 41 # print(help(add_1))  # 查看自己定义的函数的功能,说明文档
 42 
 43 
 44 # def add2num(a, b):
 45 #     c = a + b
 46 #     print(c)
 47 
 48 
 49 # add2num(11, 22)
 50 
 51 """
 52 函数的参数:
 53 1.位置参数:通过参数定义和调用的位置来确定的参数
 54 2.关键字参数:函数在调用传入实参时,使用原来的  形参名=值  这种形式来调用函数并传参
 55   要在位置参数的后面,调用函数时。可以跟原来的函数定义时的形参顺序不一样
 56 3.默认值参数:函数在定义时,已经提前给形参赋值了默认(default)值,在调用函数传参时,如果默认值
 57   参数没有被传值,就使用原来的默认值,如果传了值就是用新的值,要跟在位置参数的后面,定义函数时
 58 4.不定长参数:
 59 """
 60 
 61 # 如果(a=20,b,c)把默认参数写在了位置参数的后边,就会报如下错误:
 62 # SyntaxError:non-default argument follow default argument
 63 # def fun_1(a, b, c=80):  # a,b,c都是位置参数,c是默认值参数,c要跟在a,b的后边
 64 #     return a, b, c
 65 
 66 
 67 # print(fun_1(10, 20, 30))  # 位置参数
 68 # # 10位置参数,c=30,b=20关键字参数,关键字参数必须跟在后边,否则就报错
 69 # print(fun_1(10, c=30, b=20))  # 位置参数与关键字参数混用
 70 # # SyntaxError: positional argument follows keyword argument
 71 # # print(fun_1(c=30,b=20,10))
 72 # print(fun_1(10, b=20))  # c没有被传值,就使用默认值80
 73 
 74 
 75 # def add3num(a, b, c=100):  # a,b是位置参数;c=100默认值参数
 76 #     print(a)
 77 #     print(b)
 78 #     print(c)
 79 #     return a+b+c
 80 #
 81 #
 82 # result = add3num(a=30, b=50, c=200)  # 30位置参数;b=50,c=200  关键字参数调用时
 83 # print(result)
 84 
 85 
 86 """
 87 函数参数的第四种类型:不定长参数,将形参包裹
 88 语法格式:del fun_1([formal_a],*args,**kwargs)
 89 1.formal_a   普通参数
 90 2.*args  元组的形式来接收多余的普通的实参(不是关键字实参,直接写实参)
 91 3.**kwargs字典的形式来接收多余的关键字参数(m=10,n=20)
 92 注意,**kwargs要跟在*args后边,*args要跟在普通参数的后边
 93 """
 94 
 95 """
 96 传实参时,可以解包裹,*args,**kwargs
 97 *args 用于直接将元组中的元素传给形参
 98 **kwargs 用于直接将字典中的键值对传给形参
 99 与上边的打包裹是两个独立的过程
100 """
101 
102 # def fun_1(a, b, *args, **kwargs):
103 #     print(a)
104 #     print(b)
105 #     print(args)
106 #     print(kwargs)
107 
108 
109 # fun_1(10, 20)  # 10传给a,b传给20
110 # fun_1(10, 20, 30, 40, 50)  # 10传给a,b传给20;30;40,50全部传给args,args以元组的形式来保存这三个实参
111 # fun_1(10, 20, 30, 40, 50)
112 # # 10-a,b-20;30;40;50全部传给args,aegs以元组形式来保存这三个实参
113 # # m=60,n=70,x=80,y=90关键字参数会赋值给kwargs,kwargs以字典的形式来保存数据
114 # fun_1(10, 20, 30, 40, 50, m=60, n=70, x=80, y=90)
115 # def fun_1(a, b, c):  # 三个普通的位置参数
116 #     print(a)
117 #     print(b)
118 #     print(c)
119 
120 
121 # args = (1, 2, 3)
122 # # TypeError: fun_1() missing 2 required positional arguments: 'b' and 'c'
123 # # fun_1(args)  # 解包裹,将元组中的三个包裹分别传给a,b,c
124 # fun_1(*args)
125 # kwargs = {"a": 10, "b": 20, "c": 30}
126 # # ypeError: fun_1() missing 2 required positional arguments: 'b' and 'c'
127 # # fun_1(kwargs)
128 # fun_1(**kwargs)
129 
130 """
131 混合使用的基本原则如下:
132 (1)先位置参数传递。
133 (2)再关键字参数传递。
134 (3)再可变参数传递。 *args  **args
135 """
136 
137 """
138 函数的返回值:
139 1.无return,返回None
140 2.return a  ,返回一个值,返回值的数据类型就是后边那个值的类型
141 3.return a,b,c,返回值大于1,返回值就是元组,元组的形式来保存这些值
142 """
143 
144 # def fun_1():
145 #     print("hello world!")
146 # # hello world!
147 #
148 # result = fun_1()
149 # print(result)
150 # print(type(result))
151 # # None
152 # # <class 'NoneType'>
153 #
154 #
155 # def fun_2(a, b):
156 #     c = a + b
157 #     return c
158 #
159 #
160 # result_1 = fun_2(10, 100)
161 # print(result_1)
162 # print(type(result_1))
163 # # 110
164 # # <class 'int'>
165 #
166 #
167 # def fun_3(a, b, c):
168 #     return a, b, c
169 #
170 #
171 # result_2 = fun_3(100, 200, 300)
172 # print(result_2)
173 # print(type(result_2))
174 # # (100, 200, 300)
175 # # <class 'tuple'>
176 
177 """
178 函数定义时的四种类型
179 1.无参数,无返回值
180 2.有参数,无返回值
181 3.无参数,有返回值
182 4.有参数,有返回值
183 """
184 
185 # 1.无参数,无返回值,经常用于显示菜单
186 # def print_menu():
187 #     print("---1907c火锅城点菜系统  v8.8---")
188 #     print("1.清汤火锅")
189 #     print("2.麻辣火锅")
190 #     print("3.鸳鸯火锅")
191 #     print("4.咖喱火锅")
192 #     print("5.蔬菜火锅")
193 #     print("-----请点菜-----")
194 #
195 #
196 # while True:
197 #     print_menu()
198 #     choice = input("请输入您的选择")
199 #     if choice in ["1", "2", "3", "4", "5"]:
200 #         print("您选择了%s号火锅,请稍等,马上上菜" % choice)
201 #         break
202 #     else:
203 #         print("选择错误,请重新输入")
204 #
205 #
206 # 2.有参数,无返回值
207 # def fun_1(a, b):
208 #     print(a)
209 #     print(b)
210 #
211 #
212 # fun_1(35, 78)
213 
214 
215 # 3.无参数,有返回值
216 # def fun_1():
217 #     return "欢迎光临本店"
218 #
219 #
220 # result = fun_1()
221 # print(result, "环境优雅,整洁")
222 
223 
224 # 4.有参数,有返回值,频繁使用
225 # def fun_1(a, b, c):
226 #     d = (a + b) * c
227 #     return d
228 #
229 #
230 # result = fun_1    # 函数名可以赋值给另一个变量
231 # aaa = result(10, 20, 30)  # 通过调用另一个变量,变成函数的调用
232 # print(aaa)
233 
234 
235 """
236 函数的嵌套调用:函数中在调用别的函数,函数中在调用自己
237 """
238 
239 # def test_B():
240 #     print("test_B开始执行")
241 #
242 #
243 # def test_A():
244 #     print("test_A开始执行")
245 #     test_B()
246 #     print("test_A执行结束")
247 #
248 #
249 # test_A()  # 函数调用
250 """
251 变量的作用域:
252 1.局部变量,作用域:函数内部。定义在函数内的变量,只在函数内部起作用
253 2.全局变量,作用域:全局。定义在函数外的,文件中的变量,可以在文件的任意位置使用,包括函数内
254 """
255 """
256 两个关键字:
257 1.global  a   :用于在函数中指明使用全局变量a
258 2.nonlocal b  :???
259 
260 """
261 
262 # def fun_1(b, c):
263 #     global result  # 声明当前的result变量用的是全局变量result
264 #     # a也是全局变量,但是在函数中只是被调用没有被修改值,所以不适用global进行声明
265 #     result = a + b + c  # a是全部变量的a;b,c是局部变量;result是局部变量
266 #     # 为什么result是局部变量,a是全局变量
267 #     # a是直接拿来用,没有重新赋值,result在这里被重新赋值,则变为另一个变量
268 #     print("函数内的result变量值为%d" % result)
269 #
270 #
271 # a = 100  # 全局变量
272 # result = 50  # result,全局变量
273 # fun_1(200, 300)
274 # print("全局变量result的值为%d" % result)
275 # # 运行结果:
276 # # 函数内的result变量值为600
277 # # 全局变量result的值为50
278 # # 当我们在fun_1()函数体中,声明了 global result ,结果发生了变化
279 # # 函数内的result变量值为600
280 # # 全局变量result的值为600
281 
282 """
283 匿名函数,没有名称的函数,只能完成简单的任务
284 lambda  a,b,c,...:expression
285 使用lambda 关键字来声明,参数数量不限,但是只能跟一个表达式,表达式的结果就是函数的返回值
286 匿名函数可以当做另一个函数的参数进行传递。
287 匿名函数可以作为内置函数的参数来使用。比如  列表排序sort(key=lambda x:x['name'])
288 """
289 # a = lambda x, y: x+y
290 # print(a(10, 20))
291 
292 
293 # sum_1 = lambda a, b: a+b
294 # print(sum_1(10, 20))
295 # print(sum_1(100, 200))
296 # # 30
297 # # 300
298 #
299 # sum_2 = lambda x, y, z: x+y+z
300 # print(sum_2(10, 20, 30))
301 # print(sum_2(100, 200, 300))
302 # # 60
303 # # 600
304 
305 # # 能计算两个数不同的算数运算的函数
306 # def fun_1(a, b, c):  # a=10,b=20,c=lambda x,y:x+y
307 #     print("a=", a)
308 #     print("b=", b)
309 #     print("result=", c(a, b))  # c(10, 20)
310 #
311 #
312 # fun_1(10, 20, lambda x, y: x + y)
313 # fun_1(10, 20, lambda x, y: x - y)
314 # fun_1(10, 20, lambda x, y: x * y)
315 # fun_1(10, 20, lambda x, y: x / y)
316 # # a= 10
317 # # b= 20
318 # # result= 30
319 # # a= 10
320 # # b= 20
321 # # result= -10
322 # # a= 10
323 # # b= 20
324 # # result= 200
325 # # a= 10
326 # # b= 20
327 # # result= 0.5
328 
329 # list_1 = [{"name": "a", "age": 18}, {"name": "b", "age": 19},
330 #           {"name": "c", "age": 17}]
331 # # # TypeError: '<' not supported between instances of 'dict' and 'dict'
332 # # list_1.sort()
333 # # 对列表中的数据按照年龄大小进行排序
334 # list_1.sort(key=lambda x: x['age'])
335 # print(list_1)
336 # # [{'name': 'c', 'age': 17}, {'name': 'a', 'age': 18}, {'name': 'b', 'age': 19}]
337 # # 对列表中的数据按照姓名进行排序。
338 # list_1.sort(key=lambda x: x['name'])
339 # print(list_1)
340 # # {'name': 'a', 'age': 18}, {'name': 'b', 'age': 19}, {'name': 'c', 'age': 17}]
341 
342 """
343 随机数函数,引入随机数模块,引入后使用其中的随机函数
344 import random  # 写在文件最上方,只需引入一次
345 1.random.random()  # 随机生成0-1之间的浮点数
346 2.random.randint(a, b)  # 随机生成大于等于a,小于等于b,之间的整数
347 """
348 # import random
349 
350 # print(random.random())  # 随机生成0-1之间的浮点数
351 # print(random.randint(0, 2))  # 随机生成大于等于0且小于等于2之间的整数
352 
353 # 使用随机数函数,写猜拳游戏0,1,2分别代表石头剪刀布
354 # # while True:
355 # #     get_1 = int(input("请出拳:(0代表布,1代表剪刀,2代表石头)"))
356 # #     get_2 = random.randint(0, 2)  # 随机生成大于等于0且小于等于2之间的整数
357 # #     if (get_1 == 0 and get_2 == 2) or(get_1 == 1 and get_2 == 0) or 
358 # #         (get_1 == 2 and get_2 == 1):
359 # #         print("电脑出拳是%d,你出的拳是%d,你赢了" % (get_2, get_1))
360 # #         break
361 # #     elif get_1 == get_2:
362 # #         print("平局,请来")
363 # #     else:
364 # #         print("电脑出的拳是%d,你出的拳是%d,你输了" % (get_2, get_1))
365 # 题库。
366 
367 
368 # def func(a1, b1):
369 #     global a  # 声明此处变量a为全局变量
370 #     a = a1 + b1
371 #     print("c =", c)
372 #     a += c
373 #     return a  # a=40
374 #
375 #
376 # a = 10
377 # b = 20
378 # c = 30
379 # b = func(a, b)  # 调用func函数,把ab的值作为实参传递,函数的返回值被b接收
380 # print(a, b)
381 
382 """
383 python创建变量,变量名=值
384 全局变量,定义在文件中,函数外的变量,可以再文化的任意地方使用
385 如果要修改这个全局变量的值,就需要使用global关键字进行声明
386 """
原文地址:https://www.cnblogs.com/zh1127487137/p/12552778.html