Python自动化测试(四)

二、装饰器

# 在编程领域,有这么两个原则是必须遵守的,具体就是开放封闭的原则,具体如下:
# 封闭:已实现的功能代码不应该被修改
# 开放:对现有功能的扩展开放

# 装饰器函数
def outer(func):
    def inner(name):
        print("log")
        return func(name)
        # inner是inner()函数的对象
        # inner赋值给了fun1
    return inner

@outer
#被装饰的函数
def func1(name):
    print("a")

func1(name="hello Python")

"""
对如上的代码进行逐步的解释:
a、自动执行outer函数并且将其下面的函数名fun当作参数来传递;
b、将outer函数的返回值(变量或者是函数),重新赋值给fun;
c、一旦结合装饰器后,调用fun其实执行的是inner函数部,原来的fun被覆盖;
d、一旦这个函数被装饰器装饰之后,被装饰的函数重新赋值成装饰器的内层函数

依据如上,我们可以总结出,它执行的顺序具体为:
先执行outer的函数,再执行内部函数inner,下来执行到inner函数的返回值,再具体到inner的函数,执行inner函数里面的表达式

Def xx1(被装饰函数):
     def xx2(如果被装饰函数有参数那么输入):
             xxxxxxxxxxxxxxx
             被装饰函数(如果被装饰函数有参数那么输入)
             xxxxxxxxxxxxxxx
             # 如果被装饰函数中含有reture则需要返回被装饰函数
             # 没有则不需要
       reture xx2
"""

import sys
# 引入sys标准库
LOGIN_USER={'isLogin':False}

def outer(func):
    def inner(*args,**kwargs):
        if LOGIN_USER['isLogin']:
            return func()
        else:
            print('请登录')
    return inner

def login():
    username=input('请输入用户名:\n')
    password=input('请输入密码:\n')
    if username=='wuya'  and password=='admin':
        LOGIN_USER['isLogin']=True
        print('登录成功')
    else:
        print('请输入正确的账户和密码')

@outer
def admin():
    '''后台系统'''
    print('欢迎访问后台管理系统')

@outer
def order():
    '''交易系统'''
    print('欢迎访问交易管理系统')

def main():
    while True:
        f=int(input('1、登录 2、后台系统 3、交易系统 4、退出\n'))
        if f==1:
            login()
        elif f==2:
            admin()
        elif f==3:
            order()
        elif f==4:
            sys.exit(0)

if __name__ == '__main__':
    main()

 三、生成器

# generator()是否存在一边循环一边计算的方式
# 可被Iterable的对象

g=(x for x in range(5))

def func():
    for item in g:
        yield item
# 迭代器,生成器,流式数据

for item in func():
    print(item)

 四、文件操作

"""
文件操作步骤:
1、打开文件
2、对文件进行操作,读或者是写的操作
3、关闭文件

模式:
r:读取
w:写,特点是先清空文件已有的内容,然后把新的内容写进去
a:写,在文件已有内容的基础之上增加新的内容

open(写)
1、查看被操作文件是否存在
2、若不存在,会自动创建文件

open(读)
1、查看被操作文件是否存在
2、如果不存在则抛出异常
"""

f=open('log.txt','w')
f.write('hello Python')
f.close()

 

 五、小问题

1、举例说明列表与字符串之间的转换
2、举例说明列表与字典之间的转换
3、举例说明字典的排序
4、列表与元组的区别是什么?
5、duct1={'name':'wuya','age':18,'datas':[{"language":[{"language":"go","p":["Python"]}]}]}获取的Python

str1="Python,go,Java,Net"
list_str=str1.split(',')
print(list_str)
print(type(list_str))

str_list="|".join(list_str)
print(str_list)
print(type(str_list))

list_dict=dict(enumerate(list_str))
print(list_dict)
print(type(list_dict))

print("对字典根据key进行排序:",
      dict(sorted(list_dict.items(),
            key=lambda item:item[0])))

# 元组是不可变的 不能修改,不可增加也不可删除
# 列表是可变的 可以增加,也可以把已有的对象删除

duct1={'name':'wuya','age':18,'datas':[{"language":[{"language":"go","p":["Python"]}]}]}
# for item in duct1['datas']:
#       for item in item['language']:
#             for item in item['p']:
#                   print(item)

for item in duct1['datas']:
      print(item)
      print(item['language'][0]['p'][0])

posted @ 2021-07-15 17:36  星德川  阅读(56)  评论(0)    收藏  举报