python必知必会4
解释一下 python 中 pass 语句的作用
pass是一个空操作。当它被执行时,什么都不发生。它适合当语法上需要一条语句但并不需要执行任何代码时用来临时占位。
一般什么情况下,我们会使用pass语句呢?按它的定义,我可以用它来临时占位。另外,也可以使用它去忽略一些预想的异常。对某一类异常,我们在捕捉到之后,不去做数据做任何处理,这个时候就可以使用pass语句。
单引号,双引号,三引号的用法区别
# 字符串中有单引号,可以使用双引号或三引号创建
s = "aaaaa'bbbbb'ccccc"
# 字符串中有双引号,可以使用单引号或三引号创建
s = 'aaaaa"bbbbb"ccccc'
# 字符串是多行的,可以使用三引号创建
s = """
There are three thousand things in this world.
Sun,Moon,and you.
The sun is morning.
The moon is night.
You are forever.
"""
文本处理在每个应用开发中都会遇到,所以字符串的创建也是不可避免的。在Python中,字符串是表示Unicode字符的字节数组。但是,Python没有字符数据类型,单个字符只是一个长度为1的字符串。方括号索引可用于访问字符串的元素。字符串是不可变类型的序列,一旦分配了字符串的元素就无法更改,只能将新字符串重新分配为相同的名称。如果你尝试更新或删除字符串中的字符的,会引发TypeError。
解释一下 == 和 is 的区别?
Python 中一切皆对象,对象的三个基本要素:id(内存中的地址),type(类型),value(值)。判断对象与对象是否相等可以用 == 也可以用 is。
is 比较的是两个对象的 id 值,也就是比较它们在内存中的地址是否相等。== 则是比较两个对象的值是否相等。
>>> a = [1,2,3]
>>> b = a
>>> a is b
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True
为什么经过 b = a[:] 之后 b is a 就是 False 了呢?
这要从 Python 的赋值语法说起,在理解 Python 的赋值语句的时候,我们从等式的右边读起。可以将它理解为先创建一个空列表的对象,对象一旦创建,对象的内存地址不会改变,然后把左边的变量绑定到右边的对象上。
你可以简单的理解为 b = a 是把 a 在内存中的地址一并赋值给了 b,这时a 和 b 在内存中的地址是一样的。所以 b is a 是 True。但是经过经过 b = a[:] 之后相当于在内存中重新创建了一个新的 b ,它们两个的id值不一样了,自然就是 False。
双下划线和单下划线有什么意义吗?
Python不通过语言特性去封装数据,而是通过一些命名规约来达到此目的。
-
前导单下划线
这是一种指示内部使用的惯例约定。但是,Python并不会阻止任何人去访问带前导单下划线的属性,它仍可以被外界获取。这个惯例约定同样适用于模块,函数的命名。 -
前导双下划线
前导双下划线的属性或方法名会改变成其它形式。调用名称修改的目的就是为了继承,为类提供一种简单的方法来定义“私有”实例变量和方法,而不必担心派生类定义的实例变量,或者通过类外部的代码来修改实例变量。 -
双向双下划线
一般用于Python自己内置的方法属性。
如果你定义的变量与某个保留关键字冲突,可以使用后置单下划线。
new和init的区别?
new:
- 是静态方法
- 用于创建实例
- 第一个参数是类型并且(通常)返回该类型的新实例
init:
- 是实例方法
- 用于初始化实例
- 第一个参数是实例本身,不返回任何东西
我们很少有机会直接调用new(),因为它是不会被显式地调用。我们可以这么理解new() 和init这两个方法,Python 先通过构造器new() 去分配内存,并创建了实例,再通过init去初始化实例。
new() 不一定要返回实例,它可以返回任何东西。但是如果它不返回实例的,接下来 Python 也不会自动初始化实例。
new() 的实际目的主要是允许不可变类型的子类 (例如 int, str 或 tuple) 定制实例创建过程。它也常会在自定义元类中被重载以便定制类创建过程。
静态方法与实例化方法区别?
1,写法不同,静态方法有修饰词static
2,静态方法是与类同时加载的,而使用非静态方法时,需要实例化(即new)才能存在
3,如果非静态方法未被实例化,静态方法中不可以使用非静态方法
with 方法打开处理文件帮我们做了什么?
with 语句给需要处理的文件创建了一个上下文管理器对象,当 with 控制块运行完了,文件会自动关闭。
with with_item:
do_something()
with 语句的目的是为了简化 try/finally 模式。这种模式用于保证某段代码 A 被执行完毕后执行某项操作 B。而在执行那段代码 A 的过程中可能会有异常发生,或者其它的调用而终止,即使这样,最终还是会执行某项操作 B。
比如使用 with 语句去读文件,就可以确保无论中间发生什么,这个文件都会被关闭。
Python 中常用的自省函数
在计算机编程语言中,自省(Introspection)算是一个非常重要的特性了,而 Python 作为一门动态的面向对象的语言,同样对自省有很好的支持。
自省就是能够在运行时确定对象的类型或属性的能力,获取它们的信息,并对它们进行操作。 有了自省,我们能够定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先并不知道名称的函数。
常见的自省函数有:
- dir():返回与该对象关联的方法和属性的列表。
- help():启动内置的帮助系统,查看很多 Python 自带的帮助文档信息。
- id():返回对象的 “标识值”。
- type():返回对象的类型。
- hasattr() 和 getattr():分别判断对象是否有某个属性及获得某个属性值。
- callable():如果实参是可调用的,返回 True,否则返回 False。
- isinstance():可以确认某个对象是属于某种类型。
自省是一种在运行时确定对象类型的能力。Python 中的所有东西都是一个对象。Python 中的每个对象都可能具有属性和方法。通过使用自省,我们可以动态地检查 Python 对象。自省揭示了有关程序对象的有用信息。