(更新中...)
资料
- Python官方文档,可选择语言(中文版)和版本号
- PyCharm图解
- 适合初学和进阶中的10本书
语法
格式化输出
重名问题(待测试)
重名会有冲突的情况,主要分为,变量和变量同名,变量和方法同名,方法和方法同名。
- 当变量与方法、方法与方法同名时,后定义的相当于重新定义,仅最后一个起作用。因为方法名相对与指向方法的一个指针的名称,与变量的地位“相同”,后定义的会直接覆盖前面定义的。
- 当局部变量与全局变量同名时,需要使用关键字来区分(global,local,nonlocal等),否则运行出错。
- 类的属性与类的公有变量同名时(尤其是有多重继承时),类按照自上而下的方式去查找,对象按自下而上的方法查找。但是当存在多重继承,尤其是菱形继承的情况时,python采用C3算法。【参考链接】
class A:
name = 'A'
def __init__(self):
self.name = 'a'
a = A()
print('name of object a: ', a.name)
print('name of class A: ', A.name)
#运行结果
name of object a: a
name of class A: A
#----------------------------------------------------
class B:
name = 'B'
def name(self):
self.name = 'b'
return 'function name'
b = B()
print('name method of b:', b.name)
print('name function of B:', B.name)
print('call function name: ', b.name())
#运行结果:
name method of b: <bound method B.name of <__main__.B object at 0x7fb81d8bdc70>>
name function of B: <function B.name at 0x7fb81d82f0d0>
call function name: function name
字符串
- str前面可以加前缀,如‘r’、‘u’、‘b’,
前缀‘r’表示字符串内不使用转义(原始字符串,raw string),但是不能以'\'结尾【参考链接】
前缀‘u’表示使用unicode编码,与无前缀意义相同
前缀‘b’表示使用二进制编码
序列(sequence)
- 容器序列:list、tuple、deque,可以存储任何数据类型
- 扁平序列:str、bytes、bytearray、array.array
- 可变序列:list、deque、bytearray、array
- 不可变序列:str、tuple、bytes
- 切片(slice): 用法[start: end:step],切片返回的是新序列,不会改变原有的序列
- append与extend函数的区别,append是将内容追加为序列的最后一个元素,而extend是将内容逐个在序列后面进行添加。
字典(dict)
- dict与set均使用哈希表来实现,1)查找字典的时间复杂度为O(1),2)其key值必须是可哈希的(不能重复), 3) 会申请较大的空间,当剩余空间小于1/3时,会重新申请新的空间 4)插入新元素时,元素的顺序可能发生变化(触发重新分配空间,数据迁移时,映射位置会发生变化)
- dict为C语言实现,创建时,不会使用魔法函数,因此如果直接继承,新写得魔法函数不会被调用,不建议直接进行继承;但是可以继承Userdict类型,它具有dict所具有的所有熟悉
集合(set)
- set与dict均使用哈希表来实现,1)查找元素的时间复杂度为O(1),2)其元素必须是可哈希的(不能重复)3) 会申请较大的空间,当剩余空间小于1/3时,会重新申请新的空间 4)插入新元素时,元素的顺序可能发生变化(触发重新分配空间,数据迁移时,映射位置会发生变化)
- set具有数学中集合所有的特性,比如:差集(a - b),交集(a & b), 并集(a | b)
- frozenset:不可变集合,主要用于数据处理。
魔法函数
- __hash__:实现此函数,可使用hash查找
- __eq__:实现此函数,可使用 == 比较
- __iadd__:实现此函数,可使用 += 运算
- __del__:实现此函数,可以重载垃圾回收del操作
- __getattr__:当获取某个property不存在时,会调用此函数
- __getattribute__:当获取某个property时,会无条件的调用此函数,谨慎重载
- __new__:创建对象,用来控制对象的生成过程,如果new方法不返回对象,则不会调用init函数
- __init__:初始化对象
- __str__:print打印时的内容
- __iter__、__next__:构建Iterable必须实现的魔法函数,
装饰器
-
property,用来定义属性。
- 主要用于封装(将各个变量设置、获取等方法,统一成一个属性值,方便外部调用)、将属性设为只读(不定义setter方法)
- 等效于属性函数property(),property(getter,setter,deleter,doc),但是更美观、更直观
- 参考文章
http://www.imooc.com/article/50647
https://www.liaoxuefeng.com/wiki/1016959663602400/1017502538658208
-
classmethod,定义类方法
- 将类名cls作为参数传入方法中,这样方法可以将cls作为一个handle。通常方法使用此cls来创建一个新类,并返回,这个方法就相当于类cls的一个构造函数。参考链接
-
staticmethod,定义静态方法
- 有点类似于C++的静态函数,当方法不需要使用对象本身(即self指针)时,即可以将其定义为static方法。
-
abstractmethod,定义抽象类方法
- 类似于C++中的抽象基类中的纯虚函数,其方法可以不用实现,子类必须实现这些方法才能实例化
关键字
- yield:返回值,于return不同,一个函数中可以执行多个yield。只要函数中存在yield,则不是普通函数,而是生成器函数。生成器的对象是Iterable
- metaclass:类的参数,声明使用元类。
参数传递
- 可以将方法名做为参数,注意:不要使用括号。
如果传递的方法(记作B)带有参数(记作args),可以将方法名称(B)和参数(args)均作为当前方法(记作A)的参数,即
def A(B,args):
符号
下划线“_”
下划线在Python中的应用比较广泛
- 变量命名
按Python pep8规范,需采用蛇形命名法,即变量名中各单词之间用下划线做为连接。例如:str_a,great_wall等 - 做缺省变量,即占位符
str_a = 'str_a'
_, a = str_a.split('_')
- 作为确实方法参数,起占位作用,可传递任何变量,但变量不会被使用
def func(_):
print('OK')
func('a') # 正确
func(1) # 正确
# func() # 错误,必须传递参数
-
在类中,以下划线开头的变量为私有成员变量,外部无法访问
-
用于魔法函数,以双下划线开头和双下划线结尾
函数
BIF: Build In Function
- map:用法 result_list = map(func,input_list),即对input_list中所有元素,逐个作为func函数的变量,得到的结果,逐个放在result_list中
- filter:用法 filter(function or None, iterable) -> list, string or tuple,对iteratble中的所有元素,逐个作为function的变量,结果为 true时,返回iterable对应的值。
- str: 参见base64代码中的用法
- copy:浅拷贝,用法 test.copy(); copy.deepcopy(test):深拷贝(注意,需import copy)
- get:对dict,如果直接使用 dict["key"],当key不存在时,会抛出异常,此时可以用get代替,例如: value = dict.get("key", {}),当key不存在时,value会等于get后面设置的默认值
库
其它
- Python中的图像处理:
https://www.cnblogs.com/xk-bench/p/7825290.html - CFD Python - 12 steps to Navier-Stokes:
https://github.com/barbagroup/CFDPython - 花了两天,终于把 Python 的 setup.py 给整明白了 - 王炳明的文章 - 知乎
-----------------------------------------------------------
本文来自博客园,作者:小厨房,转载请注明原文链接:https://www.cnblogs.com/erichf/p/13372281.html,否则视为侵权
如有疑问,请站内留言 或加 QQ:②⑨⓪②② ⑦③⑦⑨
-----------------------------------------------------------