【04】Python 深拷贝浅拷贝 函数 递归 集合
2021-06-30 08:06
标签:and 其他 turn 函数 ase == 默认 ima union 运行结果如下: 42001160 运行结果如下: 36164360 36164360 36164552 1、b = a: 赋值引用,a 和 b 都指向同一个对象 2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。 1 import copy 2 l = [1,1,1,2,3,4,5] 3 l2 = copy.deepcopy(l)# 深拷贝 b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。 1 def db_connect(ip,port=3306): #1.位置参数,必填;2.默认值参数 2 print(ip,port) #函数体 运行结果: 1 2 3 1、结束函数,只要函数里面遇到return,函数立即结束运行 运行结果: ----------------------------- 运行结果: {} 运行结果: xiaojun 1、天生可以去重 1 jihe = set() 1 l=[1,1,2,2,3,3] 2 res = set(l) 3 print(res) 【04】Python 深拷贝浅拷贝 函数 递归 集合 标签:and 其他 turn 函数 ase == 默认 ima union 原文地址:https://www.cnblogs.com/momolei/p/9622524.html1 深拷贝浅拷贝
1.1 删除奇数
1 l1 = [1,1,1,1,2,3,4,5]
2 l2 = l1 #浅拷贝, l和l2实际指向同一个内存地址
3 print(id(l1)) #查看内存地址
4 print(id(l2))
5 for i in l2:
6 if i%2!=0:
7 l1.remove(i) #删除奇数
8 print(l1) #循环删list的时候,会导致下标错位,结果是不对的
42001160
[1, 1, 2, 4]1.2 浅拷贝
import copy
l1 = [1,1,1,1,2,3,4,5]
l2 = l1 #浅拷贝, l和l2实际指向同一个内存地址
l3 = l1.copy() #浅拷贝
print(id(l1), id(l2), id(l3))
ll1 = [[1,2,3],[4,5,6]]
ll2 = ll1 #浅拷贝, l和l2实际指向同一个内存地址
ll3 = ll1.copy() #浅拷贝
print(id(ll1), id(ll2), id(ll3))
36165704 36165704 36165640
1.3 深拷贝
2 函数
2.1 函数定义
1 def my3():
2 a = 1
3 b = 2
4 c = 3
5 return a,b,c
6
7 b,c,d = my3()
8 s = my3()
9 print(b,c,d)
10 print(s)
(1, 2, 3)2.2 return作用
2、返回函数处理的结果
1 def check_float(s):
2 ‘‘‘
3 这个函数的作用就是判断传入的字符串是否是合法的小数
4 :param s: 传入一个字符串
5 :return: True/false
6 ‘‘‘
7 s = str(s)
8 if s.count(‘.‘)==1:
9 s_split = s.split(‘.‘)
10 left,right = s_split
11 if left.isdigit() and right.isdigit():
12 return True
13 elif left.startswith(‘-‘) and left[1:].isdigit() 14 and right.isdigit():
15 return True
16 return False #上面的几个条件未满足,则会走到这一步
17
18 print(check_float(1.3))
19 print(check_float(-1.3))
20 print(check_float(‘01.3‘))
21 print(check_float(‘-1.3‘))
22 print(check_float(‘-a.3‘))
23 print(check_float(‘a.3‘))
24 print(check_float(‘1.3a3‘))
25 print(check_float(‘---.3a3‘))
2.3 可变参数
1 def send_sms(*args): #可变参数,参数组
2 #1、不是必传的
3 #2、它把传入的元素全部都放到了一个元组里面
4 #3、不限制参数个数
5 #4、它用在参数比较多的情况下
6 for p in args:
7 print(p)
8
9 send_sms()
10 print(‘-----------------------------‘)
11 send_sms(1861231231)
12 print(‘-----------------------------‘)
13 send_sms(1861231231,1232342,42342342)
1861231231
-----------------------------
1861231231
1232342
423423422.4 关键字参数
1 def send_sms2(**kwargs):
2 #1、不是必传的
3 #2、不限制参数个数
4 print(kwargs)
5
6 send_sms2()
7 send_sms2(name=‘xiaohei‘,sex=‘nan‘)
8 send_sms2(addr=‘北京‘,country=‘中国‘,c=‘abc‘,f=‘kkk‘)
{‘name‘: ‘xiaohei‘, ‘sex‘: ‘nan‘}
{‘addr‘: ‘北京‘, ‘country‘: ‘中国‘, ‘c‘: ‘abc‘, ‘f‘: ‘kkk‘}2.5 参数顺序
1 def my(name,country=‘China‘,*args,**kwargs):
2 #1、位置参数 2、默认值参数 3、可变参数 4、关键字
3 print(name)
4 print(country)
5 print(args)
6 print(kwargs)
7 my(‘xiaojun‘,‘Japan‘,‘beijing‘,‘天通苑‘,color=‘红色‘,
8 age=32)
Japan
(‘beijing‘, ‘天通苑‘)
{‘color‘: ‘红色‘, ‘age‘: 32}2.6 全局变量
1 name = ‘wangcan‘#全局变量
2 names = []
3 def get_name():
4 names.append(‘hahaha‘)
5 name = ‘hailong‘
6 print(‘1、函数里面的name‘,name)
7
8 def get_name2():
9 global name #声明name是全局变量
10 print(‘2、get_name2‘,name)
11
12 get_name2()
13 get_name()
14 print(names)
15 print(‘3、函数外面的name‘,name)
#运行结果:
2、get_name2 wangcan
1、函数里面的name hailong
[‘hahaha‘]
3、函数外面的name wangcan
1 name = ‘wangcan‘#全局变量
2 def get_name3():
3 name = ‘我是谁‘ #不会对全局变量产生作用
4 print(name)
5 get_name3()
6 print(name)
#运行结果:
我是谁
wangcan
2.7 函数调用
1 def db_connect(ip, user, password, db, port):
2 print(ip)
3 print(user)
4 print(password)
5 print(db)
6 print(port)
7
8 db_connect(user = ‘abc‘, port= 3306, db = 1, ip = ‘234234‘, password = ‘123456‘) #记不住顺序可以这样调用
9 db_connect(‘192‘,‘root‘, db = 2, password = ‘234‘, port = 45)#这样也行, 混搭, 但‘192‘,‘root‘必须按顺序写在前面
3 递归
函数自己调用自己
递归最多999次
效率没有循环高1 #阶乘 1 × 2 × 3 × ... × n
2 def fact(n):
3 if n==1:
4 return 1
5 return n * fact(n - 1)
4 集合
2、集合是无序
#运行结果:集合
{1, 2, 3}
4.1 交集、并集、差集、对称差集
1 xingneng =[‘tanailing‘,‘杨帆‘,‘liurongxin‘,‘小黑‘]
2 zdh = [‘tanailing‘,‘杨帆‘,‘liurongxin‘,‘小军‘,‘海龙‘]
3 xingneng = set(xingneng)
4 zdh = set(zdh)
5 #取交集
6 res1 = xingneng.intersection(zdh)#取交集
7 res2 = xingneng & zdh #取交集
8 #取并集
9 res3 = xingneng.union(zdh) #取并集,把2个集合合并到一起,然后去重
10 res4 = xingneng | zdh
11 #取差集
12 res5 = xingneng.difference(zdh) #取差集,在a里面有,在b里面没有的
13 res6 = xingneng - zdh #取差集
14 #取对称差集
15 res7 =xingneng.symmetric_difference(zdh)#两个里不重复的值
16 res8 = xingneng ^ zdh
17
18 print(res1)
19 print(res2)
20 print(res3)
21 print(res4)
22 print(res5)
23 print(res6)
24 print(res7)
25 print(res8)
#运行结果
{‘liurongxin‘, ‘杨帆‘, ‘tanailing‘}
{‘liurongxin‘, ‘杨帆‘, ‘tanailing‘}
{‘tanailing‘, ‘liurongxin‘, ‘小军‘, ‘海龙‘, ‘杨帆‘, ‘小黑‘}
{‘tanailing‘, ‘liurongxin‘, ‘小军‘, ‘海龙‘, ‘杨帆‘, ‘小黑‘}
{‘小黑‘}
{‘小黑‘}
{‘海龙‘, ‘小军‘, ‘小黑‘}
{‘海龙‘, ‘小军‘, ‘小黑‘}
4.2 其他方法
1 import string
2 l1 = set(string.ascii_lowercase)
3 l2 = {‘a‘,‘b‘,‘c‘}
4 print(l2.issubset(l1)) #子集
5 print(l1.issuperset(l2)) #父集
6 print(l1.isdisjoint(l2)) #有交集,返回False, 没有交集,返回True
#运行结果
True
True
False
1 l2 = {‘a‘,‘b‘,‘c‘}
2 l2.add(‘s‘) #增
3 print(l2)
4
5 l2.remove(‘a‘) #删
6 print(l2)
7
8 l2.pop()#随机删
9 print(l2)
#运行结果:
{‘c‘, ‘a‘, ‘b‘, ‘s‘}
{‘c‘, ‘b‘, ‘s‘}
{‘b‘, ‘s‘}
上一篇:Python学习—json模块
下一篇:Java 基础:继承中的执行顺序