人工智能小白日记之3python篇 - Go语言中文社区

人工智能小白日记之3python篇


关于python

python嘛,本来不打算写这篇的,但是其实自己也没用过几次,还是总结下。免得一些基础地方都看不懂,就要丢人啦。来来来,让我们干了这杯python3。
选用廖大神的:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

盗用廖大神的话是这么讲的:
在这里插入图片描述
接下来我就快速总结了。这里不写的太详细,过一遍,以后用的时候回来翻就行了,这阶段的目标是了解python里面的都有哪些工具可以用。

1.知己知彼

Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。(看到没,这就是装逼的最高境界,因为无聊)

Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,也有大量其他人员编写的第三方库。也就是说我们直接使用这些封装好的库就行了。

Python的优点:简单优雅,尽量写容易看明白的代码,尽量写少的代码。而且也是跨平台的。

Python的缺点:速度慢。Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码;代码不能加密。如果要发布你的Python程序,实际上就是发布源代码。

适用场景:
1.首选是网络应用,包括网站、后台服务等等;
2.其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;
3.另外就是把其他语言开发的程序再包装起来,方便使用。

2.安装跳过,大家看教程去

3.关键点

3-1.运行

可以在python的交互界面直接运行,也可以是.py后缀的文件中编写,然后通过

python xxx.py

执行。

3-2.日志

日志是比较重要的,如果没有单步调试,就靠日志来排除错误,找出问题了,python的日志也超级简单

print()

3-3.输入

输入可以接收外部的参数

name = input()

3-4.注释

注释可以方便大家阅读代码,python的注释以“#”开头

#name = input()

注释掉这行,这行代码不再执行。

3-5.基础语法跳过,记录特殊点

1)为了简化,Python还允许用r’‘表示’‘内部的字符串默认不转义
2)允许用’’’…’’'的格式表示多行内容
3)空值是Python里一个特殊的值,用None表示

4)python的变量没有类型,可以直接赋值。这种变量本身类型不固定的语言称之为动态语言,常见的java,c这些都是静态语言。

5)python的两种除法。/除出来是浮点数,//除出来是取整

6)在最新的Python 3版本中,字符串在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'

7)Python对bytes类型的数据用带b前缀的单引号或双引号表示,但bytes的每个字符都只占用一个字节。str通过encode()方法可以编码为指定的bytes,要把bytes变为str,就需要用decode()方法

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'xe4xb8xadxe6x96x87'

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'xe4xb8xadxe6x96x87'.decode('utf-8')
'中文'

8)为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,
Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,
你在源代码中写的中文输出可能会有乱码。

申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确
保文本编辑器正在使用UTF-8 without BOM编码:

9)静态有序的元祖tuple,动态有序的list

10)函数定义

def my_abs(x):

python的函数可以返回多值,实际上是一个tuple。

》可以定义默认参数

def power(x, n=2):

可变参数仅仅在参数前面加了一个
关键字参数,如果希望保留可变参数的变量名,可以**key,key将获得一个dict拷贝
命名关键字参数需要一个特殊分隔符
,*后面的参数被视为命名关键字参数。

def person(name, age, *, city, job):

》如果需要将以上组合,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

3-6.高级特性

1)list和str可以切片获取片段
2)迭代
3)列表生成式超强的有木有
4)更加强大的generator生成器
5)Iterable对象与Iterator对象的区别

3-7.函数式编程

也叫面向过程编程
1)强大的映射函数map
2)强大的累积函数reduce
3)filter()函数用于过滤序列
4)sorted()函数就可以对list进行排序
5)装饰器Decorator的用法
6)偏函数通过设定参数的默认值,可以降低函数调用的难度。相当于定义重载函数。

3-8.模块

这里讲了模块的创建,第三方模块的安装

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():
    args = sys.argv
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()
    

3-9.面向对象编程

这里跟其他语言的比较类似。记下不一样的
1)使用__slots__可以限制该class实例能添加的属性

class Student(object):
    __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称

2)Python内置的@property装饰器就是负责把一个方法变成属性调用的
3)MixIn的目的就是给一个类增加多个功能,优先考虑通过多重继承来组合多个MixIn的功能。

class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
    pass

4)看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。

定义_str__()方法可以定制输出;

通常__repr__ = __str__,__repr__是开发人员看的字符串;

如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个
__iter__()方法;

__next__()方法拿到循环的下一个值;

要表现得像list那样按照下标取出元素,需要实现__getitem__()方法;

在没有找到属性的情况下,会调用__getattr__;

只需要定义一个__call__()方法,就可以直接对实例进行调用;

5)同样有枚举类Enum
6)对类本身进行操作的type()和metaclass

3-10.测试调试相关

这里需要特别关注,这关系到我们以后编码的效率,如果发生错误,结果你半天都找不到原因,那就非常尴尬了。

1)try…except…finally…的错误处理机制
2)logging模块可以非常容易地记录错误信息,打印完错误信息后会继续执行,并正常退出。通过配置,logging还可以把错误记录到日志文件里。
3)启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态
4)Python自带的unittest模块可以用作单元测试
5)Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试。

3-11.高级编程

3-11-1. IO编程

1)文件读写
这里在自然语言处理的时候可能会用到,需要将语音转换为文本,转换成文本的时候就处理语音和文本的输入输出。

2)StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口

3)操作文件和目录

4)把变量从内存中变成可存储或传输的过程称之为序列化

3-11-2. 进程和线程

1)多进程
在Unix/Linux下,可以使用fork()调用实现多进程。当然windows可以装虚拟机来代替。

要实现跨平台的多进程,可以使用multiprocessing模块。

进程间通信是通过Queue、Pipes等实现的。

2)多线程
Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块

多线程是内存数据共享的,需要保护数据一致性。也是通过同步锁的概念Lock。

Python由于GIL锁的存在,多线程其实还是单核任务。但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。

一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题。(做安卓的同志应该能很快理解)

3)Python的分布式进程接口简单,封装良好,适合需要把繁重任务分布到多台机器的环境下。

3-11-3. 大名鼎鼎的正则,跳过了

不为啥,哈哈,内容太多,讲不完。完全可以当一门课单独学习。

3-11-4. 常用内裤

前面说的各种库,终于要在这里了解了。
1)datetime 很明显时间日期相关的操作可以在这里找到

2)collections模块提供了一些有用的集合类

3)Base64现在应用广泛,什么图片转文本用于传输,还有加密算法里面很常见。Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。

4)struct模块解决bytes和其他二进制数据类型的转换。

5)hashlib 包含MD5,SHA1等摘要算法,在服务端保护用户信息很常见。

6)hmac 我们经常听到的加盐算法

7)itertools提供了非常有用的用于操作迭代对象的函数

8)contextlib 上下文工具,理解起来有点费解

9)urllib提供了一系列用于操作URL的功能。http请求可以用上

10)xml,经常会涉及xml文本的解析与输出

11)HTMLParser可以非常方便地解析HTML,只需简单几行代码。

3-11-5. 常用别人的内裤

1)Pillow已经是Python平台事实上的图像处理标准库了
2)requests 处理网络请求比urllib更加便捷
3)使用chardet检测编码非常容易
4)psutil = process and system utilities 。可以方便的获取系统信息,运维好搭档。

3-11-6. virtualenv

virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。

3-11-7. GUI界面,这个暂时跳过,估计用不上

3-11-8. 网络编程,大同小异,tcp,udp,跳过

3-11-9. 电子邮件,跳过

3-11-10. 数据库

1)Python就内置了SQLite3,直接无缝使用。

在Python中操作数据库时,要先导入数据库对应的驱动,然后,通过Connection对象和Cursor对象操作数据。

要确保打开的Connection对象和Cursor对象都正确地被关闭,否则,资源就会泄露。

2)mysql耳熟能详了
3)SQLAlchemy ,python的ORM(对象关系映射)框架,可以直接把数据库存储与内存对象映射,谁用谁知道。

3-11-11. web开发

Python有上百种Web开发框架,有很多成熟的模板技术,选择Python开发Web应用,不但开发效率高,而且运行速度快。

1)web的html,js跳过
2)通过WSGI接口可以实现python版本的web服务。当然如果太复杂的web服务,要利用在这个基础上抽象出来的框架。
3)常用web框架Flask

3-11-12. 异步IO

也叫非阻塞式IO,不同线程之间相互协作,互不干扰。
1)asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持
2)Python从3.5版本开始为asyncio提供了async和await的新语法
3)asyncio实现了TCP、UDP、SSL等协议,aiohttp则是基于asyncio实现的HTTP框架

教程最后附赠了实战。

4. 小结

呼呼,python3就这样干撸完了。大致内容跟诸多语言一样,还是比较全面的。从基本语法,到函数,到面向对象,IO,多线程,网络编程,数据库,web,应有尽有。学完基本上可以独立开发web应用和跨平台软件,可以可以。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/kkae8643150/article/details/86555585
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢