python 基础笔记 2(函数, 类)
起因, 目的:
把很久以前,自己写的笔记发布出来。
现在粉丝多了,也不觉得丢人了。
为什么这些序号不连贯,因为有些很熟悉的东西,我都删了。
内建函数, 函数
- zip()函数,利用 * 号操作符,可以将元组解压为列表。
我怀疑是zip的解包只能用一次。在内存中解开一次之后就销毁了。目前没有更好的证据。 - 内建函数 locals(), 返回一个字典,包含当前命名空间内的全部变量。
- 内建函数 map(function, iterable, …),是惰性的,返回一个迭代器。
- 内建函数 filter(function, iterable),
用于过滤序列,返回一个迭代器对象,可以使用 list() 来转换。 - 要在函数中将某个变量定义为全局变量,
在需要被定义的变量前加一个关键字global即可。
类:
-
如果想直接使用 self 作为一个可迭代对象的话,需要自己来实现一个 iter()方法。
7.str, 函数是为了调用__init__中的变量,在输出的时候,能以可读的方式展
示出来。。。是给用户看的。 -
repr()函数是给开发者看的,是一个地址,代码部分和__str__()是一样的,
所以创建一个类的时候,可以简写成: repr = str -
读源码的时候看到一种写法,叫类的装饰器,可以更改类的属性,我简化了一下:
def change_name(cls):
new_name = "hey"
cls.name = new_name
return cls
@change_name
class A:
name = "halo"
if __name__ == '__main__':
print(A.name) # hey
- @property # 只需要在类定义里修改相关代码即可,不需要在每一处调用修改
我的理解是,@property 只是比 @staticmethod 少了一对括号而已。 - self.__hair = “black”, 这个是类的私有属性,防止外部来修改
- 以 self 作为第一个参数的方法都是实例方法。
- 类方法(class method)
- 会作用于整个类,对类作出的任何改变会对它的所有实例对象产生影响
- 可以从类直接调用,不必实例化, 类名也不需要括号: A.do_something()
- 鸭子类型(duck typing),如果它像鸭子一样走路,像鸭子一样叫,那么它就是一只鸭子。
在鸭子类型中,并不关注对象本身的具体类型,只关注它能实现的功能。 - def str(self):
return self.name
repr = str - 没必要过度构建(使用)类和对象,试试内建的数据结构。比如,collections 模块。