美文网首页
《零基础上手Python爬虫系列》 - 04 变量与运算符

《零基础上手Python爬虫系列》 - 04 变量与运算符

作者: 聂云⻜ | 来源:发表于2020-02-13 23:44 被阅读0次

    本篇主要讲述变量、常量和运算符的基本使用,持续更新。

    变量

    1. 变量的定义

    变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

    变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:

    a_1 = 'string'
    
    # 不能以数字开头
    1_a = 'string'
      File "<input>", line 1
    SyntaxError: invalid decimal literal
    
    # 不能跟系统关键词重复
    import = 1
      File "<input>", line 1
        import = 1
               ^
    SyntaxError: invalid syntax
    

    这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。

    起名字最好有意义,可以用简洁的英文单词标识,多个单词用下划线分隔。

    2. 常量

    所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:

    PI = 3.14159265359
    

    但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法。

    2. 值类型

    理解变量在计算机内存中的表示也非常重要。当我们写:

    a = 1
    

    此时,Python解释器干了两件事情:

    • 在内存中创建了一个1的整型
    • 在内存中创建了一个名为a的变量,并把它指向1

    也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据

    >>> a = 1
    
    >>> id(a)
    4458617488
    
    >>> b = a
    >>> id(b)
    4458617488
    
    >>> a = 2
    >>> id(a)
    4458617520
    
    >>> a,b
    (2, 1)
    

    3. 引用类型

    >>> a = [1,2]
    >>> b = a
    >>> a[0] = '1'
    >>> b
    ['1', 2]
    
    >>> id(a)
    4480304448
    >>> id(b)
    4480304448
    

    int、str、tuple(不可改变的)是值类型

    # 重新赋值后地址发生变化
    >>> a = 1
    >>> id(a)
    4458617488
    
    >>> a = 2
    >>> id(a)
    4458617520
    
    # 字符串操作后地址也发生了变化
    >>> a = 'hello'
    >>> id(a)
    4506199792
    
    >>> a += 'python'
    >>> id(a)
    4513079344
    

    list set dict(可变的)是引用类型

    # 列表重新对整个列表赋值,会变化
    >>> a = [1]
    >>> id(a)
    4480316928
    
    >>> a = [2]
    >>> id(a)
    4480319168
    
    # 但是操作元素不会发生变化
    >>> a = [1,2]
    >>> id(a)
    4510858624
    
    >>> a[0] = 3
    >>> id(a)
    4510858624
    

    不可改变的类型,一旦赋值就不再变化,重新赋值给原来的变量名称,其实已经是一个新的变量了。 id() 标识一个地址,所对应的的地址变化,就是标识b已经不是原来的b了

    >>> hex(id(a))
    '0x10bb51a90'
    

    运算符

    1. 算数运算符

    >>> [1,2,3] * 3
    [1, 2, 3, 1, 2, 3, 1, 2, 3]
    
    # 除法,结果为浮点数, 所以整数的除法也是精确的
    >>> 1/1
    1.0
    
    # 整除
    >>> 1//2
    0
    
    # 求余
    >>> 5%2
    1
    
    # 幂运算
    >>> 2**3
    8
    

    2. 比较运算符

    # 单个字符用ASCII码比较,多个字符串依次比较字符ASCII码  
    >>> 'a' > 'b'
    False
    >>> ord('a')
    97
    >>> ord('b')
    98
    
    # 不止数字可以比较,比较的过程中是依次比较各个元素
    >>> [1,2] < [2,3]
    True
    >>> [1,2] < [2,3,1]
    True
    

    3. 赋值运算符

    >>> a = 1
    >>> a += 2
    >>> a
    3
    

    4. 逻辑运算符

    False

    >>> not False
    True
    >>> not not False
    False
    

    逻辑运算返回结果也会有转换关系,or

    # 结果跟顺序没有关系
    >>> [1] or []
    [1]
    >>> [] or [1]
    [1]
    
    # 判断结果后不再继续往后处理
    >>> 'a' or 'b'
    'a'
    >>> 'b' or 'a'
    'b'
    

    not 返回的是布尔型, or 和 and 会将结果转换

    >>> 'a' and 'b'
    'b'
    >>> 'b' and 'a'
    'a'
    

    5. 成员运算符 in 和not in

    >>> 'a' in 'abc'
    True
    >>> 'a' in ('a',)
    True
    >>> 'a' in ['a']
    True
    >>> a in {a}
    True
    
    # 字典的成员关系是针对key
    >>> 'a' in {'a':'b'}
    True
    >>> 'b' in {'a':'b'}
    False
    

    6. 身份运算符 is

    == 判断值是否相等,is比较两个变量的身份是否相同(类似PHP中的===)

    >>> a = 1
    >>> b = 1.0
    >>> a == b
    True
    >>> a is b
    False
    
    # 即便对于无序的集合,依然要完全一致
    >>> a = {1,2,3}
    >>> b = {2,1,3}
    
    >>> a
    {1, 2, 3}
    >>> b
    {1, 2, 3}
    >>> a == b
    True
    >>> a is b
    False
    

    判断类型

    >>> a = '123'
    >>> type(a) == str
    True
    
    # 优先使用
    >>> isinstance(a, int)
    False
    
    # 可以指定多个
    >>> isinstance(a, (int,str))
    True
    

    7. 位运算符

    >>> a = 1
    >>> b = 2
    >>> bin(a)
    '0b1'
    >>> bin(b)
    '0b10'
    >>> a & b
    0
    
    >>> a = 2
    >>> b = 3
    >>> bin(a)
    '0b10'
    >>> bin(b)
    '0b11'
    >>> a & b
    2
    

    8 ,运算符的优先级

    运算符 描述
    ** 指数 (最高优先级)
    ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
    * / % // 乘,除,取模和取整除
    + - 加法减法
    >> << 右移,左移运算符
    & 位 'AND'
    ^ 位运算符
    <= < > >= 比较运算符
    <> == != 等于运算符
    = %= /= //= -= += *= **= 赋值运算符
    is is not 身份运算符
    in not in 成员运算符
    not and or 逻辑运算符

    表达式的运算的优先级

    运算符的优先级

    特例:

    and 的优先级 > or

    可以添加括号来指定优先级,括号的优先级最高,加括号有利于代码的阅读

    相关文章

      网友评论

          本文标题:《零基础上手Python爬虫系列》 - 04 变量与运算符

          本文链接:https://www.haomeiwen.com/subject/qnerfhtx.html