Python基本语法

1.基本容器类型

1.1 list

>>>classmates = ['Tom','Peter']
>>>classmates
['Tom','Peter']
classmates.append('AMS') #想尾插入
classmates.insert(1,'a')#向指定位置插入
classmates.pop()#删除末尾
classmates.pop(1)#删除指定位置

1.2 tuple

tuple使用时使用(),且不能改变元素

1.3 dic

dic与map基本一致

d = {'s":2,'a':3}
d.pop('s')#会删除's'以及对应的值

1.4 set

声明并定义一个set必须提供一个list

s=set(['a','b'])
s.add('c')
s.remove('c')

2.高级特性

2.1列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

还可以两层调用

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

2.2 生成器generator

只要将一个列表生成式的[]换成(),就创建了一个生成器

生成器不耗用太多内存,仅仅在要使用时生成元素

杨辉三角:

def add(n):
	L=[1]
	while True:
		yield L
		L = [L[x]+L[x+1]for x in range(len(L)-1)]
		L.insert(0,1)
		L.append(1)
		if len(L) > n:
			break

斐波契利数列

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

使用生成器时用Iterator即可

2.3迭代器

将一个非Iterator对象转换为Iterator对象,它们表示惰性计算对象

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

3.函数式编程

3.1 map

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

map的第一个参数为函数对象,第二个参数为使用对象

3.2 reduce累积计算

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

3.3 map与reduce运用实例

from functools import reduce
def str2int(s):
    def fn(x,y):
        return x * 10 + y
    def char2num(s):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    return reduce(fn, map(char2num, s))

3.4 filter

>>> def is_odd(n):
...     return n%2==1
...
>>> list(filter(is_odd,[1,2,3,4,5,6]))
[1, 3, 5]

查找素数

def odd_():
	n = 1
	while True:
		n = n + 2
		yield n
def lam_odd(n):
	return lambda x : x % n >0
def result():
	yield 2
	it = odd_()
	while True:
		n = next(it)
		yield n 
		it = filter(lam_odd(n),it)
for n in result():
	if n < 50:
		print(n)
	else:
		break

3.5 返回函数

def count():
	def f(j):
		def g():
			return j*j
		return g 
	fs = []
	for i in range(1,4):
		fs.append(f(i))
	return fs
f1,f2,f3 = count()
n1,n2,n3 = f1(),f2(),f3()
print(n1,n2,n3)

4.面向对象高级特性

4.1 使用__slots__

class Student(object):
    __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称

4.2 使用@property

class Student(object):

    @property
    def score(self):
        return self._score

    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value

s = Student()
s.score = 60
print('s.score =', s.score)
# ValueError: score must between 0 ~ 100!
s.score = 9999

4.3 str__与__repr

class Student(object):
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return 'Student object (name=%s)' % self.name
    __repr__ = __str__

这样使用print()方法或在交互环境中使用时,可以得到自己想要的结果

4.4 iter

>>> class Fib(object):
...     def __init__(self):
...             self.a,self.b = 0,1
...     def __iter__(self):
...             return self
...     def __next__(self):
...             temp = self.a
...             self.a = self.a + self.b
...             self.b = temp + self.b
...             if self.a>50:
...                     raise StopIteration()
...             return self.a
...
>>> for i in Fib():
...     print(i)
...
1
2
4
8
16
32

5.错误异常处理

5.1处理异常

class TEST(object):
	def __init__(self,s):
		self.s = s
	def foo(s):
		return 10 / int(s)
	def bar(s):
		return foo(s) * 2

	def main(self):
		try:
			bar(self.s)
		except Exception as e:
			print('Error:', e)
		finally:
			print('finally...')

5.2调试

def foo(s):
    n = int(s)
    assert n != 0, 'n is zero!'
    return 10 / n

启动Python解释器时可以用-0参数来关闭assert

5.3单元测试

5.4文档测试

以上两个测试以后进行补充

6.IO编程

6.1 文件读写

with open('test.txt','r') as e :
    print(e.read())
for i in e.readlines():
    print(lines.strip())#进行行读写

如果要读取二进制文件如图片视频等,用rb方式打开即可

f = open('d.jpg','rb')

下面介绍写入方法

with open('test.txt','w') as f:
    f.write('hello')

6.2 操作目录

>>> import os
>>> os.path.abspath('')
'E:\\test'
>>> os.path.join('E:\\test','new')
'E:\\test\\new'
>>> os.mkdir('E:\\test\\new')
>>> os.rmdir('E:\\test\\new')

重命名文件,删除文件

>>> os.rename('新建文本文档.txt','呵呵.txt')
>>> os.remove('呵呵.txt')

6.3 序列化

如果想另数据在网络或磁盘上传播,可以使用序列化

6.3.1 pickle

>>> import pickle
>>> d = dict(name = 'Bob',age = 20)
>>> f = open('py.txt','wb')
>>> pickle.dump(d,f)
>>> f.close()
>>> f = open('py.txt','rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'name': 'Bob', 'age': 20}

6.3.2 json

后续补充

7.多进程与多线程

7.1多进程

multiprocessing模块提供了一个Process类

from multiprocessing import Process
import os

def run_proc(name):
    print('Run child process %s(%s)'%(name,os.getpid()))

if __name__ == '__main__':
    print('Parent process %s.'%os.getpid())
    p = Process(target = run_proc,args=('test',))
    print('Child process will start')
    p.start()
    p.join()
    print('end')

其他内容因为暂时用不到,以后进行补充,暂时不用

posted @ 2017-09-06 13:26  vhyz  阅读(259)  评论(0编辑  收藏  举报