• Python每日一练 02


    Python每日一学 02——对象与变量

    一、对象

    Python中所有数字、序列、集合、映射、类、实例、异常、模块、类与类的实例、函数、方法、布尔值、空值等都被称为对象。

    二、对象属性

    每个对象都有3个基本属性:

    类型(type)

    身份标识(id)

    值(value)

    type(object) 函数可以返回对象 object 的数据类型,对象一旦创建其类型便不可再变。

    id(object) 函数可返回表示对象object的身份标识,也就是系统为这个对象分配的内存的首地址编号,用一个整数表示。对象创建后,其身份标识 id 绝对不会改变。

    value就是这个对象存储的值。

    有些对象的值可以改变,称为可变数据类型,与之相对,值不可以改变的对象称为不可变数据类型。

    print(type(500))  # 类型为:整型 
    print(id(500))    # 内存地址为:139798173271824,与机器有关,每次运行不同
    
    • 1
    • 2
    
    139798173271824
    
    • 1
    • 2

    程序先创建一个整数对象“500”,500 称为这个对象的值,该对象的数据类型为整型int,可用函数type(500)来获取。系统会为其分配一个内存区域,可用函数id(500)获取,返回值“2562179721328”为该对象在内存地址的起始编号。
    在这里插入图片描述

    每个对象除了这三个基本属性以外,在使用过程中,用户经常会通过加标签的方式给对象附加一个标识符,也称为名字(name),以方便在程序中通过这个名字引用该对象。这个名字与其他程序设计语言中的变量作用相似,所以 Python 中也经常称之为变量。Python中用赋值符号(=)给对象加标识符,也可以说是给对象增加名字或是没用传统称为给变量赋值。同一个对象可以命多个名字,不同对象命相同名字时,应用时访问最邻近命名的那个对象。

    num = 500         # 名字为num
    print(type(num))  # 
    print(id(num))    # 2562179721328
    print(num)        # 值为500
    
    • 1
    • 2
    • 3
    • 4
    
    139798173272080
    500
    
    • 1
    • 2
    • 3

    三、赋值

    将一个标签名字绑定到一个对象上的操作,命名后可以用这个名字来引用或者说访问该对象,这个操作用赋值符号“=”完成。Python中的变量在使用前不需要声明,也不需要声明其类型。但每个变量在使用前都必须先有值才可以使用,也就是说变量首次出现必须是在赋值符号的左侧。只有当一个对象被赋值给一个变量后,该变量才会被创建。

    x = 5             # 名字x 绑定到整数5上
    print(x)
    y = 'hello'       # 名字y 绑定到字符串'hello' 上
    print(y)
    z = [1, 2, 3, 4]  # 名字z 绑定到列表[1, 2, 3, 4]上
    print(z)
    x = (16 + (8 ** 2 - 4 * 6 * 2) ** 0.5) / (2 * 5)  # 名字x 绑定到表达式求值得到的浮点数对象上
    print(x)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    5
    hello
    [1, 2, 3, 4]
    2.0
    
    • 1
    • 2
    • 3
    • 4

    在同一个程序中对一个变量重复赋值,或者说重复使用同一个变量名时,起作用的是最近的语句。下面程序中先将浮点型对象“3.14”和整型对象“4”分别与变量名“pi”和“radius”绑定,此时计算面积时,参与运算的是“3.14”和“4”,得到的浮点型对象“50.24”与变量名“area”绑定。 当程序执行到 radius = 6 时,“radius”这个名字将先与对象“4”解绑,再重新绑定到对象“6”上。类似的操作,执行area = pi * (radius ** 2) 时,“area”也会与对象“50.24”解除绑定并重新绑定到对象“113.24”上。

    pi = 3.14                  # 变量pi赋值为3.14
    radius = 4                 # 变量radius赋值为4
    area = pi * (radius ** 2)  # 计算圆面积
    print(area)                # 输出面积值 50.24
    radius = 6                 # 变量radius赋值为6,后面使用这个值
    area = pi * (radius ** 2)  # 计算圆面积
    print(area)                # 输出面积值 113.04
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    50.24
    113.04
    
    • 1
    • 2

    在这里插入图片描述

    需要命名的对象可以是包含于圆括号、方括号、大括号或引号内的可迭代对象。如果赋值号左边是一个名字,则将名字直接绑定到右侧对象上。若左边名字多于一个时,名字数量必须与右侧的可迭代对象中的元素或字符数量相同,这些名字将按从左至右的顺序被绑定到对应元素或字符,这种操作称为同步赋值

    x = 1, 2
    print(x)        # (1, 2),名字 x 绑定到元组(1, 2)上,后面用x访问这个元组 
    
    • 1
    • 2
    (1, 2)
    
    • 1
    x, y = 1, 2     # 左侧有2个名字,右侧对象中有2个元素1和2,数量相同
    print(x, y)     # 1 2,要求右侧对象中元素数量与左侧变量数量相同
    
    • 1
    • 2
    1 2
    
    • 1
    x, y = {1, 2}
    print(x, y)     # 1 2,要求右侧对象中元素数量与左侧变量数量相同
    
    • 1
    • 2
    1 2
    
    • 1
    x, y, z = 'abc'
    print(x, y, z)  # a b c,要求右侧对象中字符数量与左侧变量数量相同
    
    • 1
    • 2
    a b c
    
    • 1

    利用同步赋值方法可以实现两个变量指向对象的交换:

    m, n = 5, 10  # m,n = (5,10),将5 赋值给m, 将10赋值给n
    print(m, n)   # 输出 5 10
    print(f'm = {m}, n = {n}')   # 输出 m = 5, n = 10
    m, n = n, m   # 交换变量 m 和 n 所指向的对象
    print(m, n)   # 输出 10 5
    print(f'm = {m}, n = {n}')   # 输出 m = 10, n = 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    5 10
    m = 5, n = 10
    10 5
    m = 10, n = 5
    
    • 1
    • 2
    • 3
    • 4

    从上面输出中可以看到,同步赋值可以方便的交换两个变量的值。用f-string格式输出语义更清晰明了,推荐使用。split()方法可根据指定分隔符将对象切分为列表,可将这个方法作用于input()函数上,将在一行内输入的多个数据切分为一个列表,被分隔符分开的多个数据作为列表的元素。参数缺省时,默认用空格切分对象,如果指定了分隔符,则用分隔符进行切分。

    m,n = input().split()        # split()参数缺省时,可根据空格将输入切分为列表
    # 例如输入 “100 200”,可被切分为[100,200],然后将列表中的元素分别赋值给m,n
    print(m,n)                   # 输出 100,200
    print(f'm = {m}, n = {n}')   # 输出 m = 5, n = 10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    100 200
    100 200
    m = 100, n = 200
    
    • 1
    • 2
    • 3

    split()可根据逗号(‘,’)若其他符号将输入切分为列表,用于切分的符号放到括号中作为参数。

    m,n = input().split(',')     # split()可根据逗号(',')将输入切分为列表
    # 例如输入 “100,200”,可被切分为[100,200],然后将列表中的元素分别赋值给m,n
    print(m,n)                   # 输出 100,200
    print(f'm = {m}, n = {n}')   # 输出 m = 5, n = 10
    
    • 1
    • 2
    • 3
    • 4
    100,200
    100 200
    m = 100, n = 200
    
    • 1
    • 2
    • 3

    例如:用hour, minute, second做变量名,在一行内输入一个包含小时、分钟和秒的时间,按测试用例格式输出(表示时间的数字根据自己的输入变化)。

    # 补充你的代码
    hour, minute, second = input().split(':')
    print(f'现在是北京时间{hour}{minute}{second}秒')
    
    • 1
    • 2
    • 3
    23:07:58
    现在是北京时间23时07分58秒
    
    • 1
    • 2

    Python提供了“+=、-=、*=、/=、//=、%=、**%=”等增强赋值语句,在单个语句中将二元运算赋值语句合为一体,具体描述参见下表。

    c = 100    # 将数字100命名为c
    print(c)
    
    c = c + 8  # 将 100 + 8 的运算结果命名为 c,c值为108
    print(c)
    
    c += 8  # 与c = c + 8相同,将 108 + 8 的运算结果命名为 c,c值为116
    print(c)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    100
    108
    116
    
    • 1
    • 2
    • 3
    符号描述实例解释
    +=加法运算赋值符c += ac = c + a
    -=减法运算赋值符c -= ac = c - a
    *=乘法运算赋值符c *= ac = c * a
    /=除法运算赋值符c /= ac = c / a
    %=取模运算赋值符c %= ac = c % a
    **=幂运算赋值符c **= ac = c ** a
    //=整除运算赋值符c //= ac = c // a

    Python 3.8 以后的版本增加了一个称为赋值表达式(也称海象运算符)的新特性,语法为:

    name := expression
    
    • 1

    赋值表达式把一个表达式的值赋给一个标识符,返回表达式的值。例如,经常需要重复输入并进行处理,当输入回车时结束输入,实现代码如下:

    # 下面代码作用是重复接受收入,输入非空时输出输入的字符串,输入为空时结束程序
    while True:             # 构建无限循环
        user_name = input()  # 循环内重复输入用户名
        if not user_name:    # 若直接输入回车时,user_name为空字符串,值为False
            break            # 结束循环
        print(user_name)      # 输入非空字符串时输出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1
    1
    2
    2
    
    • 1
    • 2
    • 3
    • 4

    上述代码可用赋值表达式更简洁的实现(解释器版本高于3.8时才可用),代码如下:

    # 下面代码作用是重复接受收入,输入非空时输出输入的字符串,输入为空时结束程序
    while user_name := input():  # 输入回车时,user_name值为空字符串,表达式值为False,结束循环
        print(user_name)         # 输入不是回车时进入循环执行处理语句
    
    • 1
    • 2
    • 3
    1
    1
    2
    2
    0
    0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    FFmpeg 常用API
    【jmeter】windows下使用 (测试MQTT)
    学习 vite + vue3 + pinia + ts(-)项目创建vs一些改变
    canvas学习
    全栈开发性能优化基础第四单元日考技能
    【苹果家庭群发iMessage】 软件安装应用层的数据包的丢失不涉及IP层
    Geoserver Windows 安装部署教程
    简单的个人博客网站设计 静态HTML个人博客主页 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页设计作业
    Softing smartLink产品系列新版本为工厂资产管理提供了扩展功能
    数据在内存中的存储
  • 原文地址:https://blog.csdn.net/qq_52417436/article/details/127895709