python3自动化学习03

概要:深浅拷贝、函数、lambda、内置函数、文件操作

一、深浅拷贝

1.对于字符串、数字来说,赋值、深拷贝、浅拷贝的结果是一样的,都是用的内存中的同一个地址。

如下图所示:

 1 import copy
 2 ‘‘‘
 3
 4 a1 = 123
 5 a2 = 123
 6 #a2 = a1
 7 print(id(a1))
 8 print(id(a2))
 9 #浅拷贝,内存中的地址一样
10 a3 = copy.copy(a1)
11 print(id(a1))
12 print(id(a3))
13 #深拷贝,内存中地址一样
14 a4 = copy.deepcopy(a1)
15 print(id(a1))
16 print(id(a4))
17 #结论:对于字符串、数字来说,赋值,深浅拷贝用的都是内存中的同一个地址。

2.其他类型,如列表、字典、元组

对于字典、元组、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的

赋值:只是新创建了一个变量,该变量还是指向原来的内存地址

n1 = {‘k1‘:‘v1‘,‘k2‘:123,‘k3‘:["alex",678]}

n2 = n1

浅拷贝:在内存地址里只拷贝一层,字典里的元素没拷贝

深拷贝:有多少层拷贝多少份,在内存中将所有的数据重新创建一份

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 import copy
 4
 5 #其他,如元组,列表,字典...
 6 n1 = {‘k1‘:‘v1‘,‘k2‘:123,‘k3‘:["alex",678]}
 7
 8 #赋值 --内存地址还是一样的
 9 n2 = n1
10 print(id(n1))
11 print(id(n2))
12
13 #浅拷贝:在内存中只额外创建第一层数据
14 #第一层的内存地址已经不一样了
15 n3 = copy.copy(n1)
16 print(id(n1))
17 print(id(n3))
18 #其他层的内存地址是一样的
19
20
21 #深拷贝:在内存中将所有的数据重新创建一份。更改拷贝后的数据,原来的数据不会收到影响
22 n4 = copy.deepcopy(n1)
23 print(id(n1))
24 print(id(n4))
25 #
26 print(id(n1[‘k1‘]))
27 print(id(n4[‘k1‘]))
28 print(id(n1[‘k2‘]))
29 print(id(n4[‘k2‘]))
30 print(id(n1[‘k3‘]))
31 print(id(n4[‘k3‘]))
32 print(id(n1[‘k3‘][0]))
33 print(id(n4[‘k3‘][0]))

 1 import copy
 2
 3 #示例
 4 #监控模版
 5 #已经被监控的10台机器当CPU超过80时报警,现在要新添加10台机器的监控,CPU超过60就报警
 6 dic = {
 7     "cpu":[80,],
 8     "mem":[80,],
 9     "dis":[80,]
10 }
11
12 ###如果用赋值的话则会把原来老的监控指标也更改了###
13 new_dic = dic
14 new_dic[‘cpu‘][0] = 60
15 print("old:",dic)
16 print("new:",new_dic)
17 ###################################################
18
19 ####如果用浅拷贝的话则会把原来老的监控指标也更改了####
20 new_dic = copy.copy(dic)
21 new_dic[‘cpu‘][0] = 60
22 print("old:",dic)
23 print("new:",new_dic)
24 ###################################################
25
26 #####深拷贝不会更改原来老的监控指标#####
27 new_dic = copy.deepcopy(dic)
28 new_dic[‘cpu‘][0] = 60
29 print("old:",dic)
30 print("new:",new_dic)
31 ###################################################

深浅拷贝练习

二、函数

1.基本概念

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3
 4 def mail():
 5     n = 123
 6     n+=1
 7     print(n)
 8
 9 #调用函数
10 mail()
11
12 #赋值 ,f 指向了mail函数的内存地址
13 f = mail
14 #调用
15 f()

2.函数返回值

  函数如果没有return,那么默认返回None

  return作用:

    返回一个值

    中断函数

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 ‘‘‘
 4 #函数返回值练习(函数默认返回值为None)
 5 def mail():
 6     n = 123
 7     n+=1
 8     return 123
 9
10 #执行函数,并且赋值给ret,拿到返回值
11 ret = mail()
12 print(ret)
13 ‘‘‘
14
15 #return 返回一个值并且中断函数操作
16 def show():
17     print(‘a‘)
18     return [11,22]
19     print(‘b‘)
20 ret = show()
21 print(ret)

扩展:pycharm断点调试的方法

3.函数参数

函数参数可分为:

  普通参数(又叫位置参数)

  默认参数 #注意默认参数必须指向不可变对象!

  动态参数:

    可变参数  #调用的时候需要先组装出一个list或tuple

    关键字参数  #关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

    命名关键字参数

在Python中定义函数,可以用位置参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:位置参数、默认参数、可变参数、命名关键字参数和关键字参数。

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 ‘‘‘
 4 #1.没有参数
 5 def show():
 6     pass
 7
 8
 9 #2.位置参数 :一个参数
10 def show(arg):
11     print(arg)
12 show(‘kkkk‘)
13 #两个参数,或者多个参数
14 def show(arg1,arg2):
15     print(arg1,arg2)
16 show(‘kkkk‘,‘bbbb‘)
17
18
19 #3.默认参数   -- 定义默认参数要牢记一点:默认参数必须指向不变对象!
20 def show(a1,a2=333):
21     print(a1)
22     print(a2)
23 show(‘aaa‘)
24 show(‘aaa‘,‘bbb‘)
25 #指定参数
26 def show(a1,a2):
27     print(a1)
28     print(a2)
29 show(a2=123,a1=999)
30
31
32 #4.动态参数(可变参数)--生成一个元组
33 def show(arg):
34     print(arg)
35 def show2(*arg):
36     print(arg,type(arg))
37 show(1)
38 show2(1)
39 show2(1,2,3,4,5)
40
41 #动态参数(关键字参数) --生成一个字典
42 def show3(**kw):
43     print(kw,type(kw))
44 show3(a1=8)
45 show3(a1=8,a2=88)
46 #可变参数+关键字参数 --*args在前,**kw在后
47 def show(*args,**kw):
48     print(args,type(args))
49     print(kw,type(kw))
50 l = [11,22,33]
51 d = {"n1":66,"a1":99}
52 #show(11,222,333,44,a="bb",n3="cc")  #传参数时注意位置
53 show(l,d)  #都放进*args里面去了
54 show(*l,**d) #把列表或元组整个赋值给动态参数,需要加 * 或者 **
55
56 #动态参数(命名关键字参数)
57 #对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。
58 #如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下
59 #和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
60 def person(name, age, *, city, job):
61     print(name, age, city, job)
62 person(‘Jack‘, 24, city=‘Beijing‘, job=‘Engineer‘)
63 person(‘Jack‘, 24, job=‘Beijing‘, city=‘Engineer‘)
64 #如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
65 def person(name, age, *args, city, job):
66     print(name, age, args, city, job)
67 #person(‘Jack‘, 24, ‘Beijing‘, ‘Engineer‘)   #调用失败
68
69
70 #格式化
71 s1 = "{0} is {1}"
72 l = ["alnk","shuaiguo"]
73 #result = s1.format("alnk","shuaiguo")
74 result = s1.format(*l)
75 #print(s1.format("alnk","shuaiguo"))
76 print(result)
77
78 s1 = "{name} is {acter}"
79 result = s1.format(name="alnk",acter="666")
80 print(result)
81 d = {"name":"alnk","acter":666}
82 result = s1.format(**d)
83 print(result)
84 ‘‘‘

代码演示

三、lambad

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3
 4 def f1(a):
 5     b = a + 1
 6     return b
 7 ret = f1(4)
 8 print(ret)
 9
10 #lambda表达式  --简单的函数表式方式
11 f2 = lambda a:a+1   #创建了形式参数a,创建了函数内容 a+1 ,并且把结果return
12 ret = f2(99)
13 print(ret)

四、内置函数

目前熟悉下图标注的函数即可

  1 #!/usr/bin/env python3
  2 #author:Alnk
  3 ‘‘‘
  4 #abs() --绝对值
  5 print(abs(11))
  6 print(abs(-11))
  7
  8 #all() --传一个序列,会去循环该序列,一旦存在假的值就会返回False
  9 print(all([]))
 10 print(all(["",]))
 11 print(all([0,1,2]))
 12 #以下都为假,空的类型
 13 print(bool(None))
 14 print(bool(""))
 15 print(bool([]))
 16 print(bool(0))
 17 print(bool({}))
 18
 19 #any() --只要有一个为真,就返回True
 20 print(any([0,1,2]))
 21
 22 #bin() --返回二进制
 23 print(bin(100))
 24
 25 #bool() --布尔值
 26 print(bool(None))
 27 print(bool(""))
 28 print(bool([]))
 29 print(bool(0))
 30 print(bool({}))
 31 print(bool(1))
 32
 33 #chr() --把字符转为ascii码
 34 print(ord(‘a‘))
 35
 36 #ord() --把ascii码转为字符,
 37 print(chr(97))
 38
 39 #dict() --创建一个字典
 40 a =dict(v1=‘k1‘,v2=‘k2‘)
 41 print(a)
 42
 43 #dir() --当前变量所有的方法
 44 a = ()
 45 print(dir(a))
 46
 47 #divmod() --返回一个元组,第一个元素位商,第二个元素位余数
 48 print(divmod(4,2))
 49
 50 #enumerate() --输出编号
 51 li = ["a","b","c"]
 52 for i,item in enumerate(li,1):
 53     print(i,item)
 54
 55 #eval() --字符串里的数字乘积
 56 print(eval("6*8"))
 57
 58 #filter() --用于过滤序列
 59 li = [11,22,33,44]
 60 def fun(x):
 61     if x > 33:
 62         return True
 63     else:
 64         return False
 65 l = filter(fun,li) #过滤
 66 print(list(l))
 67
 68 #map() --加工
 69 li = [11,22,33,44]
 70 new_li = map(lambda x:x+100,li)
 71 l = list(new_li)
 72 print(l)
 73
 74 #float() --创建小数
 75 a = 1
 76 b = float(a)
 77 print(b)
 78
 79 #help() --帮助函数
 80
 81 #id() --查看对象在内存中的地址
 82
 83 #input() --输入函数
 84
 85 #int() --创建一个整数
 86
 87 #len() --判断一个对象的长度
 88 l1 = [1,23,44]
 89 print(len(l1))
 90 s1 = "str1"
 91 print(len(s1))
 92
 93 #list() --创建一个列表
 94 a = list((1,2,3,4))
 95 print(a)
 96
 97 #max() --返回最大值
 98 print(max(1,2,3,4))
 99
100 #min() --返回最小值
101 print(min(1,2,3,4))
102
103 #oct() --八进制
104 print(oct(10))
105
106 #pow() --返回(x的y次方) 的值。
107 print(pow(2,5))
108
109 #range() --返回一个序列
110 print(range(1,10))
111
112 #reversed() --反转迭代
113 l1 = [‘a‘,‘b‘,‘c‘]
114 l2 = reversed(l1)
115 for i in l2:
116     print(i)
117
118 #round()  --四舍五入
119 print(round(8.9))
120 print(round(8.4))
121
122 #set() --集合
123 a = set([1,2,3])
124 print(a)
125
126 #sort() --排序
127 a = [‘b‘,‘c‘,‘a‘]
128 a.sort()
129 print(a)
130
131 #str() --创建一个字符串
132 a = str("abcde")
133 print(a)
134
135 #sum() --求和
136 print(sum([1,2,3],3))
137 print(sum([1,2]))
138
139 #tuple() --元组
140 t = tuple([1,2,3,])
141 print(t)
142
143 #type() --返回对象的类型
144 a = 1
145 print(type(a))
146
147 #vars() --返回对象的属性和属性值的字典对象
148 class fo():
149     a = 1
150 print(vars(fo))
151
152 #zip()  --映射
153 x = [1,2,3]
154 y = [4,5,6]
155 z = [7,8,9]
156 zipped = zip(x,y,z)
157 print(list(zipped))
158 ‘‘‘

五、文件操作(open()函数)

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 ‘‘‘
 4 #read 按照字符来读的
 5 f = open(‘log.txt‘,‘r‘,encoding=‘utf-8‘)
 6 ret = f.read(2)  #按照字符读,不是按照字节
 7 f.close()
 8 print(ret)
 9
10 #tell() --查看当前指针的位置,按照字节来的
11 f = open(‘log.txt‘,‘r‘,encoding=‘utf-8‘)
12 f.read(2)
13 print(f.tell())  #按照字节,不是字符
14 f.close()
15
16 #seek --用来指定指针的位置,按照字节来的
17 f = open(‘log.txt‘,‘r‘,encoding=‘utf-8‘)
18 f.seek(3)
19 print(f.read())  #不加参数,全部读取,加参数,指定读取字符。是字符字符字符。。。
20 f.close()
21
22 #truncate()  --截取指针前面的字节,并且删除指针后面的数据
23 f = open(‘log.txt‘,‘r+‘,encoding=‘utf-8‘)
24 f.seek(3)
25 #print(f.read())
26 print(f.truncate())
27 f.close()
28 ‘‘‘

原文地址:https://www.cnblogs.com/lichengguo/p/9181987.html

时间: 2024-10-22 22:11:20

python3自动化学习03的相关文章

python3自动化学习02

概要:set集合. collections系列 (计数器.有序字典.默认字典.可命名元组.队列) 一 set集合 set集合:无序且不重复的元素集合 优势:1.访问速度快    2.天生解决了重复问题 set功能演示 1 #!/usr/bin/env python3 2 #author:Alnk 3 s1 = set([11,22,33,]) 4 s2 = set([33,44]) 5 ''' 6 #add --增加一个元素到集合 7 s1.add(55) 8 print(s1) 9 10 #c

python3自动化学习04

概要:迭代器.yield生成器.装饰器.递归函数.简单的算法(二分查找,二维数组).正则表达式基础 一.迭代器 迭代器是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束. 迭代器只能往前不能后退.迭代器的一大优点就是不要求事先准备好整个迭代的过程中所有的元素,迭代器仅仅是在迭代到某个元素才计算该元素,而在这之前或之后,元素可以不存在或者销毁,这个特点使它特别适用于遍历一些巨大或无限的集合. 特点: 1.访问者不需要关心迭代器内部的结构,仅仅需要通过 __n

python3自动化学习06

本节主要内容:面向对象介绍.特性.语法 一.面向对象介绍 1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 """ 4 编程范式: 5 编程是 程序员 用特定的语法+数据结构+算法 组成的代码来告诉计算机如何执行任务的过程 , 6 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马, 7 实现一个任务的方式有很多种不同的方式,对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 8

《python3自动化接口+selenium》10月13号开学!(2个月2000,包教会)

<python3自动化接口+selenium>10月13号开学!(2个月2000,包教会) 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 报名费2000一人(周期2个月) 联系QQ:283340479 个人成就: 1.个人博客,百度直接搜索:上海-悠悠博客 2.个人原创微信公众号:yoyoketang 3.已经在百度阅读上线的书,百度搜索:百度阅读,再搜索书名: <selenium webdriver基于源码案例>-作者:七月份的尾巴_葵花&上海-悠悠 <pyt

设计模式学习03—抽象工厂模式

1.动机与定义 工厂模式中,一个工厂仅仅能提供一个或一类产品,当产品种类较多,形成产品系列(比方我们要创建跨平台的button,菜单,文本框等等一系列GUI控件: 单纯使用工厂模式会产生大量工厂,并且后期维护也不方便,我们能够从产品中找到规律,假设产品等级相对固定,以后仅仅会新增产品族,那么我们就能够把整个产品族放到一个工厂创建,以后新增其它系统产品族也很方便,例如以下图: 这样的模式就是抽象工厂,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则须要面对多个产品等级结构,一个工厂等级结构能

Java学习03

Java学习03 1.java面试一些问题 一.什么是变量 变量是指在程序执行期间可变的数据.类中的变量是用来表示累的属性的,在编程过程中,可以对变量的值进行修改.变量通常是可变的,即值是变化的 二.什么是函数 1.实现特定功能的一段代码2.可以多次循环使用. 三.什么是数组 数组是用来存储相同数据类型的数据集合,可使用共同的名称来应用数组中的数据.数组可以存储任何类型的数据,包括原始数据类型和对象. 2.循环阅读的技巧 外层循环做一次,内层循环做一遍 3.1234转变为4321 int rig

ThinkPhp学习03

原文:ThinkPhp学习03 一.ThinkPHP 3 的输出      (重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出   想分配变量可以使用assign方法 public function index(){ $name="潘达"; $this->assign('name',$name); //将$name分配给变量name,从而让模板获得 $this->display(); } 模板获取 在对应的tpl下创建模块文件夹

【金阳光测试】Android自动化 -- 学习历程:MonkeyRunner原理初步

章节:自动化基础篇——MonkeyRunner原理初步 网易云课堂: http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=877115&courseId=712011 主要讲解内容及笔记: 一.理论知识和脚本演示 最佳方式是上官网文档去查看monkeyrunner的介绍,官网上不去,就找了一个本地的android 4.2 的查看,基本内容没啥变化 First,什么是MonkeyRunn

二维练习和函数学习03/13

二维练习和函数学习03/13     二维练习     1.      抽奖活动:输入n个手机号码,滚动号码,5秒钟后停止输出中奖人号码 Console.Write("请输入人数:"); int a = int.Parse(Console.ReadLine()); string[] sj = new string[a]; for (int i = 0; i < a; i++) { Console.Write("输入第" + (i + 1) + "个人