首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

听说你会玩 Python 系列 2 - 99% 人会做错

你能需要知识点是: 了解什么是不可更改对象和可更改对象 了解函数默认参数 了解 Python 3 里面 print() 是函数而不是语句( Python 2 里是语句) 不可更改对象 VS 可更改对象...我们发现,列表作为容器型数据,它本身 PyObject,添加或者删除元素时候,没有改变。换句话说,列表是可更改。...So far so good,那为什么两个 f() 一起打印出来会得到 [1,1] [1,1] 呢?...None None 和整数、浮点数、布尔一样,是一种数据类型,而且不可更改,它类型是 NoneType。...type(None) NoneType 正因为它不可更改性质,如果你函数中需要传入一个默认参数值,用 None !

51710

Python编程常见出错信息及原因分析(2)

,代码缩进层级决定了代码所属关系。...,这里'NoneType'是个很好提示。遇到这种错误时,需要仔细检查出现问题代码之前函数调用或方法调用。...(4)试图删除或修改不可变容器对象元素值 演示代码: >>> x = (1, 2, 3) >>> del x[1] Traceback (most recent call last): File...,一般并不会发生这样错误,因为作为Python程序员我们肯定知道元组和字符串是不可容易对象,是不允许修改其中元素值,也不允许删除其中元素。...遇到这种错误时,一般是调用了其他函数或方法而不知道该函数或方法返回是元组或字符串或其他不可变容易对象,应仔细检查出现错误代码之前函数或方法调用代码。

3.3K70
您找到你想要的搜索结果了吗?
是的
没有找到

Python编程常见问题与解答

11.问:代码中x是一个列表,使用y=x.sort()语句把它排序后结果赋值给y,然后使用y.index(3)查看3y中下标为什么会提示“AttributeError: 'NoneType...答:Python中,不可哈希(unhashable)和可变意思是一样。整数、实数、复数、字符串、元组这些是不可,或者说是可哈希。而列表、字典、集合是可变,或者说是不可哈希。...答:调用函数,位置参数数量必须符合函数定义,如果函数要求接收2个位置参数,那么调用时也应传递2个位置实参。...答:Python中,元组和字符串这样容器类对象不可,不支持其中元素增加、修改和删除操作。...31.问:表达式{1, 2, 3}<{1, 2, 4}值怎么会是False呢? 答:关系运算符作用于集合时,表示集合之间包含关系。对于集合A和B,只有A是B真子集,A<B值才是True。

3.4K10

Python 为什么没有 void 关键字?

C、Algol68 及它们所派生几种编程语言中,void 类型是函数正常返回一种类型,但是不会给调用者返回一个值。...至于返回值类型用法,我们定义出一个函数,例如最简单def func():pass ,为了让它调用结果func() 是一个合法对象,那它必须具有一个有效类型(type)。...所用方法,即令解释器隐式地返回一个 None 对象,也就是令函数默认得到一个 NoneType 类型,再用于类型检查(PS:Javascript 也类似,只不过它默认返回是 undefined,它不是一个对象...关于 Python 解释器这个隐式填补过程,已在上一篇《Python 函数为什么会默认返回 None?》文章详细分析过,感兴趣同学可去查阅。...《Python 函数为什么会默认返回 None?》这篇文章中,介绍了 Python 中函数默认返回 None 机制,它是属于“how can”内容。但是为什么要默认返回 None 呢?

86030

Python 为什么没有 void 关键字?

C、Algol68 及它们所派生几种编程语言中,void 类型是函数正常返回一种类型,但是不会给调用者返回一个值。...为什么会这样?难道是因为 Python 中不存在其它语言所面对问题么?还是说,Python 中有自己一套解决方案? 仍以跟函数相关两种用法为例作分析吧。...至于返回值类型用法,我们定义出一个函数,例如最简单def func():pass ,为了让它调用结果func() 是一个合法对象,那它必须具有一个有效类型(type)。...所用方法,即令解释器隐式地返回一个 None 对象,也就是令函数默认得到一个 NoneType 类型,再用于类型检查(PS:Javascript 也类似,只不过它默认返回是 undefined,它不是一个对象...关于 Python 解释器这个隐式填补过程,已在上一篇《Python 函数为什么会默认返回 None?》文章详细分析过,感兴趣同学可去查阅。

79610

理解Python中NoneType对象

只有用is这个对象身份判断运算符,才能得到正确结果。 None是假,也就意味着not None是真了。...但Python中变量不能单独存在,如果将变量与None建立引用关系,并非意味着该变量是空。 None作为参数默认值 更多情况下,你看到可能是以None为默认参数值。...第3行再次调用时候,同样也没有给starter_list提供值,它依然应该是原有列表——注意观察定义函数参数。但是,返回值是在上一次调用返回结果中增加了新元素。...好”函数中,增加了第2、3行,就能够保证每次调用函数,总是一个空列表。...print(f"{key}->{value}") ... a->3 b->None None是一种对象 前面提到过,某些语言中,null只是0符号表示,但是,Python中,None是一类对象

13.2K41

【已解决】Python 中 AttributeError: ‘NoneType‘ object has no attribute ‘X‘ 报错

同时欢迎大家关注其他专栏,将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章 一、Bug描述 Python编程中,AttributeError是一个常见错误,它通常发生在尝试访问一个对象属性或方法...特别地,AttributeError: ‘NoneType’ object has no attribute 'X’这个错误表明我们尝试访问属性X属于一个None类型对象。...二、定位报错原因 原因一: 返回None函数调用 如果一个函数预期应该返回一个对象,但实际上返回了None,然后我们尝试访问这个返回值属性,就会引发这个错误。...错误示例: obj = None print(obj.x) # 引发AttributeError 原因三:异常处理不当 处理可能抛出异常代码,如果没有正确捕获异常,并且异常发生后尝试访问对象属性...理解函数返回:了解你调用函数可能返回None,并据此编写代码。 异常安全:编写代码,考虑到异常情况,并确保异常被妥善处理。 使用文档:对于不熟悉函数或方法,查阅官方文档了解其行为和返回类型。

81620

面向对象编程进阶

其实不难理解,普通方法,可以实例化后直接调用,并且方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量,一个不能访问实例变量和类变量方法,其实相当于跟类本身已经没什么关系了...返回结果给你用户 因此这个status属性值是一系列动作后才得到结果,所以你每次调用时,其实它都要经过一系列动作才返回你结果,但这些动作过程不需要用户关心, 用户只需要调用这个属性就可以,明白...__init__ 构造方法,通过类创建对象,自动触发执行。 4.__del__  析构方法,当对象在内存中被释放,自动触发执行。...注:此方法一般无须定义,因为Python是一门高级语言,程序员使用时无需关心内存分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数调用是由解释器进行垃圾回收自动触发执行...__str__ 如果一个类中定义了__str__方法,那么在打印 对象 ,默认输出该方法返回值。

77920

27 个问题,告诉你Python为什么这么设计

目录 为什么Python使用缩进来分组语句? 为什么简单算术运算得到奇怪结果? 为什么浮点计算不准确? 为什么Python字符串是不可为什么方法定义和调用中显式使用“self”?...如果存在循环引用,则可能发生这种情况 C库分配某些内存也是不可能释放(例如像Purify这样工具会抱怨这些内容)。但是,Python退出清理内存并尝试销毁每个对象。...如果要强制 Python 释放删除某些内容,请使用 atexit 模块运行一个函数,强制删除这些内容。 为什么有单独元组和列表数据类型?...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法字典中修改条目。然后,当你尝试字典中查找相同对象,将无法找到它,因为其哈希值不同。...这是静态类型要点 -- 编译器 总是 在编译知道每个变量作用域。 Python使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

6.6K11

物联网体系架构概述

大家好,又见面了,是你们朋友全栈君。...———— ——基于WEB服务物联网软件体系架构参考模型 2.2软件体系架构:M2M M2M同时包括硬件架构和软件体系,而USN却缺乏后者,有一点很奇怪,为什么硬件结构中流行USN,但在软件体系中却流行...无线自组织网络不需要固定设备支持,各节点即用户终端自行组网,通信由其他用户节点进行数据转发,采用动态路由和移动性管理技术实现物-物信息交互。...物联网中,不仅需要利用标识对人和物等对象、终端和设备等网络节点以及各类业务应用进行识别,更需要通过标识解析与寻址等技术进行翻译、映射和转换,以获取相应地址或关联信息,最终实现人与物、物与物通信以及各类应用...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除

4K31

流畅 Python 第二版(GPT 重译)(三)

^(a) ^(a) @dataclass通过生成__setattr__和__delattr__来模拟不可变性,当用户尝试设置或删除字段,会引发dataclass.FrozenInstanceError—AttributeError...认为这是 Python 一个福音。 ⁵ 类型提示背景下,None不是NoneType单例,而是NoneType本身别名。...这也是为什么一些元组是不可哈希,正如我们“什么是可哈希”中所看到需要复制对象,相等性和标识之间区别会产生进一步影响。副本是一个具有不同 ID 相等对象。...它被销毁,bye回调被调用,ender.alive变为False。 示例 6-16 重点在于明确del并不会删除对象,但对象可能在使用del后变得不可访问而被删除。...这个例外是不可变集合,例如元组:如果不可变集合保存对可变引用,那么当可变值发生变化时,其值实际上可能会改变。在实践中,这种情况并不常见。不可变集合中永远不会改变是其中对象标识。

6000

Python | 新手必会 9 个 Python 技巧

,这里尝试展示所知道和使用一些特性,还没有在其他地方看到有人提到过它们。...本例中,您可以看到空白字符“\n”和“\t”已被单个空格替换,而“\r”已被完全删除。...对迭代器进行切片 如果您尝试对一个迭代器进行切片,您会得到一个TypeError,这说明生成器对象不可下标访问,但有一个简单解决方案可以解决这个问题: ?...使用itertools.islice我们可以创建一个islice对象,它是一个会生成所需迭代器。需要注意是,这将消耗slice开始之前所有生成器,以及islice对象所有。...只带有关键字参数(kwargs)函数 使用以下这样函数,创建只接受关键字参数函数来提供(强制)更多清晰性是很有帮助: ?

80930

Python正则表达式

尽可能少次数是什么意思?当模式匹配使用分组操作符,正则表达式引擎将试图“吸收”匹配该模式尽可能多字符。这通常被叫做贪婪匹配。...,然后返回一个正则表达式对象 re模块函数和正则表达式对象方法 match 尝试使用带有可选标记正则表达式模式来匹配字符串。...repl替换所有正则表达式模式字符串中出现位置,除非定义count,否则就将替换所有出现位置 purge() 消除隐式编译正则表达式 常用匹配对象 group 返回整个匹配对象,或者编号为...不区分大小写匹配 匹配对象以及group()和groups()方法   成功调用match()和search()返回对象。   ...如果没有子组要求,那么当group()仍然返回整个匹配,groups()返回一个空元组。 使用match()方法匹配字符串   match()函数试图从字符串起始部分对模式进行匹配。

1.6K90

27 个问题,告诉你Python为什么这么设计?

Python 标准实现 CPython 使用引用计数来检测不可访问对象,并使用另一种机制来收集引用循环,定期执行循环检测算法来查找不可访问循环并删除所涉及对象。...如果存在循环引用,则可能发生这种情况 C库分配某些内存也是不可能释放(例如像Purify这样工具会抱怨这些内容)。但是,Python退出清理内存并尝试销毁每个对象。...如果要强制 Python 释放删除某些内容,请使用 atexit 模块运行一个函数,强制删除这些内容。 为什么有单独元组和列表数据类型?...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法字典中修改条目。然后,当你尝试字典中查找相同对象,将无法找到它,因为其哈希值不同。...这是静态类型要点 -- 编译器 总是 在编译知道每个变量作用域。 Python使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

3.1K20

3.Python对象

类型 : 对象类型决定了该对象可以保存什么类型值,可以进行什么样操作, 一级遵循什么样规则.可以通过函数type()查看Python对象类型. 3.值 : 对象表示数据 ....也就是说虽然他们看上去有点像函数,实质上他们是类.当你调用他们,实际上是生成了该类型一个实例 ....某些类型允许他们值进行更新,而另一些则不允许 . 可变对象允许他们值被更新,而不可对象则不允许他们值被更改 . 为什么i = 0 ,i = i + 1 , i为什么等于1 ....访问类型 :尽管前面两种模型分类方式介绍Python都很有用,他们还不是区分数据类型首要模型....你可以用id()得到一个对象身份号, 这是最接近指针地址.因为你不能控制这个值,所以其实没有太大意义.Python中,一切都是指针 .

66310

6、Python 数据类型

6、Python 数据类型数字类型介绍 整数 小整数对象池、浮点数、复数、布尔类型、空值、数据计算数字类型数字类型是不可变类型。...所谓不可变类型,指的是类型值一旦有不同了,那么 它就是一个全新对象。数字1和2分别代表两个不同对象,对变量重新赋值--个 数字类型,会新建一一个数字对象。...还是要强调一下Python变量和数据类型关系,变量只是对某个对象引用或者 说代号、名字、调用等等,变量本身没有数据类型概念。...,方便我们调用,避免后期重复生成!...这是 一个包含262个指向整数对象指针数组,范围是-5到256。 比如整数10,即使我们程序里没 有创建它,其实在Python后台已经悄悄为我们创建了。

18420
领券