zoukankan      html  css  js  c++  java
  • Python之路【第十一篇】:三目运算、不同数据类型的存储方式及深浅拷贝(copy模块)、列表推导式

    三目运算

    又叫做三元运算,是简单if.....else.....语句的一种替代格式,如:

    k = 1
    if k == 1:
        print(True)
    else:
        print(False)

    如上if....else语句输出结果为True,可以用如下三目运算代替:

    k = 1
    print(True) if k ==1 else False

    可以看到,三目运算就是简单if....else...语句的一种代替

    不同数据类型在内存中的存储方式

    str类型:

    s1 = 'hello'
    print(id(s1))
    print(id(s1.upper()))

    输出结果为:

    90146656

    89414152

    s1 = 'hello'
    print(id(s1))
    s2 = s1
    print(id(s2))

    输出结果为:

    79793328
    79793328

    从以上两个实例不难看出,对于str类型,创建之后,如果再修改,就是相当于在内存中重新创建了一次,但是把一个str的值赋值给另一个变量,这两个变量指向的是同一块内存区域

    s = '123'
    for i in s:
        print(id(i))

    输出结果为:

    86225944
    90615400
    90828512

    从该例我们可以看出,str中字符的存储地址在内存中是不连续的

    list类型:

    li1 = [1,2,3]
    li2 = li1
    print(id(li1))
    print(id(li2))

    输出结果为:

    85447048

    85447048

    li1 = [1,2,3]
    print(id(li1))
    print(id(li1.append(4)))

    输出结果为:

    78303624

    1376115800

    从以上两个实例可以看出,对于list类型,创建之后,如果再修改,就是相当于在内存中重新创建了一次,但是把一个list的值赋值给另一个变量,这两个变量指向的是同一块内存区域

    对于字典也有这样的结论,不在另外举例

    li = [1,2,3]
    for i in li:
        print(id(i))

    输出结果为:

    83387256
    83387232
    83387208

    从该例可以看出,list类型的数据,其元素如果是数字在内存中是连续存放的,如果是字符,元素的存放并不连续

    本想在这里探究一下存储的方式,但是细节太多,兵来将挡,水来土掩吧,用id直接查看他们的地址吧!

    深浅拷贝

    拷贝也分深浅,从字面意思来看,两种拷贝方式的不同就在于拷贝的程度深浅不一样

    浅拷贝:只拷贝最外面一层

    深拷贝:除去最内层全部拷贝

    在python中有一个copy模块,copy.copy()为浅拷贝,copy.deepcopy()为深拷贝

    对于数字和字符串来说,无论是深拷贝还是浅拷贝,id永远都是一样的,只要修改,就需要再创建一个
    对于列表、元组、字典等其他来说,浅拷贝只拷贝最外面一层,深拷贝比较彻底,但最后一层(最底层的字符串,数字)不拷贝

     列表推导式

    列表推导式又叫列表生成式,由名字不难看出,得出的结果是一个列表。

    当然生成一个列表也可以有别的一些方法,但是通过列表推导式可以写出很简洁的代码

    如:

    ret = [x*x for x in range(10)]
    print(ret)
    输出结果为:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

      在for的后面可以加条件判断,以满足一些特殊的需求,如:

    ret = [x*x for x in range(10) if x%2 == 0]
    print(ret)
    输出结果为:[0, 4, 16, 36, 64]

      

    ret = [m + n for m in 'abc' for n in 'xyz']
    print(ret)
    输出结果为:['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']

      通过上面的例子,因该不难掌握列表推导式

    三样东西有助于缓解生命的疲劳:希望、睡眠和微笑。---康德
  • 相关阅读:
    Boost练习程序(multi_index_container)
    mathematica练习程序(图像取反)
    【转】媒体播放器三大底层架构
    CentOS安装中文支持
    Retrofit2文件上传下载及其进度显示
    Andorid面试问题整理
    5分钟实现Android中更换头像功能
    Android中突发情况Activity数据的保存和恢复
    5分钟让你学会用最高效的工具解析所有Json
    android http 和https请求
  • 原文地址:https://www.cnblogs.com/ronghe/p/8358149.html
Copyright © 2011-2022 走看看