美文网首页
Python基础 --- 变量 (1)

Python基础 --- 变量 (1)

作者: 比卡_没有丘 | 来源:发表于2019-03-23 14:49 被阅读0次

    一、变量

    1.变量的声明

    python语言是动态语言

    • 变量不需要事先声明
    • 变量的类型不需要声明

    1.1 变量的概念

    每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
    在 Python 中,变量就是变量,它没有类型,我们所说的 类型是变量所指的内存中对象的类型。
    等号(=)用来给变量赋值。
    等号(=)运算符左边是一个变量名,等号(=)运算符右边是其指向的具体的值。

    a = 1
    a = '千锋'
    

    1.2 变量的赋值

    python 中使用等号 = 对变量进行赋值,。
    等号左边被称为变量名,等号右边称为变量的值,确切的说是对象

    n = 5
    

    2. 变量命名规则

    2.1变量命名整体规则

    可以包含以下字符

    • 大小写字母(a-z,A-Z)
    • 变量名区分大小写(a 和 A 是不同的变量)
    • 数字(0-9)\color{red}{不可以以数字开头}
    1a = 'hh'
    //显示语法错误
    SyntaxError: invalid syntax
    
    • 下划线(_)

    2.2变量命名整体规则

    • 不要以单下划线和双下划线开头;如:_user或 __user
    • 变量命名要易读;如:user_name,而不是username
    • 不用使用标准库中(内置)的模块名或者第三方的模块名
      不要用这些 Python 内置的关键字:
    >>> import keyword
    >>> keyword.kwlist
    ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
    
    > 上面打印出来的数据在 Python 中被称为列表, 列表是 Python中一种数据结构。关于数据结构,后面的章节会详细说明。
    >列表的都是 Python3 中的关键字。
    
    #可以使用一下方法验证,返回 True 就是 Python 的关键字
    >>> keyword.iskeyword('del')
    True
    >>>
    

    3. 变量命的赋值与传参

    在 python 中究竟该如何正确理解变量的赋值过程呢?

    s = 'hello'
    
    

    以上的变量赋值,应该说成把变量分配给对象更合理。

    hello 这个字符串对象会在内存中先被创建,之后再把变量名 s 分配给这个对象。

    image

    所以要理解 Python 中的变量赋值,应该始终先看等号右边

    对象是在右边先被创建或者被获取,在此之后左边的变量名才会被绑定到对象上,这就像为对象贴上了标签。

    变量名本质上是对象的标签或者说是对象的名字,当然一个对象可以有多个标签或者名字
    比如: 张三 和 小张 指的都是同一个人

    请看下面的代码示例:

    a = 1
    b = a
    a = 2
    print(b)  # b 会是 ?
    
    

    a = 1 时如下图:

    image

    b = a 时如下图:

    image

    a = 2 时如下图:

    image

    上面的 b = a 我们称它为 传递引用,此时对象会拥有两个名称(标签) ,分别是 ab

    s1 = 'hello'
    s2 = s1
    print(s1 is s2)
    ------------------结果----------------------------
    "H:\Python 笔记文件\venv\Scripts\python.exe" "H:/Python 笔记文件/src/变量.py"
    True
    

    4.变量的多元赋值

    在 Python3 中你可以这样给变量赋值

    In [10]: a, b, c = 'abc'
    
    In [11]: a
    Out[11]: 'a'
    
    In [12]: b
    Out[12]: 'b'
    
    In [13]: c
    Out[13]: 'c'
    -------------ipython模式-------
    案例一
    In [1]: s = 'abc'
    
    In [2]: s= 'abc+.'
    
    In [3]: a,b,c,d,e=s
    
    In [4]: e
    Out[4]: '.'
    
    In [5]: b
    Out[5]: 'b'
    案例二
    //星号表达式:执行后讲剩余定义量放入列表
    In [8]: a,b,li = 'hello' , 'word' ,100, 200
    In [10]: a,b,*li = 'hello' , 'word' ,100, 200
    
    In [11]: li
    Out[11]: [100, 200]
    
    --------------丢弃部分赋值------------------
    In [1]: a ,b,*_ = 'hello','word',100,200
    
    In [2]: _
    Out[2]: [100, 200]
    
    In [3]: a
    Out[3]: 'hello'
    
    In [4]: _
    Out[4]: 'hello'   //只有当上次无查询时才显示丢弃值
    -----------列表部分显示-----------------
    In [5]: a ,*b ,c = 'hello'
    
    In [6]: b
    Out[6]: ['e', 'l', 'l']
    
    

    假如你需要对一个序列类型中的数据进行一一解开赋值,那就需要等号左边的变量名和序列类型数据中的元素个数相同。

    这种多元赋值方式在 Python 中也可以称为元组解包。

    1 . 只要要其中的一部分
    有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况 Python 并没有提供特殊的语法。 但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了。

    In [22]: data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
    
    In [23]: _, shares, price, _ = data
    
    In [24]: shares
    Out[24]: 50
    
    In [25]: price
    Out[25]: 91.1
    

    在这里必须保证你选用的那些占位变量名在其他地方没被使用到。
    这里采用了英文的短下划线 _ 作为临时变量名。
    这样懂行的人看到这个,就会知道在之后的代码中将不会再次用到此变量。

    2. 只要第一个

    In [14]: s, *_ = ['shark', 18, 100]
    
    In [15]: s
    Out[15]: 'shark'
    
    • 是 python3 中的一个表达式,他可以把没有明确指出元素搜集起来。
      可以称它为 星号解压语法

    3. 只要最后一个

    In [16]: *_, score = ['shark', 18, 100]
    
    In [17]: score
    Out[17]: 100
    

    4. 要第一个,其他的都放到列表中

    In [19]: name, *info = ['shark', 18, 100]
    
    In [20]: name
    Out[20]: 'shark'
    
    In [21]: info
    Out[21]: [18, 100]
    

    值得注意的是上面解压出的 info 变量永远都是列表类型,不管解压的数字的数量是多少(包括 0 个)
    你可以试着把等号左边的两个调换一下位置_

    5. 嵌套的也好使

    In [28]: record = ('xiguatian', 50, 123.45, (12, 18, 2012))
    
    In [29]: name, *_, (*_, year) = record
    
    In [30]: name
    Out[30]: 'xiguatian'
    
    In [31]: year
    Out[31]: 2012
    

    6. 用于 字符串的分割

    In [35]: line = 'nobody:x:99:99:Nobody:/:/sbin/nologin'
    
    In [36]: name, * fields, sh = line.split(":")
    
    In [37]: name
    Out[37]: 'nobody'
    
    In [38]: sh
    Out[38]: '/sbin/nologin'
    

    7. 解压迭代元素为可变长元组的序列

    records = [
        ('foo', 1, 2),
        ('bar', 'hello'),
        ('foo', 3, 4),
    ]
    
    def do_foo(x, y):
        print('foo', x, y)
    
    def do_bar(s):
        print('bar', s)
    
    for tag, *args in records:
        if tag == 'foo':
            do_foo(*args)
        elif tag == 'bar':
            do_bar(*args)
    -------------------执行结果:----------------------
    foo 1 2
    bar hello
    foo 3 4
    

    5. Python 中对象(变量的值)都有三个特性

    # 唯一标识,是对象在内存中的整数表示形式,在 CPython 中可以理解为# 内存地址
    # 可以用 id 这个函数查看 
    id(10)    # 直接给一个对象
    
    id(n)      # 给你变量名
    
    # 类型, 对象都有不同的类型,用 type 这个函数查看
    type(10)
    
    type(n)
    # 值,对象本身
    10
    

    案例展示

    s1 = 'hello'
    s2 =s1
    idx = id(s1)
    print(idx)
    print(id(s2))
    print(type(s1))
    <class 'str'>  //字符串类型
    

    相关文章

      网友评论

          本文标题:Python基础 --- 变量 (1)

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