Python学习Day14 深浅拷贝、集合和函数

python

************************************深浅拷贝*********************************

浅拷贝:(只克隆第一层)

  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

回到顶部