Python知识梳理
这是个人学习笔记,非教程,内容会有些混乱
极简教程
数据类型
我们可以使用type()
函数类获取对象的类型,Python3中内置数据类型包括:None,int,float,complex,str,list,dict,tuple,set,frozenset,range
等,Python2中还有long
类型,Python中并没有内置数组类型。
dict,list,set
这些是可变类型(用户自定义类型也可变),可以改变类型对象的值;数值和字符串类型则是不可变的。
列表推导式,创建列表的一种简易方法:
list、tuple、range均属于序列类型(Sequence Types)
- dict
- 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中有许多内置函数:
- dir
我们可以使用dir()
函数来查看对象都含有哪些成员:
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...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]内存管理](https://chenrudan.github.io/blog/2016/04/23/pythonmemorycontrol.html)
Python进阶
Python 入门指南
Python 3.7.0 documentation
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
apply,map,applymap总结
Python中apply,map,applymap总结 pandas中DataFrame 数据类型,使用map,apply方法使用较多,做一下总结。参考https://www.cnblogs.com/cymwill/p/7577369.html 总结: apply 用在dataframe上,用于对row或者column进行计算; applymap 用于dataframe上,是元素级别的操作; map (其实是python自带的)用于series上,是元素级别的操作。 df = pd.DataFrame(np.random.randint(0,10,(4, 3)), columns=list('bde'), index=range(4)) df b d e 0 4 9 3 1 3 1 0 2 4 8 0 3 2 9 9 apply:作用在dataframe的一行或一列上,也可以作用在series上 定义一个函数, f = lambda x: x.max() - x.min() 这个函数可以结合apply作用在DataFrame类型的行或者列上 # 和加上axis = 0 ,默认是作用在列...
- 下一篇
Visual Studio 代码风格约束
团队内部若能统一代码风格对于日后的项目维护大有裨益,但面对厚达十几甚至几十页的代码风格规范,开发人员难免产生抵触心理。Python和Go等在语言层面就对代码风格作了一定的约束,但C#并没有,为解决这个问题,我们可以在VS中设置团队内部要统一采用的代码风格。 文中所用VS版本信息如下: 设置代码风格 在VS搜索框中搜索Code Style 我们可以自定义代码风格(注意自定义规则顺序,是由上至下以此判断是否符合规则)以及对不符合风格代码做怎样的处理,这里是按照错误进行处理 可以看到对于不符合规范的命名VS会报错并给出改建建议:注意,这里的错误是IDE1006:Naming rule violation,编译时依然能通过(没找到在哪里设置不允许通过编译): 下面是代码风格示例代码,仅供参考: class Person { private const string FIRST_NAME = "firstName"; private static string StaticField = "static field"; private readonly string ReadOnlyField ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启