任何在 Java 中学习面向对象编程的人可能会想知道为什么 Python 有这两个装饰器而不是其中的一个。 让我们从classmethod开始。...如果你声明__slots__ = ()(一个空元组),那么子类的实例将没有__dict__,并且只接受基类__slots__中命名的属性。...“既能节省内存又能使用它”是可能的:如果将'__dict__'名称添加到__slots__列表中,那么你的实例将保留__slots__中命名的属性在每个实例的引用数组中,但也将支持动态创建的属性,这些属性将存储在通常的...⁵ 本书的技术审阅员之一 Leonardo Rochael 不同意我对 staticmethod 的低评价,并推荐 Julien Danjou 的博文“如何在 Python 中使用静态、类或抽象方法的权威指南...示例 12-9 中的不一致性是由于 __getattr__ 的工作方式引入的:Python 仅在对象没有命名属性时才调用该方法作为后备。
支持的方法很少 >>> dir(tuple) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format...,那为什么有列表,还要有元组呢?...内置方法set(),接收可迭代的对象,如果对象有__iter__ 属性,就是可以迭代的对象,如字符串、列表、元组 1、创建集合。...') #作为一个整体,添加单个对象到集合里 >>> b set(['a', 'python', 'c', 'b']) >>> b.update('hello') #打散了,把对象里的每个元素添加到集合里...>>> b set(['a', 'c', 'b', 'e', 'python', 'h', 'l', 'o']) >>> b.remove('python') >>> b.remove('python
_', '__class__', '__closure__','__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format...我们将在下面的例子中演示这一点,例子中将前面定义的square函数和一个数字迭代器传递给map函数。...def_arg列表中,在调用两次函数之后,默认参数中将有两个“Hello World”字符串。...任意的参数列表:Python还支持定义这样的函数,该函数可以接受以元组形式传递的任意数量的参数,Python教程中的一个例子如下所示: def write_multiple_items(file, separator...,通过参数args就能访问该元组。
前言 本文将介绍Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类。...如果你遵循PEP 8推荐,避免通配符导入,那么你真正需要记住的只有这个: “单个下划线是一个Python命名约定,表示这个名称是供内部使用的。...pass 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。PEP 8解释了这个约定。 3....你也可以在拆分(unpacking)表达式中将单个下划线用作“不关心的”变量,以忽略特定的值。同样,这个含义只是“依照约定”,并不会在Python解释器中触发特殊的行为。...在下面的代码示例中,我将汽车元组拆分为单独的变量,但我只对颜色和里程值感兴趣。但是,为了使拆分表达式成功运行,我需要将包含在元组中的所有值分配给变量。
来源:Python程序员 ID:pythonbuluo 本文介绍了Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的...pass 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。 PEP 8解释了这个约定。 3....你也可以在拆分(unpacking)表达式中将单个下划线用作“不关心的”变量,以忽略特定的值。 同样,这个含义只是“依照约定”,并不会在Python解释器中触发特殊的行为。...在下面的代码示例中,我将汽车元组拆分为单独的变量,但我只对颜色和里程值感兴趣。 但是,为了使拆分表达式成功运行,我需要将包含在元组中的所有值分配给变量。...下划线命名模式 - 小结 以下是一个简短的小结,即“速查表”,罗列了我在本文中谈到的五种Python下划线模式的含义: ?
在不同场合下,下划线有不同含义:比如_var表示内部变量;__var表示私有属性;__var__表示魔术方法;这些含义有的是程序员群体的约定,如_var;有的是 Python 解释器规定的形式,如__var...nums = 13 for _ in range(nums): fun_oper() 1.3 元组拆包中的_ 第三个用法是元组拆包,赋值的时候可以用_来表示略过的内容。...二、var_用于解决命名冲突问题 变量后面加一个下划线。主要用于解决命名冲突问题,元编程中遇时 Python 保留的关键字时,需要临时创建一个变量的副本时,都可以使用这种机制。...使用from XXX import *是一种通配导入(wildcard import),这是 Python 社区不推荐的方式,因为你根本搞不清你到底导入了什么属性、方法,很可能搞乱你自己的命名空间。...可以看到 _常用于临时变量,在 REPL,for 循环,元组拆包和国际化中得到了广泛应用。var_用于解决命名冲突问题,使用时比较简单易懂的。
阅读本文需要10.5分钟 Python中有关单个和双下划线(“ dunder”)的各种含义和命名约定,名称修饰的工作方式以及它如何影响Python类。...这是Python解释器应用的命名混乱。这样做是为了保护变量不被子类覆盖。...让我们创建另一个类,扩展测试类,并尝试重写添加到构造函数中的现有属性: >>> t2 = ExtendedTest() >>> t2.foo 'overridden' >>> t2....同样,这只是“按照约定”的意思,在Python解释器中没有触发任何特殊的行为。单个下划线只是一个有效的变量名。 在下面的代码示例中,我将一个car元组解压缩到单独的变量中,但我只对颜色和值感兴趣。...下划线命名模式 这是我在本文中介绍的五个下划线模式在Python中的含义的简要概述。
如:q=RationalNumber(10,20) #实例化(instantiation),创建p实例 q.numerator #属性引用/访问(attribute...numerator,denominator): self.numerator=numerator self.denominator=denominator ###在说明添加到类中的特殊...第一参数的特殊作用体现在将其命名为self的惯例上。...类对象的属性引用使用标准的语法:obj.name.类对象创建后,类命名空间中所有的命名都是有效属性名。 在python中方法定义在类的定义中,但只能被类对象的实例所调用。...特殊类属性: 对任何类foo,它的部分特殊属性如下所示: foo_name_ 类foo的名字(字符串) foo_doc_ 类foo的文档字符串 foo_bases_ 类foo的所以父类构成的元组
格式化显示 Python 内置的 format 方法和 str.format 方法将各个类型的格式化方法委托给相应的 __format__ 方法。...self.decimals)) ...: def __str__(self): ...: return str(tuple(self)) ...: def __format...使用 __slots__ 类属性节省空间 在 Python 中,唯一节省内存的数据结构是元组,所以 __slots__ 属性的实现方法是让解释器在元组中存储实例属性,而不是字典。...其定义十分简单: class Test: __slots__ = ("__integer", "__decimals") 使用元组的形式也就意味着这些属性不可变。...对象只能拥有 __slots__ 中列出的属性,除非将 __dict__ 加入其中; 用户自定义的类中默认有 __weakref__ 属性,若想把对象作为弱引用的目标,需要把 __weakref__也添加到
1️⃣ %-formatting 方法 %-formatting是Python早期的一种格式化字符串的方法,使用起来繁琐且容易出错,如无法正确显示元组和字典的情况。...并且这种方式不支持元组或字典。...2️⃣ str.format() 方法 str.format()方法是对%-formatting的改进,是python2.6引入的,能够更灵活地处理字符串格式化,并且支持索引、命名参数等功能,使用正常的函数调用语法...表达式在运行时进行渲染,然后使用__format__协议进行格式化。 语法与str.format()使用的语法类似,但不需要结尾补充.format()。...由于f字符串是在运行时进行渲染的,因此可以将任何有效的Python表达式放入其中。如计算、函数调用,甚至可以创建对象。
add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format...,它可以是单个元素,也可以是列表、元组等。...list1 = ['Python', 'C++', 'Java'] # 追加元素 list1.append('PHP') print(list1) #追加元组,整个元组被当成一个元素 t = ('JavaScript...extend() 和 append() 的不同之处在于:extend() 不会把列表或元组视为一个整体,而是把它们包含的元素逐个添加到列表中。...list2 = ['Python', 'C++', 'Java'] # 追加元素 list2.extend('C') print(list2) # 追加元组,元祖被拆分成多个元素 t = ('JavaScript
初学者看到 Python 中的下划线 _ 时可能会有些懵圈,不知道这个到底是干什么用的,今天就来盘点一下 Python 中的下划线有哪些用处。以后看到下划线时就可以对号入座了。...1、用在 Python 解释器,表示上一次的执行结果 即使不把 Python 用于编程,也可以把它用作智能计算器,下划线保存上次的计算结果,在计算时相当方便: >>> 4 + 3 7 >>> _ 7 >...for i, _ in [(1, 2), (3, 4)]: print(i) 上面的代码表示我们只需要列表内部元组的第一个,第二个其实赋值给了下划线,虽然后面你可以通过下滑线来取到值,但是强烈建议你不要这么做...', '_A__private_var2', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format...5、作为变量名中间的一部分 相比驼峰命名,这叫做蛇形命名,比如 user_name。
3.6+) 9)用.join()连接字符串 10)用双星号语法合并字典** (Python 3.5+) 11)用if x in list简化if语句,而不是单独检查每一项 ?...在本例中,我们希望遍历一个列表,检查当前项是否为负,并在本例中将列表中的值设置为0。虽然range(len())语法可以工作,但使用内置的枚举函数更好。这将以元组的形式返回当前索引和当前项。...3)使用内置的Sort()方法对复杂的迭代进行排序 如果我们需要对一些可迭代的对象,例如列表、元组或字典进行排序,我们不需要自己实现排序算法。我们可以简单地使用内置的排序函数。...正如我所说的,这适用于任何可迭代的对象,所以这里我们还可以使用元组。但是请注意,结果是一个列表!...3.5+) 这种语法是自Python 3.5以来的新语法。
列表操作 3.1 添加元素 append(): 在列表末尾添加一个元素 insert(): 在指定位置插入一个元素 extend(): 将一个列表的所有元素添加到另一个列表末尾 list1 = [1,...元组 元组(tuple)是Python中的一种基本数据结构,与列表类似,但元组是不可变的。虽然它们看似简单,但在适当的场景下使用元组可以带来诸多好处,如提高代码的可读性和执行效率。 1....元组的创建 1.1 使用圆括号创建 最常见的创建元组的方式是使用圆括号: tup1 = (1, 2, 3) tup2 = ('a', 'b', 'c') 1.2 不使用圆括号 Python也允许省略圆括号来创建元组...这意味着一旦创建,就不能修改元组的内容: tup = (1, 2, 3) # tup[0] = 4 # 这会引发TypeError 然而,如果元组包含可变对象(如列表),这些对象的内容可以被修改:...高级操作和技巧 4.1 合并字典 在Python 3.5+中,我们可以使用**操作符来合并字典: dict1 = {'a': 1, 'b': 2} dict2 = {'c': 3, 'd': 4} merged
初学者看到 Python 中的下划线 _ 时可能会有些懵圈,不知道这个到底是干什么用的,今天就来盘点一下 Python 中的下划线有哪些用处。以后看到下划线时就可以对号入座了。...1、用在 Python 解释器,表示上一次的执行结果 即使不把 Python 用于编程,也可以把它用作智能计算器,下划线保存上次的计算结果,在计算时相当方便: >>> 4 + 3 7 >>> _ 7 >...for i, _ in [(1, 2), (3, 4)]: print(i) 上面的代码表示我们只需要列表内部元组的第一个,第二个其实赋值给了下划线,虽然后面你可以通过下滑线来取到值,但是强烈建议你不要这么做...', '_A__private_var2', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format...具体可以阅读如何写出令人惊叹的Python类 5、作为变量名中间的一部分 相比驼峰命名,这叫做蛇形命名,比如 user_name。
覆盖类属性 learn from 《流畅的python》 from array import array import math class Vector2D: typecode = 'd'...r} 获取 *self 的分量,可迭代对象 def __str__(self): return str(tuple(self)) # 从可迭代对象生成元组 def...变量 :格式说明符 } 包含两部分 >>> format(8, 'b') # 二进制 '1000' >>> format(1/3, '.2%') # %百分比 '33.33%' 如果类没有定义 __format...,不过这是很多 Python 程序员严格遵守的约定,他们不会在类外部访问这种属性。...可是,如果类中定义了 __slots__ 属性,而且想把实例作为 弱引用 的目标,那么要把 __weakref__ 添加到 __slots__ 中 一般不要把 __dict__ 加入到 __slots_
这100道面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。 Q1、Python中的列表和元组有什么区别? ? Q2、Python的主要功能是什么?...Python适合面向对象的编程,因为它允许类的定义以及组合和继承。Python没有访问说明(如C ++的public,private)。 在Python中,函数是第一类对象。它们可以分配给变量。...Q7、Python中的命名空间是什么? 命名空间是一个命名系统,用于确保名称是唯一性,以避免命名冲突。 Q8、什么是PYTHONPATH? 它是导入模块时使用的环境变量。...Q42、什么是Python包? Python包是包含多个模块的命名空间。 Q43、如何在Python中删除文件? 要在Python中删除文件,您需要导入OS模块。...Q46、如何将值添加到python数组? 可以使用append(),extend()和insert(i,x)函数将元素添加到数组中。 Q47、如何删除python数组的值?
python 里面也有单元 测试框架-unittest,相当于是一个 python 版的 junit。...学习和了解unittest 1、查看其中文官网:https://docs.python.org/zh-cn/3/library/unittest.html 英文官网:https://docs.python.org...unittest.TestCase): unittest.main():使用她可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法...如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。 tearDown():tearDown()方法用于测试用例执行之后的善后工作。...,如下方,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。
这些面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。 Q1、Python中的列表和元组有什么区别? Q2、Python的主要功能是什么?...Python适合面向对象的编程,因为它允许类的定义以及组合和继承。Python没有访问说明(如C ++的public,private)。 在Python中,函数是第一类对象。它们可以分配给变量。...Q7、Python中的命名空间是什么? 命名空间是一个命名系统,用于确保名称是唯一性,以避免命名冲突。 Q8、什么是PYTHONPATH? 它是导入模块时使用的环境变量。...Q42、什么是Python包? Python包是包含多个模块的命名空间。 Q43、如何在Python中删除文件? 要在Python中删除文件,您需要导入OS模块。...Q46、如何将值添加到python数组? 可以使用append(),extend()和insert(i,x)函数将元素添加到数组中。 Q47、如何删除python数组的值?
领取专属 10元无门槛券
手把手带您无忧上云