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基础day04:函数介绍参数调用

Python自动化开发课堂笔记Day04 - Python基础(函数)

Python基础-全局变量函数函数参数练习day04-2

Python自动化开发课堂笔记Day04 - Python基础(函数补充,模块,包)

python基础-day9-函数