Python基础(函数部分)-day04
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础(函数部分)-day04相关的知识,希望对你有一定的参考价值。
写在前面
上课第四天,打卡:
加勒比海盗今天上映;端午节公司发的粽子很有范!
一、函数的基本概念
- 函数是什么?
函数,就是一个‘锤子‘,一个具有特定功能的‘锤子‘,使用者可以在适当的时候使用这个‘锤子‘,而不用再去从头做一个‘锤子‘;即可以直接拿来使用;
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
- 不使用函数会有什么问题?
1.组织结构不清晰,可读性差;
2.代码冗余;
3.无法统一管理且维护难度大;
- 函数的分类
1.内置函数;Python解释器自带的具有某些基础功能的‘锤子‘;
2.自定义函数;用户根据需求,自己定义写好的‘锤子‘;
- 函数的两个阶段
1.定义阶段;
2.使用阶段;
二、函数的定义
- 为何要定义函数?
函数即变量,变量必须先定义后使用,未定义而直接引用函数,就相当于在引用一个不存在的变量名,必然会出错;
- 函数的定义都干了什么?
只检测语法,不执行代码;
函数调用阶段才会去执行具体代码;
- 如何定义函数?
1 def functionname( parameters ): 2 "函数_文档字符串" 3 function_suite 4 return [expression]
- 定义函数的三种形式
1.无参函数;
应用场景仅仅只是执行一些操作,比如与用户交互,打印;
2.有参函数;
需要根据外部传进来的参数,才能执行相应的逻辑;
3.空函数;
编写代码之初,用来设计代码结构;
三、函数的调用
- 函数的调用
1.先找到函数名字;
2.根据 名字+() 调用函数,执行函数体内的代码;
- 函数调用的三种形式
1.语句形式:foo()
2.表达式形式:3*len(‘hello‘)
3.函数的执行结果当做另外一个函数的参数:range(len(‘hello‘))
四、函数的参数
- 函数参数的分类
- 形参
即函数定义处()里的变量标识符;
- 实参
即函数调用处()里的变量;
- 意义
形参即变量名,实参即变量值;函数调用则将值绑定到形参变量上,函数调用结束,解除绑定;
- 具体应用
- 位置参数
- 关键字参数
- 默认参数
- 可变长参数
- 命名关键字参数
五、函数对象
1 可以被引用
2 可以当作参数传递
3 返回值可以是函数
3 可以当作容器类型的元素
六、函数的嵌套
- 嵌套调用
- 嵌套定义
七、命名空间和作用域
- 命名空间
- 作用域
八、闭包的概念
- 闭包的定义
- 闭包的意义
- 应用领域:延迟计算
九、装饰器
- 什么是装饰器?
- 为什么要用装饰器?
- 装饰器应用
看看
十、迭代器
- 迭代的概念
- 哪些是可迭代的对象?
- 迭代器优缺点
- 迭代器协议
- 迭代器应用
十一、生成器
- 什么是生成器?
- 生成器应用
十二、递归
十三、Python内置函数
- 内置函数介绍
十四、day04课后作业
题目要求:
操作文件:haproxy.cfg,实现对这个文件配置的新增、删除以及查询的功能;
- 新增的时候要考虑backend是否已存在,没有则新增backend;有则在进一步判断是否存在响应的record,有则不能重复插入,没有则可以插入;
- 删除的时候要判断是否存在用户想要删除的record,不存在则反馈用户提示信息;存在的话就需要考虑backend含有几个record,大于1个,则删除record,如果只有1个record,则需要把record和backend都要删除;
- 查询则是列出用户所输入的backend下的所有record信息;
代码实现:
1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 4 5 def get_backend_dict(): 6 with open(‘haproxy.cfg‘,mode=‘r‘,encoding=‘utf-8‘) as rf: 7 content_list = rf.readlines() 8 backend_dict = {} 9 for i in range(0, len(content_list)): 10 if content_list[i].startswith(‘backend ‘): 11 backend_dict[content_list[i].split()[1]] = i 12 return content_list,backend_dict 13 14 def select(data): 15 content_list,backend_dict = get_backend_dict() 16 if data not in backend_dict: 17 print(‘No backend record found.‘) 18 else: 19 for i in range(backend_dict[data],len(content_list)-1): 20 if content_list[i+1].startswith(‘backend ‘): 21 return 22 print(content_list[i+1],end=‘‘) 23 24 def add(data): 25 content_list,backend_dict = get_backend_dict() 26 sub_record_info = " server " + data[‘record‘][‘server‘] + " " 27 + data[‘record‘][‘server‘] + " weight " 28 + str(data[‘record‘][‘weight‘]) + " maxcon " 29 + str(data[‘record‘][‘maxcon‘]) + "\n" 30 backend_info = "\n" + "backend " + data[‘backend‘] + "\n" + sub_record_info 31 if data[‘backend‘] in backend_dict: 32 index = -1 33 tmp_list = [] 34 print(‘The backend:{} already exist, now to append a record...‘.format(data[‘backend‘])) 35 for i in range(backend_dict[data[‘backend‘]],len(content_list)-1): 36 if content_list[i+1].startswith(‘backend ‘): 37 index = i 38 break 39 else: 40 tmp_list.append(content_list[i+1]) 41 if sub_record_info not in tmp_list: 42 if -1 == index: 43 content_list.append(sub_record_info) 44 else: 45 content_list.insert(index,sub_record_info) 46 with open(‘haproxy.cfg‘, mode=‘w‘, encoding=‘utf-8‘) as wf: 47 wf.writelines(content_list) 48 print("The backend:{} already exist, append a record successfully.".format(data[‘backend‘])) 49 else: 50 print("The record:{} already exist, add failed.".format(sub_record_info.strip())) 51 else: 52 with open(‘haproxy.cfg‘,mode=‘a+‘,encoding=‘utf-8‘) as wf: 53 wf.write(backend_info) 54 print("New backend added successfully.") 55 56 def remove(data): 57 content_list, backend_dict = get_backend_dict() 58 if data[‘backend‘] not in backend_dict: 59 print("The backend:{} doesn‘t exist, remove failed.".format(data[‘backend‘])) 60 else: 61 tmp_list = [] 62 sub_record_info = " server " + data[‘record‘][‘server‘] + " " 63 + data[‘record‘][‘server‘] + " weight " 64 + str(data[‘record‘][‘weight‘]) + " maxcon " 65 + str(data[‘record‘][‘maxcon‘]) + "\n" 66 if sub_record_info not in content_list: 67 print("The record:{} doesn‘t exist, remove failed.".format(sub_record_info.strip())) 68 return 69 else: 70 content_list.remove(sub_record_info) 71 for i in range(backend_dict[data[‘backend‘]],len(content_list)-1): 72 if content_list[i+1].startswith(‘backend ‘): 73 break 74 else: 75 tmp_list.append(content_list[i+1]) 76 if 0 == len(tmp_list): 77 content_list.remove(data[‘backend‘]) 78 with open(‘haproxy.cfg‘,mode=‘w‘,encoding=‘utf-8‘) as wf: 79 wf.writelines(content_list) 80 print("The record:{} removed successfully.".format(sub_record_info.strip())) 81 82 if __name__ == ‘__main__‘: 83 info = ‘‘‘ 84 1:查询 85 2:增加 86 3:删除 87 4:退出程序 88 ‘‘‘ 89 menu_dict = { 90 ‘1‘:select, 91 ‘2‘:add, 92 ‘3‘:remove, 93 ‘4‘:exit, 94 } 95 while True: 96 print(info) 97 chioce = input(‘请输入操作序号>>> ‘).strip() 98 if ‘4‘ == chioce: break 99 if 0 == len(chioce) or chioce not in menu_dict:continue 100 elif ‘1‘ == chioce: 101 backend = input(‘请输入要查询的backend>>> ‘).strip() 102 if 0 == len(backend): 103 print(‘Invalid input...‘) 104 else: 105 select(backend) 106 else: 107 notice = ‘Input Fomat: backend domain|server(domain/ip)|weight value|maxcon value‘ 108 print(notice) 109 data = input(‘请输入数据>>> ‘).strip() 110 data_list = data.split(‘|‘) 111 if 4 == len(data_list) and data_list[2].isdigit() and data_list[3].isdigit(): 112 input_dict = { 113 ‘backend‘:data_list[0], 114 ‘record‘:{ 115 ‘server‘:data_list[1], 116 ‘weight‘:int(data_list[2]), 117 ‘maxcon‘:int(data_list[3]), 118 }, 119 } 120 menu_dict[chioce](input_dict) 121 else: 122 print(‘Input invalid...‘)
文件:
1 frontend www 2 bind *:80 3 acl web hdr_beg(host) 10.207.252.45 4 acl web1 hdr_beg(host) 10.207.252.46 5 use_backend webserver if web 6 use_backend web1server if web1 7 8 backend www.oldboy1.org 9 server 192.168.1.110 192.168.1.110 weight 10 maxcon 3007 10 server 192.168.1.120 192.168.1.120 weight 10 maxcon 3009 11 server 192.168.1.110 192.168.1.110 weight 10 maxcon 3009 12 13 backend www.oldboy2.org 14 server 192.168.1.130 192.168.1.130 weight 20 maxcon 3000 15 server 192.168.1.131 192.168.1.131 weight 20 maxcon 3000 16 backend www.qq.com 17 server 3.3.3.3 3.3.3.3 weight 90 maxcon 100 18 server 3.3.3.100 3.3.3.100 weight 90 maxcon 700 19 server 8.8.8.9 8.8.8.9 weight 20 maxcon 200
以上是关于Python基础(函数部分)-day04的主要内容,如果未能解决你的问题,请参考以下文章
Python自动化开发课堂笔记Day04 - Python基础(函数)