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 有多种内置数据类型。以下是比较重要的一些:

  1. Booleans[布尔型] 或为 True[真] 或为 False[假]
  2. Numbers[数值型] 可以是 Integers[整数](12 )、Floats[浮点数](1.11.2 )、Fractions[分数](1/22/3 );甚至是 Complex Number[复数]
  3. Strings[字符串型] 是 Unicode 字符序列,例如: 一份 HTML 文档。
  4. Bytes[字节]Byte Arrays[字节数组]例如: 一份 JPEG 图像文件。
  5. Lists[列表] 是值的有序序列。
  6. Tuples[元组] 是有序而不可变的值序列。
  7. Sets[集合] 是装满无序值的包裹。
  8. 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吧,除非你是要返回一个列表。

 

 

更多:

用python爬虫抓站的一些技巧总结

http://woodpecker.org.cn/diveintopython3/native-datatypes.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值