• python基础知识(三)


    摘要:主要涉及新数据类型set集合、三元运算、深浅拷贝、函数基础、全局变量与局部变量

    一、set --> 无序,不允许重复的集合 不允许重复的列表,
       1,创建
        s = set() 接收一个可迭代参数
         l = [11,22,11,22] s = set(l) --> print s --> {11,22}
        s = {11,22,33}
        创建空集合 默认使用 s = set()
       2,方法
        .add()  添加一个元素
        .clear()
        a.difference(b)  a中存在,b中不存在,返回新值,变量接收
        a.difference_update(b)  a中存在,b中不存在,a更新
        .discard()  移除,不存在不报错
        .remove()  移除,不存在报错
        .pop() 移除,并可以把移除元素接收称为新变量
        .intersection() 交集 --> 返回交集部分并形成新变量
        a.intersection_update(b) ---> 返回a与b的交集,并把它更新为a
        a.isdisjoint(b) --->  a 与 b 没有任何交集 才会返回True,否则都为False
        a.issubset(b) ---> 询问a 是 b的 子集合,返回True or False
        a.issuperset(b) ---> 询问a 是 b的 父集合,返回True or False
        a.symmetric_difference(b) ---> 判断a 与 b 集合的差别之处,并把所有的返回生成新变量
        a.symmetric_difference_update(b)  ---> 判断a 与 b 集合的差别之处,并把所有差别来更新a
        .union() ---> 把2哥集合 组合成1个集合
        a.update(b) ---> 把a 与 b 集合 组合为1个集合,并更新为a

    二、三元运算/三目运算   

      if 1==1:    

        print('alex')   

      else:    

        print('ethan')

       转成三元运算形式 --> name='alex' if 1==1 else 'ethan' --> print(name)

       变量=值1 if 条件成立 else 值2

    三、深浅拷贝:

       数字,字符串的修改:就是在内存中重新创建,数字,字符串或是赋值,只要是拷贝,无论深拷贝 还是浅拷贝 ,id都是一样的

       其他 列表,元组,字典:深拷贝:除了最后一层字符串或是数字无需拷贝,地址不变外,其他的所有层都copy 产生新的id地址    

                 浅拷贝:只拷贝最外面一层,其余层id都不变

    四、函数:  

     1,定义函数    关键字 def --> 函数名():   

     2,返回值    函数里不设置return,默认返回NONE    函数里设置return,调用函数的返回值就是return之后的值    

      一旦遇到return 函数return以下代码不再执行,函数执行了return语句,那么函数的生命就结束了,   

     3,参数    

      形参、实参:

      普通参数,默认数量要一致,并且一一对应    

      指定参数: 执行函数时,指定参数    

      默认参数:定义函数时设置默认值,调用函数时,可传可不传,传的话就覆盖默认值,默认参数放在参数尾部    def func(a1,a2,a3='ethan')  

          动态参数:实参传几个,就接收几个       

        *args 得到的是元组 tuple ,传的参数为元组元素         

         **kwargs ---> 需要传成 k1=123,k2=456 这种键值对形式,得到的是字典      

      万能参数: *args,**kwargs    

          例1 --> def f1(*args):       

                print (args,type(args))

                 l1 =[11,22,33]     

              f1(l1) --> ([11,22,33],)      

              f1(*l1) --> (11,22,33)

                 f1(123,456,[12,32]) ---> (123,456,[12,32])

            例2 --> def f2(**kwargs):       

                print (kwargs,type(kwargs))

                 f2(k1=123,k2=345)  ---> {'k1':123,'k2':345}   

    4,为动态参数传入 列表,元组,字典类型的参数    

    **************************** 例题 *****************************   

     list_new = [11,22,33]    tuple_new = (44,55,66)    dict_new = {'k1':234,'k2':345}

     如果1, def f1(*args):       

          print(args)

             def f2(**kwargs):       

          print(kwargs)

     f1(list_new) ---> ([11,22,33],)      f1(tuple_new) ---> ((44,55,66),)      f2(dict_new) ---> ({'k1':234,'k2':345},)

     f1(*list_new) ---> (11,22,33)      f1(*tuple_new) ---> (44,55,66)      f2(**dict_new) ---> {'k1':234,'k2':345}

    五、局部变量,全局变量:    

      规则:命名时全局变量大写,局部变量小写    

      局部变量:仅仅在定义的函数部分使用 --> 修改为全局变量 global

      

      对于 set集合、列表、字典等 作为参数进行传递,传的是引用,id不变,不是新创建   

      对于def 函数,一旦参数args 在代码段里使用了 args = xxxx 相当于在内存里重新创建,导入的实参跟这个args新赋值没啥关系

  • 相关阅读:
    看完这篇文章,对采用.Net做网站的信心大增
    sqlserver 使用游标存储过程分页
    ViewState慎用
    [zz] C++智能指针循环引用解决
    cello 有关trigger
    cello 把事件全部统一起来,Event,StateEvent,ActionEvent
    libvirt 错误FAQ
    cello collector中为什么要设置frame_work_in_machine
    比较好的一些句型
    一些疑问
  • 原文地址:https://www.cnblogs.com/ethancui/p/5530685.html
Copyright © 2020-2023  润新知