测试

时间:2019-09-23
本文章向大家介绍测试,主要包括测试使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

python基础记录

Day11 9.20

1.f-strings 格式化

1.1 f-string格式化函数使用示例

def func(a,b):
    return a + b

msg = f"运行结果:{func(1,2)}"
print(msg)
运行结果:3

1.2 f-string格式化列表、字典使用示例

#f-string支持列表
lst = [1,2,3,4,5,6]
msg = f"运行结果:{lst[0:3]}"
print(msg)
[1,2,3]


#f-string支持字典
dic = {"key":1,"key1":22}
msg = f"运行结果:{dic['key1']}"
print(msg)
运行结果:22

1.3 f-string三木运算符使用示例

a = 100
b = 20
msg = f"{a if a < b else b}"
print(msg)
20

2.迭代器

2.1 含义

一个一个取值

2.2 可迭代对象

#Python中规定,只要是具有__iter__()方法就是可迭代对象       
str.__iter__()                           
list.__iter__()                          
tuple.__iter__()                         
dict.__iter__()                          
set.__iter__()    

⚠️可迭代对象能够重复取值

2.3 迭代器使用示例

//使用示例1   将迭代器赋值给一个变量,这样就能重复取值了
可迭代对象能够重复取值                   
lst = [1,2,3]             
                              
将可迭代对象转换成迭代器        
l = lst.__iter__()            
print(l)                
    #结果:<list_iterator object at 0x7fc49812a0f0>,迭代器的内存空间地址        
print(l.__next__())     #结果:1
print(l.__next__())     #结果:2   
print(l.__next__())     #结果:3
print(1.__next__())     #结果:StopIteration 停止迭代,不能超过元素个数
⚠️有多少个元素就只能next多少次


//使用示例2     单独执行迭代器,这样每次只能取第一个值
lst = [1,2,3,4,5]               

⚠️以下两个lst.__iter__()迭代器内存地址,mac中显示的是一样,win本有的一样,有的不一样!!!
print(lst.__iter__())       #<list_iterator object at 0x7fd0a80220f0>
print(lst.__iter__())       #<list_iterator object at 0x7fd0a80220f0>
print(lst.__iter__().__next__())  #结果:1  #lst.__iter__() 是一个迭代器1
print(lst.__iter__().__next__())  #结果:1  #lst.__iter__() 是一个迭代器2
⚠️这里迭代器是多个

2.4 for循环本质

⚠️⚠️⚠️for循环就是一个迭代器
s = "hehe"
for i in s:
    print (i)
h
e
h
e 



s = "hehe"
s1 = s.__iter__()
while True:
    print (s1.__next__())
         
结果会报错如下:停止迭代         
StopIteration         
  
  
  
s = "hehe"
s1 = s.__iter__()
while True:
    try:     #尝试着运行一下缩进体中的内容,如果运行有问题用except接收一下
        print (s1.__next__())
    except StopIteration:
        break           
结果如下:
h
e
h
e

2.5 python2中迭代器用法

//python2和python3中迭代器共同用法
lst = ['a',2,3,4,5]
print (iter(lst))
print (iter(lst))
print (iter(lst).__next__())
print (iter(lst).__next__())

结果如下:
<list_iterator object at 0x7fe4e8071668>
<list_iterator object at 0x7fe4e8071668>
a
a


//python2中支持__iter__()方法
//python2中不支持 __next__()方法

3.生成器

3.1 生成器含义

控制循环迭代行为,一边循环一边计算的特殊程序

例如,创建一个包含100万元素的列表,不仅占空间。而且如果只访问前边几个元素,后续的元素空间就白白浪费了,生成器可以根据规则生成后续元素

3.2 生成器定义

1.基于函数实现的生成器
2.表达式实现生成器

3.3 生成器本质

生成器的本质就是一个迭代器

迭代器:文件句柄,通过数据转换,python自带提供

生成器:程序员自己实现

3.4 生成器使用示例

3.4.1 定义及创建生成器
#定义一个函数
def func():
    print (1)
    return 5
print (func())  
1
5

⚠️函数题中存在关键字yield就是定义一个生成器
#定义一个生成器
def func():
    print (1)
    yield 5
print (func())      #⚠️这一步才算是创建一个生成器对象
<generator object func at 0x7f8df8137d00>
3.4.2 语法及词法
⚠️代码执行的时候有多个对象在工作
语法检查
词法检查


//示例1
def func():
    print (foo)
返回结果为空

原因:
    函数没有被调用,因此不报错

//示例2
def func():
    if 3 > 2
结果:
    SyntaxError: invalid syntax

原因:
    首先进行语法检查,语法错误

  
//示例3
def func():
    foo()
func()
结果:
    报错,语法检查没有问题,但是词法检查有问题
3.4.3 生成器使用
3.4.3.1 生成器使用示例1
⚠️⚠️⚠️生成器最大特点:惰性机制
//示例1
def func():
    yield 1     #记录执行位置,当第一次next的时候记录,第二次next的时候就开始从下边取值
    yield 2
    yield 3
    
g = func()          #获取的是生成器的内存地址
print (next(g)) #取值 1
print (next(g)) #取值 2
print (next(g)) #取值 3
print (next(g)) #取值 会报错 StopIteration
3.4.3.2 生成器使用示例2
//示例2
def func():
    yield 1     #记录执行位置,当第一次next的时候记录,第二次next的时候就开始从下边取值
    yield 2
    yield 3
    
g = func()
g1 = func()
g2 = func()
print (g)
print (g1)
print (g2)
<generator object func at 0x7faa280b7d00>
<generator object func at 0x7faa280b7db0>
<generator object func at 0x7faa280b7e08>

print (next(func()))        #这是一个生成器1
print (next(func()))        #这是一个生成器2
print (next(func()))        #这是一个生成器3
1
1
1


⚠️⚠️⚠️yield和return部分功能很像
def func():
    yield
print(next(func()))
None                                #yeild后边不写内容返回的是None
3.4.3.3 生成器使用示例3
//示例3
def func():                                     #1
    def foo():                              #2
        print (1)                           #3
    yield foo                                   #4
g = func().__next__()                   #5
print (g)                   #结果 <function func.<locals>.foo at 0x7fdb08083400>
print (g())             #结果 1 None
print (type(g))     #结果 <class 'function'>

						

原文地址:https://www.cnblogs.com/pptfz/p/11574452.html