Python知识梳理
这是个人学习笔记,非教程,内容会有些混乱
极简教程
数据类型
我们可以使用type()
函数类获取对象的类型,Python3中内置数据类型包括:None,int,float,complex,str,list,dict,tuple,set,frozenset,range
等,Python2中还有long
类型,Python中并没有内置数组类型。
dict,list,set
这些是可变类型(用户自定义类型也可变),可以改变类型对象的值;数值和字符串类型则是不可变的。
str
与js一样,python中字符串即可用单引号也可用双引号表示numbers
Python3中数值类型有:int
和float
两种list
字面量表示:[1,1.0,False,'list']
列表推导式,创建列表的一种简易方法:tuple
字面量表示:(1,1.0,False,'tuple')
list、tuple、range均属于序列类型(Sequence Types)
-
set/frozenset
集合是不包含重复元素的数据集,frozenset是不可变的,set是可变的,可以使用字面量构建一个集合{1,2,2,4,5}
会输出{1,2,4,5}
类型转换
Python中类型转换只需调用相关函数即可
函数
# 函数定义模板
def func_name([self,][args]):
pass def say_hello():
print('hello python!') # python3.5之后,定义函数时可以添加类型说明
# 这里只是提供一个说明文档而非强制类型约束
def type_instruction(num:int)->int:
return num
定义多返回值函数
# 多返回值函数,返回一个tuple对象
def multi_returns():
return 0,1
内置函数
Python中有许多内置函数:
lambda
Python中使用lambda
关键字即可创建lambda表达式:
*args 与 **kvargs
*args
和**kvargs
都用于函数中接收多个参数,这里args
和kvargs
只是约定俗成的写法,可以换成其它的名称,但*
和**
则是必须的。*args
和**kvargs
的区别是,*args
用于接受普通参数,**kvargs
用于接受键值对参数。
三元运算符
面向对象
Python中一切皆对象(这句话理解起来并不是那么容易),包括函数(C#,JAVA中函数不能独立存在)。这里贴一篇以前写的文章:Python中的类、对象、继承
Python按赋值传递参数,对于不可变对象在修改时会产生新的对象;而对于可变对象,所有的修改都会反映在原有对象上。
可以动态的给对象/类型添加属性,若给类型添加属性,则该属性在已产生的实例上也是可见的:
异常与错误
Python中异常与错误类间关系如下:
自定义异常只需继承Exception
或各种Error
类即可
异常处理
try:
raise IOError('使用raise语句抛出异常')
except IOError as err:
print(err)
else:
print('未发生异常则执行')
finally:
pass
捕获多个异常类型:
try:
raise IOError()
except (IOError,TypeError):
pass
with语句
with...as...
语句等价于try...finally...
,与C#中的using
语句类似
命名规范
module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.
应该避免的名称
- 单字符名称, 除了计数器和迭代器.
- 包/模块名中的连字符(-)
- 双下划线开头并结尾的名称(Python保留, 例如init)
命名约定
- 所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.
- 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).
- 用双下划线(__)开头的实例变量或方法表示类内私有.
- 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
- 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.
Python之父Guido推荐的规范
Type | Public | Internal |
---|---|---|
Modules | lower_with_under | _lower_with_under |
Packages | lower_with_under | |
Classes | CapWords | _CapWords |
Exceptions | CapWords | |
Functions | lower_with_under() | _lower_with_under() |
Global/Class Constants | CAPS_WITH_UNDER | _CAPS_WITH_UNDER |
Global/Class Variables | lower_with_under | _lower_with_under |
Instance Variables | lower_with_under | _lower_with_under (protected) or __lower_with_under (private) |
Method Names | lower_with_under() | _lower_with_under() (protected) or __lower_with_under() (private) |
Function/Method Parameters | lower_with_under | |
Local Variables | lower_with_under |
包与模块
模块
包含Python语句或定义的文件就是一个模块,文件名就是模块名。在一个模块中,模块名是全局变量__name__
的值。包
包含__init__.py
文件的文件夹即可视为一个包,包用于管理模块,可以防止模块命名冲突。如:A.C
和B.C
,分别表示A包中的C模块和B包中的C模块。导入模块:
import a
、import a as alias
、from a import *
、from a import b,c
Python解释器会先从内置模块中寻找导入的模块,然后从sys.path
中指定的模块搜索路径寻找模块
测试
编写一个文件操作类,文件名为file_operator.py
:
# coding=utf-8 import codecs class FileOperator:
def save_file(self, file_path, content, encoding="utf-8"):
with codecs.open(file_path, "w", encoding) as f:
f.write(content)
编写测试用例,文件名为test_file_operator.py
:
# coding=utf-8 import unittest class TestFileOperator(unittest.TestCase):
def test_save_file(self):
content = "file content \r\n 文本内容"
opt = file.FileOperator()
opt.save_file("1.txt", content) if __name__ == "__main__":
unittest.main()
工具推荐
小结
以上是自己近期学习Python的一些总结,全文的主要关注点在Python语言本身。掌握以上内容后,便可以用Python写些脚本,辅以其他第三方包或框架就可以干更多更复杂的事了。如,爬虫、数据分析、后端开发以及现在比较热的人工智能(其实,我是不建议追热点的)。
用了一段时间的Python后,会觉着Python挺有意思的。
最后附上一张,个人总结的语言学习套路:
推荐阅读
人生苦短,为什么我要用Python?
Python风格规范
Python语言规范
[Python]内存管理
Python进阶
Python 入门指南
Python 3.7.0 documentation
Python知识梳理的更多相关文章
- python 知识梳理
1.数据类型:字符串,列表,元组,字典,集合.处理每种数据类型的函数 2.判断与循环部分 3.高级函数:lambda,map,reduce,filter 4.自定义模块以及第三方模块 5.函数式编程 ...
- spring远程服务知识梳理
序:本文主要是总结和归纳spring的远程服务相关知识,可作为入门学习笔记.写博客目的也是为了进行知识梳理,便于以后查看.本文主要参考资料 spring 实战第三版 本文主要讨论内容如下: 远程调度概 ...
- 软件测试人必备的 Python 知识图
之前发过蛮多不少关于 Python 学习的文章,收到大家不少的好评,不过大家也有许多困惑: 现在测试不好做,是不是真的该重新去学一门热门的语言? 入门 Python 该学哪些知识点?该看哪些书? 可以 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
- solr DIH 知识梳理
solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...
随机推荐
- drf4 视图与路由组件
APIView和View的区别 不管是View还是APIView最开始调用的都是as_view() APIView继承了View, 并且执行了View中的as_view()方法,最后把view返回了, ...
- TensorFlow --playground游乐场
TensorFlow游乐场官网http://playground.tensorflow.org(国内需要梯子才能访问) 游乐场的神经网络结构有三层,第一层为输入层,输入的是特征向量(描述问题特征的向量 ...
- JavaScript基础视频教程总结(011-020章)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 2月第3周业务风控关注|上海网信办复测23个被约谈APP 涉及1号店、小红书等
易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1.上海网信办复测23个被约谈A ...
- Java 虚拟机的内存结构
Java虚拟机运行时数据区 整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的J ...
- Redis 客户端命令总结
注意:括号里是参数,具体使用的时候不需要括号和逗号,直接使用空格分隔命令以及各个参数即可. 1.对Key操作的命令 exists(key):确认一个key是否存在.存在返回1,不存在返回0. del( ...
- Java面试集合(一)
前言 大家好,给大家带来Java面试集合(一)的概述,希望你们喜欢 一 1.Java按应用范围可划分几个版本? 答:Java按应用范围有三个版本,分别是JavaSE,JavaEE,JavaME. 2. ...
- ios webview下footer部分fixed失效问题
场景: 如下图所示,一个很正常的页面需求,footer固定在底部,中间为滚动内容区 然后footer的css一般是这样的 footer{ position:fixed; bottom:; left:; ...
- RSA实现JS前端加密,PHP后端解密
web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...
- 【Spark调优】Shuffle原理理解与参数调优
[生产实践经验] 生产实践中的切身体会是:影响Spark性能的大BOSS就是shuffle,抓住并解决shuffle这个主要原因,事半功倍. [Shuffle原理学习笔记] 1.未经优化的HashSh ...