Python学习Day14 深浅拷贝、集合和函数
************************************深浅拷贝*********************************
浅拷贝:(只克隆第一层)
s=[[1,2],\'xx\',\'xx\'] 复杂的数据类型
s1=s 共享地址,改任何一个两个都会变
s2=s.copy() 地址指针指向列表,改变S2列表[1,2],S会变,改其余不变
浅拷贝只会拷贝第一层,二层三层地址共享
深拷贝:(全部克隆)
import copy
copy.copy(s)#就是浅拷贝 shallow copy
copy.deepcopy(s)#深拷贝
******************************* 集合*************************************
集合:把不同的元素组合在一起。
创建:关键字set(可变集合,可添加删除元素,本身为不可哈希)
s=set(\'alex li\') #{\'e\',\'x\',\'a\',\' \',\'i\' \'l\'} 自动去重,无序的
集合对象必须是一组可哈希的值,即不可变类型,如列表字典不行
不可变集合(frozenset),与上面相反
frozenset(‘yuan’)
访问集合:
for 循环遍历
集合更新:
s.add(\'uu\') #添加一个元素,‘uu’整体
s.update([\'ooops\',12]) #添加了o、p和s 和12,单独增加
s.remove(\'a\') #删除了a
s.pop() #随机删除一个元素
s.clear() #清空
del s #删除集合
集合操作符:
in,not in
等价和不等价(!=)
set(‘alex’)==set(‘alexexex’)
set(‘alex’)<set(‘alexwwww’)
关系测试:
a=set(【1,2,3,4,5】)b=set(【4,5,6,7,8】)
交集 intersection
a.intersection(b)=【4,5】(a&b)
并集 union
a.union(b) =[1,2,3,4,5,6,7,8] (a | b)
差集
a.difference(b)=[1,2,3] in a but not in b (a-b)
反向交集 (对称差集)
a.symetric_difference(b)=【1,2,3,6,7,8】 (a^b)
父集 超集
a.issuoerstar(b) a是否都包含b (>)
a.issubset(b) a是否是b的子集 (<)
**************************************函数****************************************
函数的特性:subroutine 子程序 procedures 过程
1.减少重复代码
2.方便修改,更易扩展
3.保持代码的一致性
函数的创建:
关键字——def
def 函数名字(参数1,参数2):#按顺序对应
执行代码
函数名字:可以展现要实现的功能,命名规则与变量命名规则一样
函数调用:
函数名字(参数1,参数2)
函数参数:
1。必须参数:按顺序对应
2.关键字参数:参数2=xx,参数1=xx。不需对应顺序
3.默认参数:def 函数名字(参数1,参数2=‘male’),默认参数2都是male,默认参数必须在最后
如果想改,调用时,函数名字(参数1,参数2)
4.不定常参数:
*args
def add(*args): (接受不定常参数,并做成元组)
print(args)
add(1,2) == (1,2)
def add(*args): (加法器)
sum = 0
for i in args:
sum+=i
add(*【1,2】)输入列表
**kwargs
def add(**kwargs): (接受不定常参数,并做成字典)
for i in kwargs:
print(‘%s:%s’%(i,kwargs[i]))
add(**{\'name\':\'alex"}) 传入一个字典
def f(*args,**kwargs): (可以拿到任意参数,位置固定,必须对应。无命名参数必须放左边,有命名参数(有键值对)必须放右边),默认参数放在*args,**kwargs的前面,因为他的优先级要高
必须参数>默认参数>args>kwargs
返回值:return
作用:1、结束函数;2、返回某个对象
注意点:1、没有return会默认返回none
2、return多个对象,那么python会帮我们吧多个对象封装成一个元组返回
***************************************************作用域****************************************************
(1)变量查找顺序:L_E_G_B,作用域局部>外层作用域>当前模块中的全局>python内置作用域
x=10 (Global 全局变量)
def f():
t=5 (enclosing外层作用域)
def inner():
count=7(local 局部作用域)
return 1
(2)只有模块、类、及函数才能引入新作用域
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字,nonlocal是python3新增的关键字,有了这个关键字,就能完美的实现闭包了
count = 10
def outer():
global count
print(count)
count = 100
print(count)
***********************************************高阶函数**********************************************************
函数名字是一个变量,变量可以赋值
def f:
XXX
foo = f (foo存储了f的内存地址,可以作为函数调用)
def faa(a,b,func)
faa(1,2,f)
1、函数名可以作为函数参数输入
2、函数名还可以作为函数的返回值
********************************************递归函数*********************************************************
1、调用自身函数
2、有结束条件
递归特点:
1、但凡用递归能写的程序,循环都可以解决
2、递归的效率在很多时候很低
eg:阶乘函数
def fact(n)
if n==1:
return 1
return n*fact(n-1)
***********************************内置函数******************************
abs()绝对值
eval()字符串转字典,计算机eval(‘1+2+3’)
frozenset()不可变集合
1.filter(function,序列)
将序列里的元素输入function,进行过滤,不能改变
2.map(function,序列)
将序列里的元素输入function,可以改变
3.reduce(需调用functools)(function,序列)
reduce(add,【1,2,3,4,5,6,7】)1,2放入add,得到结果与3放入add,得到结果与4放入add
4.lambda匿名函数
lambda x,y:x*y
以上是 Python学习Day14 深浅拷贝、集合和函数 的全部内容, 来源链接: utcz.com/z/387248.html