超详解——Python 编程中的类型和对象深入探讨——基础篇

news2024/11/18 18:17:34

目录

1. 内建类型的布尔值

1.1 布尔值的基本规则

1.2 进阶应用

2. 对象身份的比较

2.1 基本概念

2.2 示例代码

2.3 实际应用

3. 对象类型比较

3.1 基本概念

3.2 示例代码

3.3 实际应用

4. 类型工厂函数

4.1 常见的类型工厂函数

4.2 示例代码

4.3 实际应用

5. Python不支持的类型

5.1 指针在C语言中的使用

5.2 Python中的替代方法

5.3 内存管理和垃圾回收

总结


1. 内建类型的布尔值

在Python中,布尔值的计算遵循如下规则:

  • NoneFalse、空序列(如空列表 [],空字符串 "",空元组 (),空字典 {},空集合 set())以及数值零(如整数 0,浮点数 0.0,复数 0j)在布尔上下文中被认为是 False
  • 其他值在布尔上下文中被认为是 True

1.1 布尔值的基本规则

Python中的布尔值遵循简单明确的规则。以下是一些常见类型及其布尔值:

  • NoneFalse
  • FalseFalse
  • 空序列和空集合(如 [], (), {}, set(), "")是 False
  • 数值零(如 0, 0.0, 0j)是 False
  • 所有其他值是 True
# 以下条件都为False
if not None:
    print("None is considered False")  # 输出

if not False:
    print("False is considered False")  # 输出

if not []:
    print("Empty list is considered False")  # 输出

if not 0:
    print("Zero is considered False")  # 输出

# 非零数值和非空序列为True
if 1:
    print("1 is considered True")  # 输出

if [1, 2, 3]:
    print("Non-empty list is considered True")  # 输出

1.2 进阶应用

在实际应用中,我们经常需要根据对象的布尔值来执行不同的逻辑。例如,检查用户输入是否为空:

user_input = input("Enter something: ")

if user_input:
    print("You entered:", user_input)
else:
    print("You didn't enter anything.")

在这个示例中,user_input如果为空字符串,则条件为 False,否则为 True

2. 对象身份的比较

在Python中,isis not 用于比较两个对象是否是同一个对象。这种比较检查两个对象的内存地址是否相同。

2.1 基本概念

对象身份(identity)是指对象在内存中的位置。is 运算符检查两个对象是否具有相同的内存地址。

2.2 示例代码

对象身份的比较:

a = [1, 2, 3]
b = a  # b引用a的同一个对象
c = [1, 2, 3]  # c创建了一个新的列表对象

print(a is b)  # True,因为a和b引用同一个对象
print(a is c)  # False,因为a和c是不同的对象,即使它们的内容相同

# 一般情况下,使用 == 来比较对象的值
print(a == c)  # True,因为a和c的内容相同

2.3 实际应用

在实际应用中,我们经常使用 is 来检查特殊对象,如 None

def check_value(value):
    if value is None:
        print("Value is None")
    else:
        print("Value is not None")

check_value(None)  # 输出:Value is None
check_value(0)  # 输出:Value is not None

在这个示例中,is 运算符用于检查参数是否为 None

3. 对象类型比较

使用 type() 函数可以获取对象的类型。直接比较类型可以用 type(a) == type(b)。然而,这种比较方式不支持继承关系的判断。

3.1 基本概念

  • type() 函数返回对象的类型。
  • isinstance() 函数用于检查一个对象是否是某个类或其子类的实例。

3.2 示例代码

type()isinstance() 的用法:

a = 10
b = 3.14
c = "hello"

print(type(a))  # <class 'int'>
print(type(b))  # <class 'float'>
print(type(c))  # <class 'str'>

if type(a) == type(b):
    print("Same type")
else:
    print("Different types")  # 输出,因为a是int,b是float

class Animal:
    pass

class Dog(Animal):
    pass

d = Dog()

print(isinstance(d, Dog))  # True,因为d是Dog类的实例
print(isinstance(d, Animal))  # True,因为d是Animal类的子类的实例
print(isinstance(d, object))  # True,因为所有类都是object类的子类

3.3 实际应用

在实际应用中,我们经常需要检查对象的类型,以确保它们满足某些条件。例如,处理多种输入类型:

def process_input(value):
    if isinstance(value, int):
        print(f"Processing integer: {value}")
    elif isinstance(value, float):
        print(f"Processing float: {value}")
    elif isinstance(value, str):
        print(f"Processing string: {value}")
    else:
        print("Unsupported type")

process_input(10)    # 输出:Processing integer: 10
process_input(3.14)  # 输出:Processing float: 3.14
process_input("hello")  # 输出:Processing string: hello
process_input([])    # 输出:Unsupported type

在这个示例中,isinstance() 用于根据输入的类型执行不同的处理逻辑。

4. 类型工厂函数

Python提供了一些内置的工厂函数,用于创建特定类型的对象。这些函数使得创建对象变得简单直接。

4.1 常见的类型工厂函数

  • int(): 创建整数
  • float(): 创建浮点数
  • str(): 创建字符串
  • list(): 创建列表
  • tuple(): 创建元组
  • dict(): 创建字典
  • set(): 创建集合

4.2 示例代码

使用类型工厂函数创建对象:

# 将字符串转换为整数
number = int("123")
print(number)  # 123

# 将整数转换为字符串
text = str(123)
print(text)  # "123"

# 创建一个包含0到4的列表
numbers_list = list(range(5))
print(numbers_list)  # [0, 1, 2, 3, 4]

# 创建一个字典
numbers_dict = dict(a=1, b=2)
print(numbers_dict)  # {'a': 1, 'b': 2}

# 创建一个集合(自动去重)
unique_numbers = set([1, 2, 2, 3, 4])
print(unique_numbers)  # {1, 2, 3, 4}

4.3 实际应用

在实际应用中,类型工厂函数可以简化对象的创建过程。从用户输入创建对象:

def get_user_input():
    user_input = input("Enter a number: ")
    try:
        number = int(user_input)
        print(f"You entered the integer: {number}")
    except ValueError:
        print("Invalid input. Please enter a valid integer.")

get_user_input()

int() 函数用于将用户输入转换为整数。

5. Python不支持的类型

Python不支持一些底层类型,如指针。在低级编程语言(如C语言)中,指针用于直接操作内存地址。然而,Python通过高级数据结构和内存管理机制,屏蔽了这些复杂性,使编程更简洁和安全。

5.1 指针在C语言中的使用

在C语言中,指针用于直接操作内存地址:

int a = 10;
int *p = &a;
printf("%d", *p);  // 输出10

5.2 Python中的替代方法

在Python中,没有指针的概念,但可以通过引用和内存管理机制实现类似的功能:

a = 10
b = a
print(b)  # 输出10

# 修改a的值
a = 20
print(b)  # 输出10,因为b是a的一个副本

# 使用列表来模拟指针行为
list_a = [10]
list_b = list_a
list_a[0] = 20
print(list_b[0])  # 输出20,因为list_b和list_a引用同一个列表对象

5.3 内存管理和垃圾回收

Python有自动内存管理和垃圾回收机制,无需显式释放内存。这使得Python更易于使用,同时减少了内存泄漏和指针错误的风险:

import gc

# 创建一个对象
class MyClass:
    def __init__(self, value):
        self.value = value

# 创建对象并删除引用
obj = MyClass(10)
del obj

# 强制进行垃圾回收
gc.collect()

gc.collect() 用于强制进行垃圾回收。Python会自动管理内存,确保未使用的对象被回收。

总结

在Python编程中,理解内建类型的布尔值、对象身份的比较、对象类型的比较、类型工厂函数以及Python不支持的类型对于编写高效和可靠的代码非常重要。以下是本文的总结:

  1. 内建类型的布尔值:在布尔上下文中,NoneFalse、空序列和零被视为 False,其他值被视为 True
  2. 对象身份的比较:使用 isis not 运算符进行对象身份比较,检查两个对象是否引用同一内存地址。
  3. 对象类型比较:使用 type() 函数获取对象类型,使用 isinstance() 函数进行更灵活的类型检查。
  4. 类型工厂函数:Python提供了一些内置的工厂函数,用于创建特定类型的对象,使对象创建过程变得简单直接。
  5. Python不支持的类型:Python不支持指针等底层类型,但通过高级数据结构和内存管理机制,屏蔽了这些复杂性,使编程更简洁和安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【推荐收藏】2024年5款最佳 GPU 渲染引擎大盘点

2024年已经过半&#xff0c;对于从事3D渲染和数字内容创作的朋友来说&#xff0c;选择一款高效的GPU渲染引擎至关重要。今天&#xff0c;小编就来为大家盘点一下2024年5款最佳GPU渲染引擎。 1.V-Ray V-Ray是一款备受欢迎的3D GPU渲染引擎&#xff0c;被建筑、视觉特效、室内设…

阅读源码解析dynamic-datasource-spring-boot-starter中是如何动态切换数据源的

dynamic-datasource-spring-boot-starter是苞米豆提供的一个动态切换数据源的工具&#xff0c;可以帮助企业或者个人实现多数据源的切换&#xff0c;这里通过阅读源码的方式解析是如何动态的切换数据源的&#xff0c;采用的版本是3.5.1 源码解析 通过官方文档可以看到&#x…

leetcode 所有可能的路径(图的遍历:深度优先和广度优先)

leetcode 链接&#xff1a; 所有可能的路径 1 图的基本概念 1.1 有向图和无向图 左边是有向图&#xff0c;右边是无向图。对于无向图来说&#xff0c;图中的边没有方向&#xff0c;两个节点之间只可能存在一条边&#xff0c;比如 0 和 1 之间的边&#xff0c;因为是无向图&am…

抖音 根据sec uid获取个人详细信息(性别、年龄、属地、关注数、粉丝数、简介等)

本文带来用户的secuid获取用户信息以及其他基本信息&#xff1a; 话不多说看效果&#xff1a; 第一步输入用户sec_uid 根据secuid获取到用户基本信息&#xff1a; 可以支持接口批量转换&#xff0c;欢迎咨询

从数据采集到部署,手把手带你训练一个高质量的图像分类模型

本文来自社区投稿&#xff0c;作者李剑锋 MMPreTrain 是一款基于 PyTorch 的开源深度学习预训练工具箱&#xff0c;本文将从数据采集到部署&#xff0c;手把手带大家使用 MMPreTrain 算法库训练一个高质量的图像分类模型。 MMPreTrain 项目链接&#xff1a; https://github.co…

正则表达式(Linux 下搭配 grep 使用)

目录 1.基本正则表达式 2.扩展正则表达式 3.实操之grep筛选 3.1基本正则表达式 3.2扩展正则表达式 1.基本正则表达式 ^ 用于最左端,如^"abc",匹配以abc开头的行 $ 用于最右端,如"abc$",匹配以abc结尾的行 ^$ …

使用Oracle VM VirtualBox安装Centos7

下载软件 VirtualBox下载&#xff1a; https://www.virtualbox.org/ CentOS7下载&#xff1a;http://mirrors.aliyun.com/centos/7/isos/x86_64/(阿里云镜像下载快) VirtualBox下载好之后&#xff0c;双击运行后&#xff0c;根据提示直接下一步到底就行了。 下面开始安装cent…

接连获得2项认可!细探美创信创数据安全方案与实践

信创浪潮奔涌向前&#xff0c;筑信创防线&#xff0c;守数据安全&#xff0c;近年来&#xff0c;美创科技率先布局&#xff0c;持续在信创产品类型、产品更新迭代、国产信创改造服务、解决方案、生态建设等方面创新与实践&#xff0c;以满足各行业用户数据安全建设需求&#xf…

Redis为何如此快与其线程模型

Redis是单线程的为什么如此快 ①redis是基于内存的 首先,Redis 是基于内存的数据库&#xff0c;不论读写操作都是在内存上完成的&#xff0c;完全吊打磁盘数据库的速度。 ②Redis是单线程模型&#xff0c;从而避开了多线程中上下文频繁切换的操作 Redis 的单线程指的是 Red…

(2024,选择性遗忘,积极遗忘,消极遗忘)机器学习及其他领域的“遗忘”:综述

"Forgetting" in Machine Learning and Beyond: A Survey 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0 摘要 1 引言 2 不同知识领域中的遗忘背景 2.1 心理学中的遗忘&…

responses-validator接口断言之状态码

概述 responses-validator 专用于对 reqeuests 的响应对象进行断言&#xff0c; 同时&#xff0c;为了更适用 yaml 的场景&#xff0c;支持了多种灵活、可扩展的写法&#xff0c;可用于搭建yaml接口自动化测试框架。 根据 reqeuests 响应对象的特点&#xff0c;responses-val…

电流监测利器!FP137宽共模范围高侧轨电流测量IC助您解决电流问题!

随着大量包含高精度放大器和精密匹配电阻的IC的推出&#xff0c;在高侧电流测量中使用差分放大器变得非常方便。高侧检测带动了电流检测IC的发展&#xff0c;降低了由分立器件带来的参数变化、器件数目太多等问题&#xff0c;集成电路方便了我们使用。本文将对FP137高端电流检测…

用Vue3构建一个交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 代码相关的技术博客 应用场景介绍 本代码段用于创建可用于展示服务或产品计划的卡片式组件。此类组件常见于网站或应用程序中&#xff0c;用于以清晰简洁的方式呈现不同级别的功能和定价信息。 代码基本功能…

Pycharm将python程序打包为exe文件

前提&#xff1a;我的文件只有一个&#xff0c;多个的还没有试过 打开项目终端 s1&#xff1a;在项目终端输入&#xff08;注意要在自己的项目下&#xff09; pip install pyinstaller s2&#xff1a;在项目终端输入&#xff08;注意要在自己的项目下&#xff09; pyinstaller …

香港国际ESG联盟:绿色能源时代的先锋力量

在香港国际ESG联盟引领绿色能源革命浪潮的今天&#xff0c;ESG联盟正以矢志不渝的精神推动大陆储能市场的繁荣与进步&#xff0c;同时立足于香港这一国际金融之都&#xff0c;ESG联盟的视野早已超越地域界限&#xff0c;向中国内地乃至全球市场延伸开来。联盟始终秉承着创新开放…

大模型生成短视频

最近看到一个开源项目可以通过AI生成短视频&#xff0c;然后尝试了下&#xff0c;感觉还不错&#xff0c;下面是具体步骤。 项目名叫moneyprinterTurbo&#xff0c;它本意是对接到Youtube&#xff0c;自动生成视频并上传到Youtube获取流量赚钱&#xff0c;所以项目名叫moneypri…

图形和插图软件Canvas X Pro 20 Build 914

Canvas X Pro是一款功能强大、用途广泛的Windows软件,旨在处理技术图形和可视化,该程序结合了创建矢量和光栅图形的工具,这使其成为需要创建高质量技术插图和演示文稿的工程师、设计师、科学家和其他专业人士的理想选择。 Canvas X Pro的主要功能之一是支持处理大型和复杂的…

ssm职工健康素养数据管理系统设计与实现-计算机毕业设计源码45392

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对职工健康素养数据管理系统等问题&#xff0…

SpringBoot基础配置文件

在SpringBoot当中, 所有的配置文件都将会被配置在application.preperties当中 一: 配置服务器端口 只需要在相应的properties当中输入, 修改我们的端口号即可 server.port80 二: 修改banner #设置 将我们的Banner不再进行显示, 或者是也可以让其在控制台当中显示, 或者是日…

Python 全栈体系【四阶】(五十九)

第五章 深度学习 十三、自然语言处理&#xff08;NLP&#xff09; 4. 语言模型 4.1 什么是语言模型 语言模型在文本处理、信息检索、机器翻译、语音识别中承担这重要的任务。从通俗角度来说&#xff0c;语言模型就是通过给定的一个词语序列&#xff0c;预测下一个最可能的词…