1. Python2 的默认编码是 ascii,Python3 的默认编码是 utf-8,
import sys
sys.getdefaultencoding()
2.常用数据类型
列表(list)
元组(tuple)
字符串(string)
字典(dict)
集合(set)
列表、元组和字符串都属于序列类型,它们可以进行某些通用的 *** 作,比如索引、分片等;
字典属于映射类型,每个元素由键(key)和值(value)构成;
集合是一种特殊的类型,它所包含的元素是不重复的
字符串和元组是不可变的,而列表是可变(mutable)的,可以对它进行随意修改。我们还可以将3字符串和元组转换成一个列表,只需使用 list 函数
3. 常用的列表方法:
index
count
append
extend
insert
pop
remove
reverse
sort:sort方法用于对列表进行排序,注意该方法会改变原来的列表,而不是返回新的排序列表,另外,
sort方法的返回值是空
如果我们不想改变原列表,而是希望返回一个排序后的列表,可以使用 sorted 函数
a = [4, 3, 6, 8, 9, 1]
a.sort(reverse=True) # 反向排序
4. 字符串
find
split
join
strip
replace
translate
lower/upper
5. 字典
字典是 Python 中唯一的映射类型,每个元素由键(key)和值(value)构成,键必须是不可变类
型,比如数字、字符串和元组
clear
方法用于清空字典中的所有项,这是个原地 *** 作,所以无返回值(或者说是 None)。
copy
copy 方法实现的是浅复制(shallow copy)。它具有以下特点:
对可变对象的修改保持同步;
对不可变对象的修改保持独立;
和浅复制对应的是深复制(deep copy),它会创造出一个副本,跟原来的对象没有关系,可以通过
copy 模块的 deepcopy 函数来实现
get
setdefault
update
update 方法用于将一个字典添加到原字典,如果存在相同的键则会进行覆盖。
pop
popitem
keys/iterkeys
values/itervalues
items/iteritems
items 方法将所有的字典项以列表形式返回,这些列表项的每一项都来自于(键,值)。
iteritems 的作用大致相同,但会返回一个迭代器对象而不是列表,同样,我们也可以使用这个方法
来对字典进行遍历
fromkeys
6. 集合
Python 中的集合也可以看成是数学意义上的无序和无重复元素的集合,因此,我们可以对两个集合作
交集、并集等。
7. 函数参数
在 Python 中,定义函数和调用函数都很简单,但如何定义函数参数和传递函数参数,则涉及到一些
套路了。总的来说,Python 的函数参数主要分为以下几种:
必选参数
必选参数可以说是最常见的了,顾名思义,必选参数就是在调用函数的时候要传入数量一致的参数
默认参数
默认参数是指在定义函数的时候提供一些默认值,如果在调用函数的时候没有传递该参数,则自动使用
默认值,否则使用传递时该参数的值
def add(x, y, z=1): # x, y 是必选参数,z 是默认参数,默认值是 1
2. ... print x + y + z
可变参数
在某些情况下,我们在定义函数的时候,无法预估函数应该制定多少个参数,这时我们就可以使用可变
参数了,也就是,函数的参数个数是不确定的。
>>> def add(*numbers):
... sum = 0
... for i in numbers:
... sum += i
... print 'numbers:', numbers
... return sum
numbers 就是一个可变参数,参数前面有一个 * 号,表示是可变的。在函数内
部,参数 numbers 接收到的是一个 tuple。
关键字参数
可变参数允许你将不定数量的参数传递给函数,而关键字参数则允许你将不定长度的键值对, 作为参数
传递给一个函数。
def add(**kwargs):
return kwargs
kwargs 就是一个关键字参数,它前面有两个 * 号
函数式编程
函数式编程(functional programming)是一种编程范式(Programming paradigm),或者说
编程模式。
函数式编程的一大特性就是:可以把函数当成变量来使用,比如将函数赋值给其他变量、把函数作为参
数传递给其他函数、函数的返回值也可以是一个函数等等。
Python 不是纯函数式编程语言,但它对函数式编程提供了一些支持。
高阶函数
在函数式编程中,我们可以将函数当作变量一样自由使用。一个函数接收另一个函数作为参数,这种函
数称之为高阶函数
def func(g, arr):
return [g(x) for x in arr]
匿名函数
map/reduce/filter
map/reduce/filter 是 Python 中较为常用的内建高阶函数
map(function, sequence):对 sequence 中的 item 依次执行 function(item),并将结果组成一个 List 返回。
reduce(function, sequence[, initial]):先将 sequence 的前两个 item 传给 function,即 function(item1, item2),函数
的返回值和 sequence 的下一个 item 再传给 function,即 function(function(item1,
item2), item3),如此迭代,直到 sequence 没有元素,如果有 initial,则作为初始值调用。
filter(function, sequnce):将 function 依次作用于 sequnce 的每个 item,即 function(item),将返回值为
True 的 item 组成一个 List/String/Tuple (取决于 sequnce 的类型,python3 统一返回
迭代器) 返回。
闭包
装饰器
partial 函数
8. 装饰器
在 Python 中,我们可以像使用变量一样使用函数。
def hello():
return 'hello world'
def makeitalic(func):
def wrapped():
return "" + func() + ""
return wrapped
hello = makeitalic(hello) # 将 hello 函数传给 makeitalic
hello()
一般情况下,我们使用装饰器提供的 @ 语法糖(Syntactic Sugar),来简化上面的写法
def makeitalic(func):
def wrapped():
return "" + func() + ""
return wrapped
@makeitalic
def hello():
return 'hello world'
装饰器可以定义多个,离函数定义最近的装饰器先被调用,
对带参数的函数进行装饰
def makeitalic(func):
def wrapped(*args, **kwargs):
ret = func(*args, **kwargs)
return '' + ret + ''
return wrapped
9. 基于类的装饰器
前面的装饰器都是一个函数,其实也可以基于类定义装饰器,
class Bold(object):
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
return '' + self.func(*args, **kwargs) + ''
@Bold
def hello(name):
return 'hello %s' % name
hello('world')
'hello world'
可以看到,类 Bold 有两个方法:
__init__() :它接收一个函数作为参数,也就是被装饰的函数
__call__() :让类对象可调用,就像函数调用一样,在调用被装饰函数时被调用
10.类
Python 是一门面向对象编程(Object Oriented Programming, OOP)的语言,这里的对象可以
看做是由数据(或者说特性)以及一系列可以存取、 *** 作这些数据的方法所组成的集合。面向对象编程
主要有以下特点:
多态(Polymorphism):不同类(Class)的对象对同一消息会做出不同的响应。
封装(Encapsulation):对外部世界隐藏对象的工作细节。
继承(Inheritance):以已有的类(父类)为基础建立专门的类对象。
__init__ 是 Python 中的特殊方法(special method),它用于对对象进行初始
化,类似于 C++ 中的构造函数
方法的第一个参数都是 self ,指向实例本身,也就是说它们是和实例绑定的函数
属性私有,不能被外部访问,可以在属性或方法的名称前面加上两个下划线,即 __
@classmethod 类方法
@staticmethod 在类中往往有一些方法跟类有关系,但是又不会改变类和实例状态的方法,这种方法是静态方法,静态方法没有 self 和 cls 参数,可以把它看成是一个普通的函数
11. 定制类和魔法方法
在 Python 中,我们可以经常看到以双下划线 __ 包裹起来的方法,比如最常见的
__init__ ,这些方法被称为魔法方法(magic method)或特殊方法(special method)
super:在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父
类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现
12. 迭代器 (Iterator)
迭代(Iteration)
可迭代对象(Iterable):含有 __iter__() 方法或 __getitem__() 方法的对象称之为可迭代对象。
13. 生成器
它有两种构造方式:
生成器表达式 和列表推导式的定义类似,生成器表达式使用 () 而不是 [] ,
numbers = (x for x in range(5))
14.生成器函数
含有 yield 关键字的函数,调用该函数时会返回一个生成器
上下文管理器
上下文管理器协议,是指要实现对象的 __enter__() 和 __exit__() 方法。
上下文管理器也就是支持上下文管理器协议的对象,也就是实现了 __enter__() 和
__exit__() 方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)