zoukankan      html  css  js  c++  java
  • python变量

    变量无类型,对象有类型

    变量定义规则

    • 变量名只能是字符、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 变量名区分大小写
    • python3中,非ASCII的字符也可作为变量名
    • 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中的变量不需要类型声明。

    变量就是变量,它没有类型,我们所说的“类型”是指变量所指的内存中对象的类型。

    等号(=)用来给变量赋值。等号(=)运算符左边是变量名,右边是存储在变量中的值。

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    int_num = 100  # 赋值整形变量
    float_num = 1000.0  # 赋值浮点型
    name = "LuckyLye"  # 赋值字符串
    水果 = ['西瓜', '苹果', '香蕉']
    
    print(int_num)
    print(float_num)
    print(name)
    print(水果)

    实例结果:

    100
    1000.0
    LuckyLye
    ['西瓜', '苹果', '香蕉']

    python中所谓的变量赋值,其实没有赋值,只有引用。我们平时说的python变量其实只是标签,是引用。

    执行:

    values = [0, 1, 2]

    的时候,python首先在内存中创建一个对象[0, 1, 2],然后给它贴上名为values的标签。如果又执行:

    values = [4, 5, 6]

    python会在内存中创建另外一个对象[4, 5, 6],然后把刚才的那张名为values的标签从前面的[0, 1, 2]对象上撕下来,然后贴到[4, 5, 6]这个对象上。

    过程如图:

    image

    多个变量赋值

    python允许你同时为多个变量赋值

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    a = b = c = 1
    d, e, f = 2, 3, 'luckylye'
    g, h, i, j = [4, 5, 6, 7]
    
    print(a, b, c)
    print(d, e, f)
    print(g, h, i, j)

    实例结果:

    1 1 1
    2 3 luckylye
    4 5 6 7

    全局变量和局部变量

    1.定义在函数内部的变量名如果第一次出现,且在‘=’符号前,那么就可以认为是被定义为局部变量。在这种情况下,不论全局变量中是否用到该变量名,函数中使用的都是局部变量。

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    num = 100  # 全局变量
    def func():
        num = 200  # 局部变量
        print(num)
    func()

    实例结果:

    200

    输出结果为200,说明函数中定义的变量名num是一个局部变量,覆盖全局变量。

    如果函数内变量没有定义就使用,则会报错。

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    num = 100  # 全局变量
    def func():
        num += 100
        print(num)
    func()

    实例结果:

    UnboundLocalError: local variable 'num' referenced before assignment

    提示错误:局部变量num在赋值前被应用。由此证明这里定义的是一个局部变量,而不是全局变量

    2.函数内部的变量名如果是第一次出现,且出现在‘=’符号后面,且在之前已被定义为全局变量,则这里将引用全局变量。

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    num = 100  # 全局变量
    def func():
        x = num + 100
        print(x)
    func()

    实例结果:

    200

    如果变量名num在之前没有被定义为全局变量,则会出现错误提示:变量没有定义。

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    def func():
        x = num + 100
        print(x)
    func()

    实例结果:

    NameError: name 'num' is not defined

    3.函数中如果使用某个变量时,如果该变量名既有全局变零又有局部变量,则默认使用局部变量。

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    num = 100  # 全局变量
    def func():
        num = 200  # 局部变量
        x = num + 100
        print(x)
    func()

    实例结果:

    300

    4.在函数中将某个变量定义为全局变量时需要使用关键字global。

    实例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    num = 100
    def func():
        global num
        num = 200
        print(num)
    func()
    print(num)

    输出结果:

    200
    200

    作用域

        作用域简单的说就是一个变量的命名空间,代码中变量被赋值的位置,就决定了哪些范围的对象可以访问这个变量,这个范围就是命名空间。python变量赋值时产生了变量名,也产生了它的当前作用域。

    python的变量作用域一共有4种:

    • L(local)局部作用域
    • E(enclosing)闭包函数外的函数中
    • G(global)全局作用域
    • B(built-in)内建作用域

    以 L  --> E  --> G –> B的顺序查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就去全局找,最后到内建找。

    python中除了def/class/lambda外,其他如:if/elif/else/、try/except、for/while并不能改变其作用域。定义在他们之内的变量,外部还是可以访问。

    实例:

    if True:
        name = 'Luckylye'
    print(name)

    实例结果:

    Luckylye

    如果if被 def/class/lambda包裹,在内部赋值,就变成了此def/class/lambda的局部作用域了。

  • 相关阅读:
    Nacos安装部署文档
    mysql安装部署文档
    Postgresql数据库安装部署文档
    Sentinel安装部署文档
    Nginx安装部署手册
    golang 7. defer
    golang 6. 指针 *
    golang 5. import
    golang 4. 函数 func
    golang 3. 常量 const iota
  • 原文地址:https://www.cnblogs.com/fujiangong/p/5682138.html
Copyright © 2011-2022 走看看