Python基础

1.python内置了复数:12j+1

2.Python内置的数据类型及转换函数: complex(),float(),int(),str(),tuple(),list(),dict(),set()

3.在Python中只有str型字符才是确定的一个字符占一个字节。在涉及到底层通讯时,需要确定的数据长度时可以参考python-C的数据长度对照表,使用struct模块将数据转化成字符再发送。

4.序列:元组tuple、列表list、字典dict、集合set

元组:A=(1,2,3),元素被复值后值不能再改变,如A[0]=5是不对的,元组长度也不能动态增长,但是2个元组能够相加合并生成一个新的元组。

列表:A=[1,2,3],可以改变元素值和动态增长列表,较常用。扩展列表A.extend([4,5,6,'a']) ,删除元素A.pop(x)

字典:A={"a":1;"b":2;"c":3},可以改变元素值和动态增长字典,使用广泛。A.keys()返回关键字元组,A.values()返回值元组。

集合:A=set([1,2,3]),不能直接创建,只能强制转换。集合中没有重复元素。

len()内置函数可以返回序列中元素的个数。

序列都允许切片: A[m:n]

5.几个逻辑运算符

not取反;and与;or或

6.循环

while:   for:   可以跟一个else,当while和for不是由break结束而是正常结束(满结束)时,将执行else.

range(start,end,step) 以step为步进,返回一个start->end的列表,常用于for中。

7.异常

使用异常需要使用exceptions模块,可以构造自己的异常类,raise可以抛出一个异常对象

try:

...

if .. raise TypeError("No such Omelet type.")

except 异常类名 as 变量:

8.函数

Python函数功能强大。

def funcname(para1,*para2,**para3)

    para2在funcname内按元组索引访问,它原本就是一个元组

    para3必须以关键字的形式输入,在funcname内部按字典形式访问,它原本就是一个字典。

    定义时使用了*或**,则调用时也必须使用。

 *解散列表和**解散字典的2个作用

 (1)函数形参中表示可变参数列表,*可以在函数中将该可变参数当做列表引用,**可以将该可变参数当做字典引用

 (2)函数调用时,*表示将集合打散为多个函数参数,**表示将字典当做关键字形式参数形式输入


    在函数内部通常需要判断入参的类型  if type(para1)==int  ; if type(para3)==type({})

9.模块和包(一个文件就是一个模块,一个文件夹就是一个包)

使用import导入整个模块和使用from...import...从模块中导入某个符号的区别。

 a.import modulename  将整个模块导入到另一个文件中作为模块对象,该对象名为modulename,然后可以使用该对象访问对象中的元素。

 b.from modulename import markname 将模块中的所有符号导入到另一个文件中作为符号对象,此时modulename中的符号成为该文件中的公共符号。

包的导入:包目录下需要一个__init__.py文件(可以是空的),在__init__.py文件中可以使用import或from...import...导入该包目录下的所有模块,然后当别人调用这个包时就可以直接导入包名。注意区分命名空间。

无论包还是模块,只要记住import的导入是一种命名空间的导入即可。当导入了某个名字空间就可以引用该名字空间中的符号。

10.Python的文件处理

   glob模块:文件名通配模块

   glob.glob("c:\\programfiles\\m*")  列出c:\\programfiles\\下以m开头的所有文件

   *  匹配多个任意字符

   ?  匹配单个字符

   [...]匹配[]中任意一个字符

   [!...]匹配不在[]中出现的任意字符

shutil模块,sys模块,os模块都包含很多文件及路径处理的函数。

11.os模块和sys模块

os模块:(C库函数中有的,都在此模块中)

(1)tasks:tools

(2)shell变量:os.environ

(3)运行程序:os.system('命令行'),os.popen('命令行'),os.execv,os.spawn

(4)spawning进程:os.fork,os.pipe,os.waitpid,os.kill

(5)文件读写:os.open,os.read,os.write,os,rename,os.remove,os.mkfifo,os.mkdir,os.rmdir, os.getcwd,os.chdir,os.chmod,os.getpid,os.listdir,os.acess

(6)可移植性工具:os.sep,os.pathsep,os.curdir,os.path.split,os.path.join,os.path.exists, os.path.isdir,os.path.isfile,os.path.getsize,os.path.abspath,os.path.normpath,os.path.listdir, os.path.walk(返回当前目录及其子目录中所有的目录项列表及其文件列表)

sys模块:

(1)平台及版本信息:sys.platform,sys.maxxize,sys.version

(2)模块搜索路径:sys.path

(3)模块表:sys.modules (导入文件中的模块的名字)

(4)命令行参数:sys.argv

(5)标准流:sys.stdin,sys.stdout,sys.stderr

(6)程序退出调用:sys.exit()

12.python的一些内置函数

(1)数学运算:abs,complex,divmod,float,int,long,pow,range,round,sum,oct,hex,chr,bool,bin

(2)集合类操作:basestring,format,unichr 返回unicode码,enumerate()枚举,iter生成一个迭代器,max,min,list,set,sorted,xrange

(3)逻辑判断:all(集合)判断是否全部为真;any()至少一个为真;cmp(x,y)

(4)IO操作:file()生成一个文件对象;input输入;prtint输出;raw_input将用户输入看成一个字符串

(5)反射:type,super引用父类,next(iterator),map(func,iterable),len,issubclass(class,classinfo),isinstance(object,classinfo),execfile()相当于exec()

13.Python的类可以有变量、属性、方法

 "_"单下划线开头通常默认为protect类型的

 "__"双下划线开头通常默认为private类型的

 无下划线通常默认为public类型的

class classname(baseclass):

      a1=0

      a2=0

      def __int__(self,para,...)

          self.a1=0;

          ...

      @property

      def  myfunc1(self,...)

          ...

      @myfunc1.setter

      def  myfunc1(self,...)

          ...

      @static

      def  myfunc2(self,...)

          ...

14.无名函数lambda

lambda x,y:一句表达式    (返回表达式结果)

15.深度拷贝 copy模块

a=3

b=copy.copy(a)   2份a对象

16.urllib模块可以对网页操作

page=urllib.urlopen(url)

html=page.read()  读取网页代码

urllib.urlretrieve(url1) 下载网页中的url1资源

16.yield

yield用于阻塞,使函数返回并记住当前位置,下次调用从阻塞处开始执行,直到下一个阻塞处。有yield的函数叫做生成器generator,具有next()方法和send()方法。

17.re模块(正则匹配)

re模块的方法或re.compile生成的正则表达式对象的方法

findall(regex,'字符串')  返回匹配的所有字符

search(regex,'字符串') 返回匹配的所有字符串的位置

finditer(regex,'字符串') 同findall,但返回的是一个迭代对象,通过迭代得到匹配字符

match(regex,'字符串') 在‘字符串’开始位置处匹配,返回一个match对象

re模块中的函数还可以有第三个属性入参

 re.S 使匹配包括换行符等所有格式字符

 re.I使匹配对大小写不敏感

 re.L做本地化识别

 re.M多行匹配,会影响到^和$ (\n为换行符)

 re.X匹配时忽略regex中的\n,这样便于组织正则表达式,可以写成多行。

18.Python的命令行执行函数

os.system('命令行') 阻塞无返回

os.popen('命令行') 非阻塞

commands.getoutput('命令行') 执行并返回结果

19.object对象

继承了object类的子类叫新型类,可以获得或重载许多特殊的功能,object类中以__XXX__命名的函数都是特殊函数,能赋予子类特殊的功能,用户使用这些函数具体实现功能需要在子类中重载。比如__str__()当print子类对象时会调用这个函数,用户可以在该函数中添加一个信息。

20.永久字典及SQLite数据库

永久字典(磁盘字典)属于一种数据库,与内存字典基本相同,但是关键字和值都必须是字符串

 import anydbm

 dicta=anydbm.open('filename','c')

 dicta['a']='1'

 dicta['b']='2'

 dicta['c']='3'

 dicta.close()  #关闭字典

字典数据库anydbm.open有3种打开选项

‘C’:打开或创建文件,以便于进行读写

‘N’:打开并覆盖原有文件

‘W’:打开文件,如果文件不存在,将抛出一个错误信息。

Python内置的SQLite数据库

import sqlite3

conn=sqlite3.connect(dsn='dbname',user='tiger',mpassword='scott')

cursor=conn.cursor()

sursor.excute("CREATE table T IF not exist(empid integer,firstname varchar lastname varchar,dept integer)")

...

conn.commit()

cursor.close()

conn.close()

21.Python对象以及以字符串调用对象中的属性-反射

(1)import和from...import...的不同:import modulename  将整个模块导入到另一个文件中作为模块对象,该对象名为modulename,然后可以使用该对象访问对象中的元素;from modulename import markname 将模块中的所有符号导入到另一个文件中作为符号对象,此时modulename中的符号成为该文件中的公共符号。

(2)a=__import__("字符串")函数将字符串指定的模块名导入到另一个文件中,并返回一个对象引用

(3)在Python中可以用字符串指定属性名获得任意对象(包括模块)中的属性:1)globles()函数可以以字典的形式返回当前模块中所有对象的字符名和对象引用;2)getattr(对象,"属性字符串")可以返回属性对象的以字符串指定属性的该对象属性的引用。比如返回模块对象中某个函数引用

(4)Python的反射函数全部都在__buildin__模块中,常用的反射函数有:

dir(object):以字符串形式列出对象的所有属性

vars(object):以字典形式列出对象中的所有变量名字及值(不包括函数)

eval('表达式或引用'):能执行一个字符串表达式

sys.module['modulename']  :能以字符串的形式引用已导入的模块

22.python 模块的搜索路径配置

方法一:函数添加(适合大包内部的小包)
1 import sys
2 查看sys.path
3 添加sys.path.append("c:\\")

方法二:修改环境变量(适合windows系统)
w用户可以修改系统环境变量PYTHONPATH

方法三:增加.pth文件,推荐!
在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。
 1 windows
    c:\python27\site-packages
 2 linux(ubuntu)
   /usr/local/lib/python2.7/dist-packages
 3 linux(redhat)
   /usr/lib/python2.7/site-packages

  


23.classmethod和staticmethod

@classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。 普通对象方法至少需要一个self参数,代表类对象实例类方法有类变量cls传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类。 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。 



本文转自 a_liujin 51CTO博客,原文链接:http://blog.51cto.com/a1liujin/1701830,如需转载请自行联系原作者

上一篇:Mysql rpm包安装


下一篇:android 图片二维码识别和保存(二)