Python 学习总结

数据类型:

python 中的基本数据类型有:数字,字符串,布尔值以及空值

想使自己的代码支持中文在python 代码的文件头加上
# -×- coding:utf-8 -×-

python中的高级数据结构包括:list,tuple,dict和set
list:有序集合,可以任意添加和删除其中的元素
定义:list=['a','b']
tuple:有序集合,但进行过初始化后就不能改变其中的元素的值,也不能进行添加和删除
定义:tuple=('a','b')
dict:使用一对一的键值存储,具有极快的查找速度
定义:dict={'key':'value','keytoo':'valuetoo'}
set:一组没有重复的key 的组合,但不存储value
定义:s=set([1,2,3])

判断和循环语句:

if condition:
   pass
elif condition:
   pass
else:
   pass
if语句从上向下判断,如果一个语句被判断为True,则不会执行剩下的语句。

循环分为两种:
一中是for...in...循环,依次把list或者tuple的每个元素迭代出来
for x in range(100):
   pass
一种是while循环:
while condition:
   pass

函数:

定义:
def function(argv='abc'): #如果没有给argv赋值,则采用'abc'这个默认值
    pass
返回多值:
def function(argv,argv):
    return x,y
x,y = function(argv,argv)
但其实返回的是一个tuple,可以省略括号,多个变量可以接收一个tuple,按顺序赋给对应的值。

可变参数:
def function(*numbers):
    pass
其实传进函数的是一个tuple,进入函数之后再用for 循环进行分解。
在向可变参数的函数传递list或者tuple的时候如下加一个星号:
nums = [1,2,3]
function(*nums)

关键字参数:
关键字参数允许传入0个或者任意个参数名的参数,这些关键字参数,在函数的内部自动组成一个dict
定义:
def person(name,age,**kw):
    print 'name:',name,'age:',age,'other:',kw
#kw参数也传进来一个键值对。

在python的函数定义中,可以必选参数,默认参数,可变参数和关键字参数四种参数类型一起使用。或者只用其中的一些。但是,参数的定义顺序必须是,必选参数,默认参数,可变参数以及关键字参数。
如:
def func(a,b,c=0,*argv,**kw):

总结:*argv 是可变参数,接收的是一个tuple,**kw是关键字参数,接收的是一个dict。

高级特性:

for 循环可以同时使用两个甚至多个变量,例如dict的iteritems()可以同时迭代key和value.
d = { 'x':'A','y':'B','z':'C'}
for k,v in d.iteritems()
    print k , '=', v

使用内建的isinstance函数可以判断一个变量的类型
isinstance(x,str/int)

函数式编程:

高阶函数:
map(),reduce(),sorted(),reversed_cmp()
匿名函数:
lambda x:
     pass
关键字lamba表示匿名函数,冒号前面的x表示函数参数。
匿名函数只能有一个表达式,并且不用写return,返回值就是该表达式的结果。
使用匿名函数有个好处,因为函数没有名字,所以不用担心函数名冲突。
f=lambda x: x*x
print f(5)
#python 对匿名函数支持有限,尽量只在一些简单的情况下使用。
装饰器:
@log
deg f():
    pass
def log(func):
    def decorator(func):
        pass
        return func()
     return decorator
主要是为了权限认证以及日志的打印


模块


在python中一个.py文件就是一个模块
if __name__ == '__main__'相当于python 的主函数

使用import sys
sys.path可以显示出所有的已安装模块和内置模块的存放路径。

如果要添加自己的搜索目录,使用sys.path.append('路径‘)进行添加

可以使用from __future__ import module 可以将未来版本的一些特性引进


面向对象编程:

类的定义:
class 类名():
    def func():
         pass

类中的方法和普通的函数只有一点不同,那就是第一个参数永远是self,并且调用时不用传递该参数
访问限制:
类似__name,__score 的是私有变量,在类外不能直接访问
类似__name__的是类内置的特殊变量,在类外是可以直接访问的
继承和多态:
一般类全部继承自object
class animal(object):
      pass
class person(object):
      pass
一般继承的定义:
class Dog(animal):
      pass
同样可以从多个类进行继承:
class Mary(Dog,person):
      pass
所有的子类自动继承了父类所有的方法,也可以对这些方法进行重写覆盖。

而判断一个实例是否是某个类型同样可以使用isinstance 进行判断
isinstance(harry,Dog)
也可以使用type()函数,进行判断

使用getattr(),setattr(),hasattr()函数我们可以直接操作一个实例的状态。例如:
class MyObject(object):
   def __init__(self):
       self.x=9
   def power(self):
       return self.x * self.x
obj = MyObject()
hasattr(obj,'x')#判断是否具有x属性
setattr(obj,'x',19)#将x属性设置为19
y = getattr(obj,'x')#获取属性x
如果试图获取不存在的属性将会抛出AttributeError的错误

上述函数不仅可以获取实例的属性,而且可以获取实例的方法
hasattr(obj,'power')
getattr(obj,'power')

可以在实例创建之后给实例增加属性或者方法,但是增加的属性和方法对其他实例是不起作用的。
Mary = MyObject()
Mary.name = 'Mary' #增加了一个name的属性
def set_age(self,age)
    self.age = age
from types import MethodType
Mary.set_age = MethodType(set_age,mary,MyObject)#给实例增加了一个方法

如果我们想要限制类可以增加的属性可以使用__slots__属性
class Student(object):
      __slots__ = ('name','age')
这样Student类的实例可以增加name 和age 属性。但是__slots__是不可以继承的,在子类中必须要重新定义。

使用@property
property有两种方法,setter()和getter(),使用property则默认调用了getter(),而setter()则是可选的。
定义方法:
在getter()函数块上注明@property
而在setter()函数块上注明@函数名.setter,如:
class Student(object):
    @property
    def birth(self):
        return self._birth
 
    @birth.setter
    def birth(self,value):
        self._birth = value
 
    @property
    def age(self):
        return 2014 - self._birth
 
birth 是可读写操作,而age只是一个只读操作

类里面可以定制的方法:
__str__,用来打印实例内的字符串
__iter__,使类可以用于for..in..循环
__getitem__,_getattr__,__call__


错误处理:

try:
要运行的语句块
except 错误类型:
对错误进行处理的语句

调用堆栈:
如果错误没有被捕获,他就会一直往上抛,最后被python解释器捕获,打印一个错误信息。然后程序退出。
一般出错的根源在错误信息的最后一行。

记录错误:
python 内置的logging模块可以用来记录错误信息。并且在打印完错误信息以后程序依旧会继续执行。
信息的级别:debug,info,warning,error

抛出错误:
使用raise语句来抛出错误。
try:
    10/0
except ZeroDivisionError:
    raise ValueError('input error!')


数据库操作:


首先需要引进数据库模块,然后建立连接(conn = sqlite3.connect('test.db')
然后创建一个Cursor/游标 (cursor = conn.cursor())
然后执行sql 语句,cursor.execute(‘create table user(id varchar(20) primary key)‘)
关闭cursor(cursor.close())
关闭连接(conn.close())

主要的数据库操作是使用ORM(object-relational mapping),把关系数据库的表结构映射到对象上。最著名的ORM框架是SQLAlchemy


总结自:http://www.liaoxuefeng.com/  (一个比较好的python 教程)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值