backends = ['read_only2'] * 7 + ['default'] * 3
shuffle(backends)
python API: http://epydoc.sourceforge.net/stdlib/index.html
1. 安装,环境,解释器,版本
python获取AP信息help(sys)
2. 字面量,数据类型
Python 有多种内置数据类型。以下是比较重要的一些:
- Booleans[布尔型] 或为
True[真]
或为False[假]
。 - Numbers[数值型] 可以是 Integers[整数](
1
和2
)、Floats[浮点数](1.1
和1.2
)、Fractions[分数](1/2
和2/3
);甚至是 Complex Number[复数] 。 - Strings[字符串型] 是 Unicode 字符序列,例如: 一份 HTML 文档。
- Bytes[字节] 和 Byte Arrays[字节数组] , 例如: 一份 JPEG 图像文件。
- Lists[列表] 是值的有序序列。
- Tuples[元组] 是有序而不可变的值序列。
- Sets[集合] 是装满无序值的包裹。
- Dictionaries[字典] 是键值对的无序包裹。
"if not expression":
None,0,空字符,false都能匹配:
if not 0:
print 'none'
if not []:
print 'none'
if not False:
print 'none'
if not '':
print 'nont'
if not None:
print 'nont'
global关键字:
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global
语句完成这一功能。没有global
语句,是不可能为定义在函数外的变量赋值的。
你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global
语句可以清楚地表明变量是在外面的块定义的。
#!/usr/bin/python
# Filename: func_global.py
def func():
global x
print 'x is', x
x = 2
print 'Changed local x to', x
x = 50
func()
print 'Value of x is', x
3. 操作符表达式
4. 控制流 if-elif-else-while
#!/usr/bin/python
# -*- coding: utf-8 -*-
num = 20
guess = int(input('input number:'))
if num == guess:
print ('恭喜你,你猜对了')
elif num > guess:
print ('小了')
else:
print ('大了')
# -*- coding: utf-8 -*-
这条语句表示置编码格式为utf-8。
这个猜数字还不够友好,猜错一次程序就退出了,可以加上while。
#!/usr/bin/python
# -*- coding: utf-8 -*-
num = 20
while True:
guess = int(input('input number:'))
if num == guess:
print ('恭喜你,你猜对了')
elif num > guess:
print ('小了')
else:
print ('大了')
for循环加了else,很方便:
array = []
for i in array:
print i
else:
print 'array empty'
for i in range(1,5):
print i
for i in [1,2,3,4,5]:
print i
python 切片 [start:stop:step]
"123456"[::-1] 654321
"123456"[:3:1] 124
"123456"[3::1] 456
5.函数
使用def定义函数
#/usr/bin/python
def sayHello():
print ('hello python')
sayHello()
默认参数值
对于一些函数,你可能希望它的一些参数是可选的,如果用户不想要为这些参数
提供值的话,这些参数就使用默认值
#/usr/bin/python
def sayHello(str="fuck"):
print (str)
sayHello()
sayHello('come on')
注意:
只有在形参表末尾的那些参数可以有默认参数值, 例如,def func(a, b=5) 是有效的,但是 def func (a=5, b) 是无效的。
VarArgs 参数
有时,你或许想定义一个能获取任意个数参数的函数,这可通过使用 * 号来实现。
Keyword-only
略。。。。。
6.模块
模块可以理解为java里面的jar包,可以从另外一个程序导入来使用其函数的功能。这也是我们使用 Python 标准库的方式。
#/usr/bin/python
import sys
print ('Thre command line arguments are:')
for i in sys.argv:
print (i)
print ('\n The PYTHONPATH is',sys.path,'\n')
按字节编译的 .pyc 文件
导入一个模块相对来说是一个比较费时的事情,所以 Python 做了一些技巧,以便使输入模块更加快一些。一种方法是创建按字节编译的文件,这些文件以.pyc 作为扩展名。字节编译的文件与 Python 变换程序的中间状态有关—— 它会快得多,因为一部分输入模块所需的处理已经完成了。另外,这些字节编译的文件也是与平台无关的。所以,现在你知道了那些.pyc 文件事实上是什么了。
注释:
这些.pyc 文件通常与.py 文件相同的方式在相同路径被创建。如果 Python 没有写入当前路径的权限,.pyc 文件就不会被创建
7.OOP
#!/usr/bin/python
class Person:
pass # empty block
p = Person()
print(p)
pass 语句表示空白块
__init__ 方法
__init__ 方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化。
#!/usr/bin/python
class Person:
pass # empty block
def __init__(self,str):
print('init = '+str)
p = Person('jiangyunpeng')
类和对象变量
有两种类型的域 —— 类的变量和对象的变量,它们根据是类还是对象拥有这个变量而区分。
Python的继承方式和java不太一样,直接上代码
#!/usr/bin/python
class Base():
def hello(self):
print('base')
class Sub(Base):
def hello(self):
print('sub')
m = Sub()
m.hello()
前面可以看到方面有个参数self,在pythonl里类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 .
class Python:
def test(self):
print('test')
p = Python()
p.test()
这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self)
self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。
6. io
7.多线程
python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import string,threading,time
def thread_main(a):
global count,mutex
# 获得线程名
threadname = threading.currentThread().getName()
for x in xrange(0,int(a)):
# 取得锁
mutex.acquire()
count = count+1
# 释放锁
mutex.release()
print threadname,x,count
time.sleep(1)
def main(num):
global count,mutex
threads = []
count = 1
mutex = threading.Lock()
for x in xrange(0,num):
threads.append(threading.Thread(target=thread_main,args=(10,)))
for t in threads:
t.start()
for t in threads:
t.join()
if __name__ == '__main__':
# 创建4个线程
main(4)
8.数组
range,xrange 这两个基本上都是在循环的时候用。
for i in range(0, 100):
print i
for i in xrange(0, 100):
print i
这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:
a = range(0,100)
print type(a)
print a
print a[0], a[1]
而xrange则不会直接生成一个list,而是每次调用返回其中的一个值
a = xrange(0,100)
print type(a)
print a
print a[0], a[1]
所以xrange做循环的性能比range好,尤其是返回很大的时候!
尽量用xrange吧,除非你是要返回一个列表。
更多:
http://woodpecker.org.cn/diveintopython3/native-datatypes.html