标签:list led 默认 基本 notice 闭包 mat 自定义函数 hello
上课第四天,打卡:
加勒比海盗今天上映;端午节公司发的粽子很有范!
函数,就是一个‘锤子‘,一个具有特定功能的‘锤子‘,使用者可以在适当的时候使用这个‘锤子‘,而不用再去从头做一个‘锤子‘;即可以直接拿来使用;
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
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 可以当作容器类型的元素
看看
操作文件: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
标签:list led 默认 基本 notice 闭包 mat 自定义函数 hello
原文地址:http://www.cnblogs.com/standby/p/6910613.html