社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

对Python老司机99%有帮助的简明语法总结乱编

马哥Linux运维 • 7 年前 • 953 次点击  

本文由马哥教育Python实战开发班6期学员推荐,转载自互联网,作者为赖笔小新,感谢作者的辛苦付出和贡献。


最近发现进入python群的朋友都在你是如何自学python语法的,每当被问到这个问题时,我内心是坦荡的,因为我不知道到底我接下来说的这些话会给看到的各位带来什么?

虽然大家已经对Python已经有了一个初步认识 了,但是我还不得不说关于Python语法的一些事,以便于我这个装逼的过程顺利的完成。

————!!! 只针对有经验开发人员


简单输入输出


输出

print 10 , '十'

输入

name = raw_input()

python基础


数据类型和变量

常规类型:整形、浮点型、字符串(以' 或者 " 括起来)、布尔值(True, False 奇怪为什么用大写)。

转义使用\

多行请用'''...'''表示

布尔运算符:and or not

空值:None

python并无实质常量,只有约定常量,全大写表示(个人觉得使用objective-c的k开头表示法也不错。比如kServerAddress)

字符串和编码

在日常编写中似乎用不太到字符编码互转的功能

字符串格式化: 'hello , %@' % 'world!'

使用%s占位符, 使用 % 表示需要格式化字符串,后跟tuple变量

使用list和tuple

list其实就是数组,定义:['1', 'hello']

使用len(list)计算数组元素个数

使用(1, 2, 3)定义tuple,其实就是不可变的数组。

条件判断和循环

if condition : block elif condition: block else : block代码段落需要严格缩进,不需要大括号。

for item in list: block

range(number)可以生成从0 到 number-1的list

while condition : block

可以使用int('string')或者float('string')获取对应值

使用dict和set

字典类型:dict = {'key' : value}

使用dict[key]直接取值会报错,方法是使用 dict.get(key),如果没有值会返回None

使用pop(key)删除一个item

set可以看成是在帮你管理一个不可重复元素的列表,并提供一些高级功能,比如联合(\)、交(&)、差(-)和对称差集(^)

函数


定义函数

空函数:pass

类型检查,python是类型不安全的,所以我们可以通过isinstance(var, (type1, type2))来检查类型

返回多个值,使用tuple。不过可以省略括号,类似x, y = 3, 4

默认值:def method(arg1 = 'arg1'),注意默认参数只能放到最后

可变参数:def method(*var_arg):,其中var_arg是一个tuple,可以使用for in来遍历

关键字参数:def method(**key):,关键字参数不限制传入的参数个数和类型,会在函数内部组合成一个dict

参数组合:当定义为def func(a, b, c=0, *args, **kw):可以这样调用:func(*args, **kw)其中,args为tuple, kw为字典

递归函数,注意递归函数的溢出崩溃问题。python并没有为尾递归做优化,所以还是会崩溃的。

高级特性


切片

array[0:3]:表示从第0个元素开始,取3个

array[-3:-1]:表示取倒数第三,第二个元素,-1表示最后一个。

array[::5]:表示每5个取一个元素

字符串也可以切片

迭代

迭代即使用:for item in array,array既可以是数组,也可以是字典或者字符串

判断是否可以迭代,isinstance(object, Iterable),判断对象是否实现了Iterable接口

迭代dict:for key in dict遍历key。for value in dict.itervalues()遍历value。for k, v in dict.iteritems()遍历key和value

列表生成器

列表生成使用range(start, end)函数

混合生成使用简写for in 迭代。[x * x for x in range(1, 10) if x % 2 == 0]

也可以使用两层循环,[x * y for x in range(1, 10) for y in range(20, 30)]

生成器

如果你需要一组序列,但是太大,占用内存过多。那么可以使用生成器,它是实时计算的列表。

将列表生成表达式的[]变为()即可。

可以将一个函数变成一个生成器,只需要添加yield item语句即可,生成器会在遇到yield的时候返回对应结果,下次next从上次yield之后开始执行。

函数式编程


高阶函数

函数可以赋值给变量,可以当成参数传递给函数

map:对每个列表中得元素作用一个函数,并返回。

reduce:将结果和下个元素传给函数,最终返回一个结果。

filter:过滤器,使用方法跟map差不多,是返回结果为true的元素

sorted:排序,跟map差不多

返回函数

可以在函数中定义函数,并返回。就像一个变量一样。

闭包:返回的函数可以使用定义函数内部的变量

匿名函数

匿名函数即lamdba表达式:lamdba 参数 : 表达式

装饰器

概念:即在函数执行前后加一些逻辑不想管的代码,比如log

实现

deflog(func):@functools.wraps(func)defwrapper(*args, **kw):print'call %s():'% func.__name__returnfunc(*args, **kw)returnwrapper

@logdefnow():print'2013-12-25'

偏函数

简单的讲就是创建具有特定模式的函数别名,这个特定模式大概指的是设定好某些参数(默认参数),来达到简写的目的。

int2 = functools.partial(int, base=2)这样就创建了一个专门转化二进制的函数了。因为我们设定了默认参数base = 2

当参数太多需要简化的时候就是用偏函数

模块


模块

一个py文件就是一个模块,目录就是包名

使用模块

这是一个标准的模块模板

#!/usr/bin/env python# -*- coding: utf-8 -*-' a test module '__author__ ='Michael Liao'importsysdeftest():args = sys.argviflen(args)==1:print'Hello, world!'eliflen(args)==2:print'Hello, %s!'% args[1]else:print'Too many arguments!'if__name__=='__main__':    test()

模块内部的私有变量和函数一律使用_开头,且不要在外部进行引用。

安装第三方模块

pip install 模块名称

使用__future__

future可以把下个版本的新功能添加到当前版本

面向对象编程


类和实例

定义类

classClassName(SuperClass):pass

构造方法def __init__(self,args)`

访问限制

使用__双下划线开头可以让变量成为私有,外部无法访问。也可以通过添加getter、setter来控制访问操作。

继承和多态

继承就在定义的时候写上父类的名称,多态就覆盖父类的方法。

获取对象信息

使用type()判断类型信息

使用isinstance()判断继承关系

使用dir()获取对象的所有方法和属性

面向对象高级编程


使用slots

动态添加属性:instance.pro = 10

动态添加方法:instance.newmethod = MethodType(method_name, instance, class_name)

为了防止胡乱添加属性可以使用__slots__ = (被允许的属性)

使用@property

如下,定义了一个score的属性

@propertydefscore(self):returnself._score  @score.setterdefscore(self, value):ifnotisinstance(value, int):          raise ValueError('score must be an integer!')ifvalue <0orvalue >100:          raise ValueError('score must between 0 ~ 100!')self._score = value

多重继承

最好不要用多重继承,用mixin

mixin其中概念,用类来提供一组相似功能。类似实现过的接口。

定制类

使用类似slots来定制一个类的行为。

str打印类时的信息

repr直接写打印出来的信息

iter用于for ... in迭代,__iter__返回下一个迭代对象,next()用于拿到循环的下一个值

getitem提供下标访问

getattr当找不到这个属性的时候会调用这个方法

call当使用instance()这样来把对象实例当成方法调用的时候,其实调用的就是__call__。

可以使用callable(thing)来判断一个东西是否可以被当成方法调用

使用元类

types():使用它来动态构建类,方法是types('ClassName', (SuperClass, ), dict(methodName = method))

错误、调试和测试


错误

try...except...finally...

错误基类是BaseException

常见的错误类型

记录错误,使用python模块logginglogging.exception(exception instance)可以将错误调用对战输出出来

也可以自定义错误类型,方法是继承自某个Exception,然后使用raise语句

直接写raise可以把当前exception抛出,让上层调用处理。

调试

断言:assert is true? , 'error message'

logging可以方便的输出日志,包括错误。

logging.info('info')。method可以是debug,info,warning,error中的一个。

可以指定当前输出的method,方法是指定当前输出级别logging.basicConfig(level=logging.INFO)

pdb:python -m pdb err.py 开始调试l 查看代码n单步执行p查看变量q结束测试c继续执行

程序内部设置断点:import pdb,在可能出错的地方放置pdb.set_trace()

还是使用IDE吧pycharm,下载http://www.jetbrains.com/pycharm/

以上便是我对Python知识的总结,欢迎大家点赞,评论,一起讨论~~



————广告时间————


马哥教育2017年Python自动化开发实战班,马哥联合BAT、豆瓣等一线互联网Python开发达人,根据目前企业需求的Python开发人才进行了深度定制,加入了大量一线互联网公司:大众点评、饿了么、腾讯等生产环境真是项目,课程由浅入深,从Python基础到Python高级,让你融汇贯通Python基础理论,手把手教学让你具备Python自动化开发需要的前端界面开发、Web框架、大监控系统、CMDB系统、认证堡垒机、自动化流程平台六大实战能力,让你从0开始蜕变成Hold住年薪20万的Python自动化开发人才

开课时间:2017年08月28号

—————限时优惠抢位中—————



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/8ne6rO2Rcf
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2567
 
953 次点击