Python基础测试与笔记(二)

简介:

1. 高阶函数

1
2
3
4
5
6
7
8
9
10
# 类似于递归函数,常见于Java,C#自定义接口中
def  cmd_ignore_case(s1,s2)
     u1  =  s1.upper()
     u2  =  s2.upper()
     if  u1 < u2:
         return  - 1
     if  u1 > u2:
         return  1
     return  0
sorted ([ 'about' , 'bobo' , 'Zone' , 'dangerous' ], cmd_ignore_case)

2. 面向对象---定义

1
2
3
4
5
6
7
8
9
10
11
# 面向对象
class  Student( object ):
     pass
# 实例绑定一个属性:
=  Student()
s.name  =  'King'
# 定义一个函数作为实例方法
from  types  import  MethodType
s.set_age  =  MethodType(set_age, s, Student)
# 所有实例全部绑定方法
Student.set_score  =  MethodType(set_score,  None , Student)

3. 对象的浅拷贝与深拷贝

1
2
3
4
5
6
7
# 谈论这个话题的就只有对象了 list , tuple , class , dict  etc
# 浅拷贝  只复制对象的值(或者说被引用)
1.  切片   list [:]
2.  工厂函数   list ()  dict ()
3.  copy模块的copy函数
# 深拷贝  复制值还要另开辟新的空间地址
1.  copy模块的deepcopy函数

4. 面向对象---属性

1
2
3
4
5
6
7
8
9
10
11
12
13
class  Student( object ):
     # 此处特殊的写法 @ 就是装饰器的用法
     # 此属性有 getter,setter 操作类的成员
     @property
     def  score( self ):
         return  self ._score
     @score .setter
     def  score( self , value):
         if  not  isinstance (value,  int ):
             raise  ValueError( 'score must be an integer!' )
         if  value <  0  or  value >  100 :
             raise  ValueError( 'score must between 0 ~ 100!' )
         self ._score  =  value

5. 面向对象---多重继承 Minix

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class  animal( object ):
     @property
     def  alive( self ):
         return  self ._alive
     @alive .setter
     def  alive( self , value):
         self ._alive  =  value
                                                                                    
class  bunkMinix( object ):
     def  bunk( self ):
         print ( 'bunk' )
# 这里的dog对象不但继承了animal还继承实现了bunkMinix
class  dog(animal, bunkMinix):
     @property
     def  name( self ):
         return  self ._name
     @name .setter
     def  name( self , value):
         self ._name  =  value
.
.
# mixin多重继承   主线一般是单继承
class  Dog(Mammal, bunkMinix, eatMixin):
     pass

6. 类的常用内置函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 用tuple定义允许绑定的属性名称
__slots__  =  ( 'name' 'age' )
.
# 默认类的调用打印信息    dog()
__str__   类似于Java语言   toString()
.
# 调试信息给开发者看
__repr__   类似于C #语言   @debug
.
# 迭代如果有可iter元素
__iter__    类似与C #语言   IEnumerable接口概念
# 出现了__iter__就必须要出现 next() 方法
例:
class  Fib( object ):
     def  __init__( self ):
         self .a,  self .b  =  0 1  # 初始化两个计数器a,b
     def  __iter__( self ):
         return  self  # 实例本身就是迭代对象,故返回自己
     def  next ( self ):
         self .a,  self .b  =  self .b,  self .a  +  self .b  # 计算下一个值
         if  self .a >  100000 # 退出循环的条件
             raise  StopIteration();
         return  self .a  # 返回下一个值
.
# __getitem__     取iter单个元素     类似与C#语言  对象索引器
class  Fib( object ):
     def  __getitem__( self , n):
         a, b  =  1 1
         for  in  range (n):
             a, b  =  b, a  +  b
         return  a
.
__getattr__      动态返回对象中没有定义的属性
class  Student( object ):
     def  __init__( self ):
         self .name  =  'Michael'
     def  __getattr__( self , attr):
         if  attr = = 'score' :
             return  99
.
# 判断类是否能被调用
__call__       callable ()
例:
def  __call__( self ):
     print ( 'My name is %s.'  %  self .name)
=  Student( 'King' )
s()

7. 异常处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#  try..catch..finnlly
try :
     print  'try...'
     =  10  /  0
     print  'result:' , r
except  ZeroDivisionError, e:
     print  'except:' , e
finally :
     print  'finally...'
print  'END'
.
# 自定义异常处理
class  FooError(StandardError):
     print ( '这是一个自定义错误!!' )
def  foo(s):
     =  int (s)
     if  n = = 0 :
         raise  FooError( 'invalid value: %s'  %  s)
     return  10  /  n

8. 调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 开启命令行调试功能(在Python开启pdb是多么惬意的一件事情)
python  - m pdb err.py
l  [n,m | main ]   查看当前指定代码或者main函数
set  listsize  20  只显示 20 行源代码
.
b [n | main]   设置断点,如果不设置则指定 n 下一步
info breakpoints   查看所有断点
.
变量名  查看当前变量的值
q  退出调试功能
.
n  调试到下一步不进入内部函数
n m  调试器走几步
s  调试到内部函数中
c  直到下一个断点
.
# 调试器从代码开头运行到最后,万一代码多怎么办?
# 需要调试的地方加入,这样我们就可以在命令行中不需要输入 -m pdb了
import  pdb
pdb.set_trace()

关于调试更多详情请见: docs.python.org

9. 文件读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 文件读 默认是只读状态打开文件
=  open ( '/Users/King/hhvm.conf' )
print  f.read( 30 )
for  line  in  f.readlines():
     print (line.strip())  # 把末尾的'\n'删掉
f.close()
#
# with可以偷懒少掉 close() 这一步
with  open ( '/Users/King/hhvm.conf' 'r' ) as f:
     print  f.read()
#
# 二进制模式要加 b
=  open ( '/Users/King/test.jpg' 'rb' )
f.read()
#
# 要读取非ASCII编码的文本文件,就必须以二进制模式打开,再解码。
=  open ( '/Users/King/gbk.txt' 'rb' )
=  f.read().decode( 'gbk' )
print  u
#
# 文件编码的另一种解决方案
import  codecs
with codecs. open ( '/Users/King/gbk.txt' 'r' 'gbk' ) as f:
     f.read()  # u'\u6d4b\u8bd5'
#
# 文件写  模式替换为 w
# 对应方法为   wirte  writeLine  编码与读雷同也有两种方案

测试: 如果你能看懂下面的代码,证明初级部分的Python已经没有问题,接下来就是Python标准库的学习了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import  time
import  threading
import  Queue
#
class  Controm(threading.Thread):
     def  __init__( self , queue):
         threading.Thread.__init__( self )
         self ._queue  =  queue
#
     def  run( self ):
         while  True :
             msg  =  self ._queue.get()
             if  isinstance (msg,  str and  msg  = =  'quit' :
                 break
             print  'client message %s'  %  msg
         print  'bye'
#
def  Proceser():
     queue  =  Queue.Queue()
     worker  =  Controm(queue)
     worker.start()
#
     start_time  =  time.time()
     while  time.time()  -  start_time <  5 :
         queue.put( 'msg %s'  %  time.time())
         time.sleep( 1 )
     queue.put( 'quit' )
#
     worker.join()
#
if  __name__  = =  '__main__' :
     Proceser()

wKioL1NCk6ngbFa9AAEfzKhAvoI876.jpg



Update: 后续会进行Python标准库的更新...


     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1391811,如需转载请自行联系原作者




相关文章
|
21天前
|
安全 测试技术 网络安全
如何在Python Web开发中进行安全测试?
如何在Python Web开发中进行安全测试?
|
21天前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
32 4
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
85 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
9天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
21天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
26 4
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
58 3
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
47 1
|
1月前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
32 1
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
114 1
|
1月前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。