13432878738 发表于 2017-4-22 08:51:48

python知识点

  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 :
print i

  
 
python 切片
  "123456"[::-1]  654321
  "123456"[:3:1]  124
  "123456" 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, a


而xrange则不会直接生成一个list,而是每次调用返回其中的一个值


a = xrange(0,100)

print type(a)

print a

print a, a


所以xrange做循环的性能比range好,尤其是返回很大的时候!


尽量用xrange吧,除非你是要返回一个列表。
  更多:
  用python爬虫抓站的一些技巧总结

  http://woodpecker.org.cn/diveintopython3/native-datatypes.html
页: [1]
查看完整版本: python知识点