zoukankan      html  css  js  c++  java
  • 拷贝,集合,函数,enumerate,内置函数

    1.拷贝

      字符串和数字、赋值 id一样

    import copy   #提供拷贝功能
    copy.copy() #原来的和现在的一起修改,不用修改时用浅copy,节省内存,复制最外层
    copy.deepcopy() #只修改现在的,复制所有,除最内层

    2.集合

    1).无序且不重复的集合
    2).访问速度快
    3).天生解决重复问题
    s=set()  #创建空集合专用
    s={11,22,33,44}
    
    s1=set(['alex','eric','tony'])  #转换:可以是元组、列表、字符串
    
    s1.add('alll')                  #增加元素,原集合
    s1.update()          #可增加多个元素
    
    s2=s1.difference(['alex','eric'])#生成新的集合,删除相同元素,不改变原集合A-(AnB)
    
    print(s2)
    s1.difference_update(['alex','eric'])    #删除相同元素,修改原集合
    s.discard()  #移除指定元素
    
    
    s2.pop()  #1.随机删除一个元素2.把元素赋值给ret,有返回值
    print(s2)
    s1.remove('alll') #移除指定的,
    print(s1)
    
    old=set(old_dict.keys())
    new=set(new_dict.keys())
    updata_set=old.intersection(new)   #取交集,并更新自己AnB
    ret=old.isdisjoint(new) #有交集是False,没交集是True
    old.issubset(new) #是否是子集
    old.issuperset(new)  #是否是父集
    old.union(new)  #取并集
    
    deleat_set= old.symmetric_difference(updata_set)   # 并-交,拿出所有不一样的 AuB-AnB
    
    add_set=new.symmetric_difference(updata_set)       #并-交,

    3.三元运算

    用于简单的if语句

    # r=1 if True else False   # r=值1 if 条件 else 值2
    # print(r)

    4.函数的返回值

    def mail(user):
        ret=True
        try:
            n=m #失败
        except Exception:
            ret=user
        return ret    #成功返回123,失败返回456 #返回值,结束子程序
    ret=mail('xxx')
    print(ret)

    返回给mail()

    4.1两个参数

    def show(rr,yy=999):  #默认参数yy=999  #默认参数必须放在最后
        print(rr,yy)
    show(11,22)  ##指定参数show(yy=11,22)

    4.2动态参数

    #动态参数  *arg 多个参数,默认输出是元组
    #        **arg 多个参数,默认输出是字典  show(n1=11,n2=22)   传参数要有key value
    # *arg,**arg      show(11,22,33,n1=11,n2=22)前几个放进元组,后几个放进字典1.一个星在前,两个星放后面2.执行时按顺序
    #                l=[11,22,33]  d={'n1':88,'n2':'hh'}     show(*l,**d)
    #动态参数实现字符串格式化
    '''
    s1='{0} is {1}'
    l=['kk','ll']
    result=s1.format(*l)
    '''
    '''
    s1='{name} is {acter}'
    l={'name':'kk','ll':'hh'}
    result=s1.format(**l)
    '''

     4.3函数传参数

    #函数传参,传引用。java,c#在形参前加ref或out,不加相当于再创建一份值
    
    def fun(args):
        args.append(123)
        
    li=[11,22]
    fun(li)
    print(li)

    5.练习

    5.1集合

    # 数据库中原有
    old_dict = {
        "#1":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
        "#2":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 }
        "#3":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 }
    }
    
    # cmdb 新汇报的数据
    new_dict = {
        "#1":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 800},
        "#3":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 }
        "#4":{ 'hostname':'c2', 'cpu_count': 2, 'mem_capicity': 80 }
    }
    m=[]
    n=[]
    for i in old_dict:
        m.append(i)
    for i in new_dict:
        n.append(i)
    
    old_set=set(m)
    new_set=set(n)
    #更新
    updata_set=old_set.intersection(new_dict)   #取交集
    #删除
    del_set=old_set.symmetric_difference(updata_set)
    #新建
    new=new_set.symmetric_difference(updata_set)
    View Code

    5.2简述普通参数、指定参数、默认参数、动态参数的区别

    # 1、简述普通参数、指定参数、默认参数、动态参数的区别
    # 普通参数:分为形参和实参
    # 指定参数 :在实参中指定参数的值
    # 默认参数:在形参中定义参数的默认值
    # 动态参数:可接收任意数量,任意类型的参数
    '''
    def func(*args):
        print args
    
    # 执行方式一
    func(11,33,4,4454,5)
    
    # 执行方式二
    li = [11,2,2,3,3,4,54]
    func(*li)
    '''
    '''
    def func(**kwargs):
        print args
    
    
    # 执行方式一
    func(name='wupeiqi',age=18)
    
    # 执行方式二
    li = {'name':'wupeiqi', age:18, 'gender':'male'}
    func(**li)
    '''
    '''
    #动态参数  *arg 多个参数,默认输出是元组
    #        **arg 多个参数,默认输出是字典  show(n1=11,n2=22)   传参数要有key value
    # *arg,**arg      show(11,22,33,n1=11,n2=22)前几个放进元组,后几个放进字典1.一个星在前,两个星放后面2.执行时按顺序
    #                l=[11,22,33]  d={'n1':88,'n2':'hh'}     show(*l,**d)
    '''
    View Code

    5.3写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数

    a='123ssdf  *_'
    digital=0
    alphabet=0
    space=0
    others=0
    for i in a:
        if i.isdigit():
            digital+=1
        elif i.isalpha():
            alphabet+=1
        elif i.isspace():
            space+=1
        else:
            others+=1
    print('digital=%d,alphabet=%d,space=%d,others=%d'%(digital,alphabet,space,others))

    5.4写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

    def str_len():
        a=raw_input('请输入字符串')
        if len(a)>5:
            print('长度大于5')
        else:
            print('长度不大于5')
    def list_len():
        a=raw_input('请输入列表')
        if len(a)>5:
            print('长度大于5')
        else:
            print('长度不大于5')
    def tuple_len():
        a=raw_input('请输入字符串')
        if len(a)>5:
            print('长度大于5')
        else:
            print('长度不大于5')
    '''  

    5.5写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。

    def a():
        b=raw_input('请输入字符串或列表或元组:')
        if all(b)==True:
            print('无空内容')
        else:
            print('有空内容')
    

    5.6写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

    def a():
        b=[1,2,3,4]
        if len(b)>2:
            c=b[:2]
            return c

    5.7写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

    def a():
        b=[1,2,3,4,5,6]
        c=[]
        i=1
        while i<=len(b):
            c.append(b[i])
            i+=2

    5.8写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

    def dir_updata():
        dic={"k1": "v1v1", "k2": [11,22,33,44],}
        for i,j in dic.items():
            if len(j)>2:
                dic[i]=j[:2]
        return dic
    
    print(dir_updata())
    View Code

    5.9写函数,利用递归获取斐波那契数列中的第 10 个数,并将该值返回给调用者。

    def fun(k):
        # while b[k]<30:
        while k<9:
            a=b[k]+b[k+1]
            b.append(a)
            fun(k+1)
            return b
    b=[0,1,]
    print(fun(0))
    print(b[9])

     6.lambda 表达式

    func=lambda a:a+1   #冒号前是参数,后面表达式,作为return值
    ret=func(99)
    print(ret)

    7.字节和字符串的转换

     b=bytes(a,encoding='utf-8') #字符串转成字节
    # c=str(b,encoding='utf-8') #字节转字符串
    #一般字符串操作形成新的内容,列表,字典一般对自身进行操作
    '''
    for i in '刘讲座':
        zijie=bytes(i,encoding='utf-8')  #1.转化为字节,并制定编码方式
        print(zijie)
        for j in zijie:      #16进制字节经for循环会转化为10进制
            print(j)
            print(bin(j))   #bin 10进制转2进制

    8.enumerate可把列表转字典

    相当于给列表加一列元素
    # new_dic=dic(enumerate(li,1))

    9.内置函数(不需要导入模块)

    9.1  abs()  

               #绝对值

    9.2  all([1,2,3,4])

        #所有值是真才是真#假:0 None、空字符串、空列表、空字典、空元组是否为真

     #用bool查看是否为真
      any()  #一个为真就为真
     

    9.3进制转换

    bin()#二进制
    hex()#10进制转16进制
    oct()#10进制转8进制
    
    #其他进制转10进制
    i=int('0b11',base=2)
    i=int('0o11',base=8)
    i=int('0x11',base=16)

    9.4  callable,是否可执行

    f=lambda x:x+1
    callable(f)==True#是否可执行

    9.5

    chr()#数字转ascii里的字符
    ord()#ascii字符转数字

    9.6 random随机数

    import random
    random.randint(1,99)#输出1到99的随机数
    随机验证码:1.随机数2.chr
    random.randrange(65,91) #大写字母
    random.randrange(97,123) #小写字母
    #产生验证码
    
    import  random
    
    temp=''
    for i in range(6):
        num=random.randrange(0,4) #每一位数字、小写、大写字母产生的概率(不依赖位数i)
        if num==3:                          #数字产生的概率
            rad1=random.randrange(0,10)
            temp+=str(rad1)
        elif num==1:                        #小写字母产生的概率
            rad2=random.randrange(97,123)
            c1=chr(rad2)
            temp+=c1
        else:                                 #大写字母产生的概率
            rad2=random.randrange(65,91)
            c1=chr(rad2)
            temp+=c1
    print(temp)

    9.7  divmod

    r=divmod(10/3)返回商和余数(3,1)

    9.8  eval、exec

    eval('6*8')#计算字符串等式    #有返回值
    exec('for i in range(10):print(i)')  3执行代码无返回值

    9.9  filter #过滤筛选,符合条件留下

    f1=lambda x:x>22
    ret=filter(f1,[11,22,33,44])   #参数:函数,可迭代的对象
    for i in ret:
        print(i)

    9.10    map #筛选,得结果,对所有数操作并返回值

    ret=map(lambda x:x+1 if x%2==0 else x,[11,22,33,44])
    for i in ret:
        print(i)

    9.11  round、sum、sorted

    # round()#四舍五入
    # sum()#求和
    # sorted()#数字和字符串不能混合比较,数字从小到大排,字母按ascii码排

    9.12  判断对象的类型  isinstance

    li=[1,2]
    r=isinstance(li,list)
    print(r)

     

     

  • 相关阅读:
    用redis实现分布式锁
    mac下Nginx+lua模块编译安装
    ESXi5 中克隆Linux虚拟主机的网络配置
    DOS命令中的For
    让delphi解析chrome扩展的native应用
    C语言 cgi(3)
    C语言 cgi(2)
    C语言cgi(1)
    c++ input,output
    Array of Objects
  • 原文地址:https://www.cnblogs.com/wanghzh/p/5471336.html
Copyright © 2011-2022 走看看