博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python知识梳理
阅读量:4970 次
发布时间:2019-06-12

本文共 3587 字,大约阅读时间需要 11 分钟。

这是个人学习笔记,非教程,内容会有些混乱

极简教程

 
 

数据类型

我们可以使用type()函数类获取对象的类型,Python3中内置数据类型包括:None,int,float,complex,str,list,dict,tuple,set,frozenset,range等,Python2中还有long类型,Python中并没有内置数组类型。

dict,list,set这些是可变类型(用户自定义类型也可变),可以改变类型对象的值;数值和字符串类型则是不可变的。

  • 与js一样,python中字符串即可用单引号也可用双引号表示

  • Python3中数值类型有:intfloat两种

  • 字面量表示:[1,1.0,False,'list']
    ,创建列表的一种简易方法:

     

     

  • 字面量表示:(1,1.0,False,'tuple')

list、tuple、range均属于

  •  

     

     

  • 集合是不包含重复元素的数据集,frozenset是不可变的,set是可变的,可以使用字面量构建一个集合{1,2,2,4,5}会输出{1,2,4,5}

     

类型转换

Python中只需调用相关函数即可


# 函数定义模板def func_name([self,][args]):    passdef say_hello():    print('hello python!')# python3.5之后,定义函数时可以添加类型说明# 这里只是提供一个说明文档而非强制类型约束def type_instruction(num:int)->int:    return num

 

定义函数

# 多返回值函数,返回一个tuple对象def multi_returns():    return 0,1

 

内置函数

Python中有许多:

  • 我们可以使用dir()函数来查看对象都含有哪些成员:

     

     

     

  •  

     

  •  

     

  • 不是内置函数,但也很有用

     

     

lambda

Python中使用lambda关键字即可创建lambda表达式:

 

 

*args 与 **kvargs

*args**kvargs都用于函数中接收多个参数,这里argskvargs只是约定俗成的写法,可以换成其它的名称,但***则是必须的。

*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.

应该避免的名称

  1. 单字符名称, 除了计数器和迭代器.
  2. 包/模块名中的连字符(-)
  3. 双下划线开头并结尾的名称(Python保留, 例如init)

命名约定

  1. 所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.
  2. 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).
  3. 用双下划线(__)开头的实例变量或方法表示类内私有.
  4. 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
  5. 对类名使用大写字母开头的单词(如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.CB.C,分别表示A包中的C模块和B包中的C模块。

  • import aimport a as aliasfrom a import *from a import b,c
    Python解释器会先从内置模块中寻找导入的模块,然后从sys.path中指定的寻找模块

测试

编写一个文件操作类,文件名为file_operator.py

# coding=utf-8import codecsclass 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-8import unittestclass 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挺有意思的。

最后附上一张,个人总结的语言学习套路:

 

 

 

推荐阅读

转载于:https://www.cnblogs.com/Cwj-XFH/p/9579800.html

你可能感兴趣的文章
jsp页面数据保留两位小数
查看>>
利用Struts2拦截器完成文件上传功能
查看>>
《剑指Offer》算法题——替换空格
查看>>
【洛谷 1908】逆序对
查看>>
codeforces 764 C. Timofey and a tree(dfs+思维)
查看>>
$.each遍历json对象
查看>>
轻松搞定面试中的链表题目
查看>>
angular.module()创建、获取、注册angular中的模块
查看>>
[转载] nginx的负载均衡
查看>>
第四周课下作业(考试补齐)
查看>>
本月,下一月, 上一月 的 1号, 最后一号
查看>>
C_文件包含.h文件和包含.c文件总结
查看>>
mockIto
查看>>
DIB位图(Bitmap)的读取和保存
查看>>
IOS-UITableViewStyle设置Group、Plain问题
查看>>
新建Application 报错android.app.Application cannot be cast
查看>>
jvm类加载器
查看>>
<s:submit> 指定的method方法不执行
查看>>
Java:取得当前日期一周之前/之后的日期,或者是一月之前/之后的日期
查看>>
聊一聊PV和并发、以及计算web服务器的数量的方法【转】
查看>>