Python语言入门

基础

使用#完成注释

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

布尔值为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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容