python基础

来源:互联网 发布:淘宝如何取消店铺 编辑:程序博客网 时间:2024/05/18 17:01

dir()函数:列出模块定义的函数、类和变量等标识符

List是可变的(mutable),

tuple

tuple是不可变的(immutable),只支持读取操作, tuple所谓的“不变”是说,tuple的每个元素,指向永远不变,若元组的某个元素是list, 该list内的元素是可变的.
empty_tuple=(), single_tuple=(item1,),必须在第一个(唯一一个)项目后跟一个逗号
元组最通常的用法是用在打印语句中: print ‘%s is %d years old’ % (name, age)

dict

  • (key, value)对的map
  • 插入与删除的速度极快,但内存占用严重,且其key必为不可变对象

set

  • 无序和无重复元素的集合

对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。但这些方法会创建新的对象并返回,这样既可保证不可变对象的不可变性又可实现相似新对象的产生。

函数

  • 空函数 pass的存在主要是为了打通逻辑流程
  • Python的函数返回多值其实就是返回一个tuple
  • 函数执行完毕也没有return语句时,自动return None。
  • 默认参数必须指向不变对象!
  • 可变参数: 以”*parms”的方式定义,可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
  • 关键字参数: 允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
  • 高阶函数:函数名是变量名,一个函数就可以接收另一个函数作为参数
  • map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回
    序列的两个主要特点是索引操作符和切片操作符
    -reduce接收两个参数”函数与序列”,其效果为:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
  • filter()接收两个参数”函数与序列”,把传入的函数依次作用于每个元素,然后根据其布尔返回值决定各元素的去留
  • 函数作为返回值:在函数体内定义函数并返回该定义函数的名字,这样可以将真正的计算推迟到真正调用时刻;返回函数不要引用任何循环变量,或者后续会发生变化的变量
  • lambda函数
  • 偏函数functools.partial的作用:为一个函数的某些参数设置默认值并返回一个新的函数,例如 int2 = functools.partial(int, base=2)

模块与包

模块就是.py文件,包就是含有__init__.py文件的目录

__future__: 使用新版本的新特性,以避免旧版本的不兼容,例如 from future import division

迭代:以for…in…方式实现,isinstance(x, Iterable)对x进行是否可迭代的判定,主要设计enumerate, itervalues, iteritems函数

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list

生成器(Generator):可在循环的过程中不断推算出后续的元素,不必创建完整的list,从而节省大量的空间,可通过for…in…方式访问Generator

python的赋值操作都是浅copy, 也就是说, 只是给相关对象的内存地址赋予另外一个名称而已. 这样意味着:
如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单对象 ),那么你必须使用切片操作符来取得拷贝,或者相关对象支持的copy方法来完成复制.

面向对象

类(域与方法)
类方法的第一个参数必须是self, python利用利用self可以将MyObject.method(arg1, arg2)自动转为MyClass.method(MyObject, arg1, arg2)
类的域(变量)有两种类型: 类的变量和对象的变量

Python中所有的类成员(包括数据成员)都是公共的,如果某个变量只想在类或对象中使用,就应该以单下划线前缀

对象信息获取:dir():一个对象的所有属性和方法; isinstance():判断一个对象是否为指定类型; type():获取一个对象的类型信息;操作一个对象的状态:getattr()、setattr()以及hasattr()

动态语言OOP的新特点:

  • 可以给对象动态绑定属性与方法,但给一个实例绑定的方法,对另一个实例是不起作用的; 类似地,可以给类动态绑定属性与方法,
  • 利用__slots__变量可以限制该class能添加的属性,如:__slots__ = (‘name’, ‘age’),该类不能再动态绑定其他属性了,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的
  • 在getter方法前加上@property可将该方法变成属性; @xxx.setter,负责把一个setter方法变成xxx属性赋值

  • \实现getitem方法以使得可类似list方式访问类实例, __iter__类似java中的iterable接口,

序列化

  • 对于自定义的类,当调用json.dumps进行序列化对象时需要在类内定义obj2dict方法,当调用json.loads进行反序列化对象时需要在类内定义dict2obj方法
原创粉丝点击