美文网首页
Python语言入门

Python语言入门

作者: testfor | 来源:发表于2017-09-18 22:32 被阅读0次

    基础

    使用#完成注释

    引号的下一行如果有缩进,视为代码块。

    布尔值为True,False

    布尔值运算符为and,or,not

    空值为None

    Python中无常量定义,如表示常量,应该写为大写字母,但仍可修改值。

    Python中有两种除法,/为浮点除,运算结果为浮点数,//为地板除,运算结果为整数

    ASCII码,Unicode编码,UTF-8编码

    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输时,就转换为UTF8编码

    ord与chr

    python中的str与bytes

    以Unicode表示的str通过encode()方法可以编码为指定的bytes,使用decode()方法将bytes转为str

    list与tuple元组

    classmates =['1','2','3']

    Classmates=('1','2','3')

    python中下标从0开始,可以用负下标

    tuple一旦初始化就不能修改

    只有1个元素的tuple定义时必须加个逗号,来消除歧义。

    Input()返回的数据类型为str

    python循环分为for和while两种,可使用break与continue语句

    For x in list:

    Xxx

    While True:

    Xxx

    dict与set

    d={'M':1,'N':2,'O':3}

    可使用in与get判断dict中某元素是否存在

    set与dict类似,也是一组key的集合,但不存储value

    set中元素不可重复,要创建一个set,需要提供一个list作为输入集合

    s=set([1,2,3])

    不可变对象

    函数定义

    Def my_abs(x):

    pass语句,空操作

    判断变量类型isinstance(x, (int, float))

    python中函数可以返回多个值,这些值以tuple元组的形式返回

    Python还可以使用默认参数,可变参数和关键字参数

    Def power(x, m=3,n=2)

    调用时,power(x, n=2)

    定义默认参数时,默认参数必须指向不可变对象

    可变参数

    Def calc(*numbers)

    在函数内部,numbers接收到的是一个tuple

    python允许在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去。

    关键字参数允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

    Def person(name,age, **kw)

    Extra={'1':1,'2':2,'3':3}

    Person('name',11,**extra);此时kw将获得extra的一份拷贝

    python可以限制关键字参数的名字,称为命名关键字参数

    Def person(name,age,*,city,job);*后参数视为命名关键字参数

    python中参数定义顺序必须是:必选参数,默认参数,可变参数,命名关键字参数和关键字参数

    递归调用的次数过多,会导致栈溢出。

    解决递归调用栈溢出的方法是通过尾递归优化。

    尾递归是指在函数返回的时候调用自身本身,并且return语句不能包含表达式,编译器或解释器会做相应优化。

    遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化。

    高级特性

    在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好。

    切片,与Matlab中取元素相似

    tuple也可以做切片操作,但操作结果仍是tuple

    字符串也可以做切片操作,但操作结果仍是字符串

    判断一个对象是否是可迭代对象,isinstance(x,Iterable);

    python内置的enumerate函数可以把一个list变成索引-元素对

    列表生成式,List Comprehension,是Python内置的非常简单却强大的可以用来创建list的生成式

    List(range(1,100))

    [x*x, for x in range(1,100)]

    [x*x, for x in range(1,100) if x%2==0]

    [m*n, for m in range(1,100) for n in range(1,100)]

    [d for d in os.listdir('.')]

    d={}

    [k+'='+v for k,v in d.items()]

    [s.lower() for s in L]

    Python中一边循环一边计算的机制,称为生成器,generator

    将列表生成式的[]改为(),就创建了一个generator,可使用next()函数获得generator的下一个返回值

    如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator,可使用next()不断获取yield返回的值

    可直接作用于for循环的数据类型有以下几种:

    一类是集合类数据类型,如list、tuple、dict、set、str等

    一类是generator,包括生成器和带yield的generator function

    Iterable vs Iterator

    可以被next函数调用并不断返回下一个值得对象称为迭代器,Iterator

    Iter()可将非Iterator的Iterable对象转换为Iterator

    函数式编程

    Python对函数式编程提供部分支持

    函数式编程的一大特点是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数

    高阶函数 Higher-Order function

    把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

    Map/reduce

    Filter用于过滤序列,返回值为True保留该元素

    Iterator是惰性计算的序列

    Sorted,扩展功能的参数有key与reverse

    提供闭包功能

    关键字lambda表示匿名函数,冒号前面的x表示函数参数

    Lambda x:x*x

    相当于

    Def f(x):

    Return x*x

    函数对象有一个__name__属性,可拿到函数名字

    在代码运行期间动态增加功能的方式,称为装饰器Decorator

    本质上,decorator是一个返回函数的高阶函数,

    @log

    Def now():

    Xxx

    相当于now=log(now)

    偏函数

    Int2=functools.partial(int, base=2)

    模块

    Python中,一个.py文件称为一个模块module

    为了避免模块名冲突,python又引入了按目录来组织模块的方法,称为包Package

    python中安装第三方模块,是通过包管理工具pip完成的

    面向对象编程

    Class Student(object):

    Def __init__(self,…):

    Xxx

    Def print(self):

    xxx

    判断对象类型

    isinstance()

    type()

    dir()获取对象的所有属性与方法

    getattr(), setattr(),hasattr()

    相同名称的实例属性将屏蔽掉类属性

    面向对象高级编程

    为了限制动态绑定类的属性,Python允许在定义类的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性

    Python内置的@property装饰器就是负责把一个方法变成属性调用的

    在设计类的时候,我们优先考虑通过多重继承来组合多个mixin的功能,而不是设计多层次的复杂的继承关系。

    定制类

    __str__, __repr__,__iter__, __next__,__getitem__,__getattr__,__call__,

    使用枚举类

    Month = Enum('Month',('Jan','Feb',))

    使用元类

    type()可动态创建类型

    Hello=Type('Hello',(object),dict(hello=fn))

    先定义metaclass,再创建类,最后创建实例

    错误,调试和测试

    try:

    except Exception as e:

    finally:

    Python内置的logging模块可以方便地记录错误信息

    抛出错误,raise 。。。

    三种调试方法

    使用print

    使用assert

    使用logging

    使用pdb

    IO编程

    With open('file path') as f:

    StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。

    Python的os模块封装了操作系统的目录和文件操作,要注意这些函数有的在os模块中,有的在os.path模块中。

    Python语言特定的序列化模块是pickle,但如果要把序列化搞得更通用、更符合Web标准,就可以使用json模块。

    virtualenv

    virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。

    pip3 install virtualenv

    相关文章

      网友评论

          本文标题:Python语言入门

          本文链接:https://www.haomeiwen.com/subject/rndisxtx.html