zoukankan      html  css  js  c++  java
  • python学习之可变不可变&运算符&if

    昨日回顾

    问题一、变量在栈区和堆区中是怎么存放的

    x = 10

    当python执行上面的代码时,会发生以下事情:

    在内存的堆区中,会开辟一个内存空间,里面存放着变量值10;

    而在栈区中,会产生一个映射关系,将变量名x与10的内存地址0x0001关联起来;

    变量在堆区和栈区的存放方式如下:

    变量名与变量值的内存地址的映射关系存放于栈区;(可以简单理解为变量名存着值的内存地址)

    变量值存放于堆区;(内存管理回收的是堆区中的内容)

    拓展延伸:python中变量名的赋值(x=y)和函数的传参(print(x)),传递的都是栈区的数据,而栈区中存放的都是变量名和变量值的内存地址的映射关系,或者说叫变量名对值的引用,因此python中参数的传递都是引用传递。

    问题二、什么是直接引用和间接引用?

    直接引用:指的是从栈区出发,到堆区中能够直接引用到的内存地址

    间接引用:指的是从栈区出发,引用到堆区之后,需要进一步引用才能引用到的内存地址

    1、可变类型和不可变类型

    可变类型:值改变,id不改变,说明原值是可以修改的,证明原值是可以改变的;

    列表、字典 是可变类型

    不可变类型:值改变,id改变,说明是产生了新的值,原值根本就没有改变,证明原值是不可以被修改的;数字、字符串、元组、布尔值是不可变类型

    1.1不可变类型

    1.1.1 数字是不可变类型

    #****此例忽略小整数池的影响
    x = 10
    print(id(x))    #8791308814272
    x = 20
    print(id(x))    #8791308814592
    
    y = 10.3
    print(id(y))    #31414384
    y = 11.3
    print(id(y))    #5334000
    

    对于int和float型数据,值改变,id也改变,证明数字是不可变类型。

    1.1.2 字符串是不可变类型

    str_1 = 'abc'
    print(id(str_1))    #31172400
    str_1 = 'def'
    print(id(str_1))    #31254512
    

    值改变,id也改变,证明字符串是不可变类型。

    小结:

    在python中,数字(int和float)、字符串、布尔被设计成成不可分割的整体,不能被改变。

    1.2可变类型

    1.2.1列表是可变类型

    list01 = [11,22,33,44,55,66]
    print(id(list01))               #4842816
    list01[2] = 88
    print(id(list01))               #4842816
    

    列表的值修改了,但是id没有变,证明列表是可变类型。

    1.2.2字典是可变类型

    dic01 = {'name':'egon','age':18}
    print(dic01)                        #{'name': 'egon', 'age': 18}
    print(id(dic01))                    #38883712
    dic01.pop('age')
    print(dic01)                        #{'name': 'egon'}
    print(id(dic01))                    #38883712
    

    字典的值修改了,但是id没有变,证明字典是可变类型。

    小结:

    在python中,列表、字典属于容器类型,是可以被改变的。

    2、条件

    什么是条件?条件是在进行判断的依据;

    为什么要有条件?是为了让计算机能够像人一样在某种情况下,去干某件事情。

    条件可以是:比较运算符

    age = 18
    print(age > 16)  # 条件判断之后会得到一个布尔值
    

    条件可以是:True、False

    is_beautiful=True
    print(is_beautiful)
    

    隐式布尔值,所有的值都可以当成条件去用

    其中0、None、空(空字符串、空列表、空字典)=》代表的布尔值为False,其余都为真

    3、逻辑运算符

    3.1 not、and、or的基本使用

    not:就是把紧跟其后的那个条件结果取反

    把not与紧跟其后的那个条件是一个不可分割的整体

    print(not 16 > 13)
    print(not True)
    print(not False)
    print(not 10)
    print(not 0)
    print(not None)
    print(not '')
    

    and:逻辑与,and用来链接左右两个条件,两个条件同时为True,最终结果才为真

    print(True and 10 > 3)
    
    print(True and 10 > 3 and 10 and 0) # 条件全为真,最终结果才为True
    print( 10 > 3 and 10 and 0 and 1 > 3 and 4 == 4 and 3 != 3)  # 偷懒原则
    

    or:逻辑或,or用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,

    ​ 两个条件都为False的情况下,最终结果才为False

    print(3 > 2 or 0)
    print(3 > 4 or False or 3 != 2 or 3 > 2 or True) # 偷懒原则
    

    3.2 优先级not>and>or

    如果单独就只是一串and链接,或者说单独就只是一串or链接,按照从左到右的顺讯依次运算即可(偷懒原则)。

    如果是混用,则需要考虑优先级了。

    res=3>4 and not 4>3 or 1==3 and 'x' == 'x' or 3 >3
    print(res)
    
    res=(3>4 and (not 4>3)) or (1==3 and 'x' == 'x') or 3 >3
    print(res)
    
    res=3>4 and ((not 4>3) or 1==3) and ('x' == 'x' or 3 >3)
    print(res)
    

    4、成员与身份运算符

    4.1 成员运算符

    print("egon" in "hello egon") # 判断一个字符串是否存在于一个大字符串中
    print("e" in "hello egon") # 判断一个字符串是否存在于一个大字符串中
    print(111 in [111,222,33]) # 判断元素是否存在于列表
    

    判断key是否存在于字典

    print(111 in {"k1":111,'k2':222})
    print("k1" in {"k1":111,'k2':222})
    

    not in

    print("egon" not in "hello egon") # 推荐使用
    print(not "egon" in "hello egon") # 逻辑同上,但语义不明确,不推荐
    

    4.2 身份运算符

    is # 判断的是id是否相等

    5、流程控制之if判断

    代码块:

    1.代码块指的是同一级别的代码,python中用缩进相同的空格数来标识同一级的代码块。

    2.同一级别的代码块会按照自上而下的顺序运行。

    语法一:

    if 条件:#条件成立的情况下会执行的代码块

      子代码1

      子代码2

      子代码3

    ​ ............

    语法二:

    if 条件:#条件成立的情况下会执行的代码块

      子代码1

      子代码2

      子代码3

    else:#条件不成立的情况下会执行else包含的代码块

      子代码1

      子代码2

      子代码3

    语法三:

    if 条件1:#条件1成立的情况下会执行的代码块

      子代码1

      子代码2

      子代码3

    elif条件2:#条件2成立的情况下会执行的代码块

      子代码1

      子代码2

      子代码3

    elif 条件3:#条件3成立的情况下会执行的代码块

      子代码1

      子代码2

      子代码3

    else:#上述条件都不成立的情况下会执行的代码块

      子代码1

      子代码2

      子代码3

    score = input('请输入您的成绩:') # score="18"
    score=int(score)
    if score >= 90:
        print('优秀')
    elif score >= 80:
        print('良好')
    elif score >= 70:
        print('普通')
    else:
        print('很差,小垃圾')
    print('=====>')
    
  • 相关阅读:
    PHPMailer发送邮件失败:SMTP connect failed
    QQ邮箱开启SMTP服务的步骤
    php中PHPMailer发送带附件的电子邮件方法
    怎么获取smtp服务器用户帐号和密码
    How To Install Flash Player In Ubuntu 10.04 Lucid Lynx,install firefox flash plugin addon for ubuntu
    Rails 3.1 execjs and Could not find a JavaScript runtime
    railser
    Harmony: JavaScript And A DOM Environment In Ruby
    郭德纲继10月1日发微博感叹“暗箭起同行”,疑似暗讽姜昆“江郎才尽”后
    算命先生也用电脑了
  • 原文地址:https://www.cnblogs.com/leilijian/p/12431348.html
Copyright © 2011-2022 走看看