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 """