Python全栈day19(函数补充)
一,深浅拷贝
看拷贝列子day19-1.py
s=[1,'zhangsan','lisi']
#s2是s的拷贝
s2=s.copy()
#打印s2和s是一样的
print(s2)
#修改s2
s2[0]=2
#打印s是未变的
print(s)
#打印s2因为修改了所以有变化
print(s2) [1, 'zhangsan', 'lisi']
[1, 'zhangsan', 'lisi']
[2, 'zhangsan', 'lisi']
假如修改的元素是一个列表,源列表也会发生变化day19-2.py
s = [[1,2],'zhangsan','lisi']
s3=s.copy()
print(s3)
print(s)
s3[0][1]=3
#修改s3里面列表元素以后源列表也对应改变了
print(s3)
print(s) [[1, 2], 'zhangsan', 'lisi']
[[1, 2], 'zhangsan', 'lisi']
[[1, 3], 'zhangsan', 'lisi']
[[1, 3], 'zhangsan', 'lisi']
为什么会这样,因为第一次修改的是一个不可变元素对应的指针发生了变化,第二次s和s3指向的内存地址是一个可变的元素(列表)当列表发生改变,但是列表的内存地址没有改变s和s3的指向没有发生改变,所以修改s3的第一个元素列表对应的s的第一个元素列表也发生了改变。
这就是浅拷贝,浅拷贝只拷贝第一层
深拷贝等于克隆一份,需要单独的模块day19-4.py
import copy
L1 = [[1,2],3]
L2 = copy.deepcopy(L1)
print(L2) [[1,2],3]
深浅拷贝小结
- 深浅拷贝都是对源对象的复制,占用不同的内存空间
- 如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
- 如果源对象不止一级目录的话,源内可变元素(列表,字典)做任何改动,都要影响浅拷贝,但不影响深拷贝
- 序列对象的切片其实是浅拷贝,即只拷贝顶级的对象
二,集合
把不同元素整合在一起形成集合(元素不能重复,重复认为是一个)
创建集合的方法 set() 必须是可哈希的对象,单个元素不能是列表或者字典等不可哈希对象
集合分类:可变集合,不可变集合
可变集合(set):可添加删除元素,非可哈希的,不能用做字典的建,不能做其他集合的元素
不可变集合(frozenset):与可变集合恰恰相反 (可变集合不能作为字典的建不可变集合可以作为字典的建)
集合是无序的不能通过索引或者切片操作,可以通过for循环遍历或者通过in,not in判断是否在里面
更新集合
s.add() 添加一个元素
s.remove()移除指定元素
s.pop()随机删除一个元素
s.clear()清空(和删除不一样清空后还是有大括号的)
s.update()更新 接一个可迭代对象添加多个元素 之前的保留(接的是一个可迭代对象)
day19-5.py
li=[1,2,3]
s = set(li) print(s)
s.add(4)
print(s)
s.remove(4)
print(s)
s.update('hello')
print(s) {1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3}
{1, 2, 3, 'o', 'h', 'e', 'l'}
等价与不等价
print(set('hello')==set('hellohello')) True
子集与父集(父集要包含子集并且多于子集不能等于否则Python认为不包含返回False)
print(set('123')<set('1234')) True
交集,并集,差集day19-6.py
a = set([1,2,3,4,5])
b = set([4,5,6,7,8])
#以下两种方式求交集
print(a.intersection(b))
print(a&b)
#以下两种方法求并集
print(a.union(b))
print(a|b)
#in a but not in b (差集)
print(a.difference(b))
print(a-b)
#in b but not in a(差集)
print(b.difference(a))
print(b-a)
#除了交集把其余的取出来 对称差集或者叫反向交集
print(a.symmetric_difference(b))
print(a^b) {4, 5}
{4, 5}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3}
{1, 2, 3}
{8, 6, 7}
{8, 6, 7}
{1, 2, 3, 6, 7, 8}
{1, 2, 3, 6, 7, 8}
父集,子集day19-6.py
a = set([1,2,3])
b = set([1,2])
#判断是否a是否是b的父集
print(a.issuperset(b))
print(a>b)
#判断b是否是a的子集
print(b.issubset(a))
print(b<a) True
True
True
True
三,函数
a,定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
1.代码重用
2.保持一致性
3.可扩展性
b,函数的创建
#函数的定义
def f():
print('Hello World')
#函数的调用
f() 'Hello World
PS:函数的命名规则(和变量命名规则是一样的)
- 函数名必须以下划线或字母开头,可以包含字母下划线和数字,不能包含其他特殊符号
- 函数名是区分大小写的
- 函数名不能是保留字
c,形参和实参
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)
实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参
区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
与之前重复,未整理完整!
Python全栈day19(函数补充)的更多相关文章
- python全栈开发知识点补充for else和while else如果不是除正常以外的其他方式退出循环,那么else语句就会被执行。
如果不是除正常以外的其他方式退出循环,那么else语句就会被执行. 也就是循环体内没有break语句.return语句.和其他异常语句的执行. for else >>> for ...
- python全栈开发 生成器 :生成器函数,推导式及生成器表达式
python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...
- python全栈开发之匿名函数和递归函数
python 匿名函数和递归函数 python全栈开发,匿名函数,递归函数 匿名函数 lambda函数也叫匿名函数,即函数没有具体的名称.是为了解决一些功能很简单需求而设计的一句话函数.如下: #这段 ...
- 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】
点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...
- Python全栈之路目录结构
基础 1.Python全栈之路-----基础篇 2.Python全栈之路---运算符与基本的数据结构 3.Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数 4.Python全栈 ...
- 战争热诚的python全栈开发之路
从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...
- python 全栈开发,Day117(popup,Model类的继承,crm业务开发)
昨日内容回顾 第一部分:权限相关 1. 权限基本流程 用户登录成功后获取权限信息,将[权限和菜单]信息写入到session. 以后用户在来访问,在中间件中进行权限校验. 为了提升用户体验友好度,在后台 ...
- python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- Python全栈开发之目录
基础篇 Python全栈开发之1.输入输出与流程控制 Python全栈开发之2.运算符与基本数据结构 Python全栈开发之3.数据类型set补充.深浅拷贝与函数 Python全栈开发之4.内置函数. ...
随机推荐
- 使用c++的cocos2d-x-3.0rc1程序公布apk
(如今cocos2dx-x-3.0正式版已经出了.之前用的cocos2d-x-3.0rc1,就先用这个版本号吧) 0. 完毕C++项目 在cmd下使用cocos.py new命令,然后习惯性的在win ...
- Docker 监控的一点想法
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路. 1.关于监控的内容 监控宿主机本身 监控宿主机本身还是比较简单的,同其他服务器监控类似,对c ...
- action(二)
RemoveSelf :消失 CCFiniteTimeAction* action = CCSequence::create( CCMoveBy::create( , ccp(,)), CCRotat ...
- maven使用deploy发布到本地仓库
使用maven可以方便的开发好的jar包发布到本地仓库中,方便其他项目依赖使用,在pom.xml文件中添加如下的配置: <distributionManagement> <repos ...
- Unity3D学习(九):C#和C++的相互调用
前言 不知不觉已经一年了,这一年来一直忙于公司项目疯狂加班,很少有自己的时间写下东西.不过好在项目最近也步入正轨了,正好抽空写点东西记录下学到的一些东西. 公司项目是一个端游IP移植手游,端游是基于C ...
- 【Code::Blocks】windows 环境下编译 Code::Blocks(已修正)
Code::Blocks 在2012-11-25发布了最新的12.11版本,相比上一个版本(10.05),Code::Blocks 进行了许多改进和更新(Change log). 引用 Wikiped ...
- Java反射机制的基本概念与使用
本篇文章分为以下几个部分: 1.认识反射 2.反射的源头(Class类) 3.利用反射操作构造方法 4.利用反射调用类中的方法 5.反射中的invoke方法 6.利用反射调用类中的属性 反射在我们普通 ...
- 多个 label checkbox 组合 显示在同一个水平线上[前提Bootstrap框架]
<th align="left" valign="middle"> <label class="checkbox inline fo ...
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- 【UVa】Headmaster's Headache(状压dp)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...