python基础

学习自廖雪峰博客

29、web开发
如果要学习Web开发,首先要对HTML、CSS和JavaScript作一定的了解。HTML定义了页面的内容,CSS来控制页面元素的样式,而JavaScript负责页面的交互逻辑。讲解HTML、CSS和JavaScript就可以写3本书,对于优秀的Web开发人员来说,精通HTML、CSS和JavaScript是必须的。
28、访问数据库
27、电子邮件
28、网络编程
互联网上每个计算机的唯一标识就是IP地址;TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达;一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口;许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等
#用TCP协议进行Socket编程在Python中十分简单,对于客户端,要主动连接服务器的IP和指定端口,对于服务器,要首先监听指定端口,然后,对每一个新的连接,创建一个线程或进程来处理。通常,服务器程序会无限运行下去。同一个端口,被一个Socket绑定了以后,就不能被别的Socket绑定了。
 
27、图形界面——如何使用Tkinter进行GUI编程
我们编写的Python代码会调用内置的Tkinter,Tkinter封装了访问Tk的接口;Tk是一个图形库,支持多个操作系统,使用Tcl语言开发;Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。所以,我们的代码只需要调用Tkinter提供的接口就可以了。
海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle库,基本上100%复制了原始的Turtle Graphics的所有功能。
26、常用第三方模块
(1)pillow
PIL(python imaging library):图像处理标准库。由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。
(2)requests
我们已经讲解了Python内置的urllib模块,用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。更好的方案是使用requests。它是一个Python第三方库,处理URL资源特别方便。
(3)psutil
用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps,top,free等等。要获取这些系统信息,Python可以通过subprocess模块调用并获取结果。但这样做显得很麻烦,尤其是要写很多解析代码。
在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。
25、常用内建模块
24、正则(内容太多)
d可以匹配一个数字
w可以匹配一个字母或数字
.可以匹配任意字符
要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符
23、进程和线程

 

(2)操作文件和目录

(3)列表生成式

 

21、错误、调试和测试
(1)错误处理

(2)调试
!哪里出错了,可以不用到处print……直接用assert,最后启动python
解释器的时候加一个-O:python -O err.py
!也可以把print换成logging
!启用python的调试器pdb,让程序以单步方式运行:$ python -m pdb err.py

!如果要比较爽地设置断点、单步执行,需要一个支持调试功能的IDE:比如PyCharm
(3)单元测试
(4)文档测试
20、面向对象高级编程
(1)使用__slots__

(2)使用@property

19、面向对象编程

(1)类和实例

class Student(object):

    pass

class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
(2)访问限制
(3)继承和多态
当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。
判断一个变量是否是某个类可以用isinstance()判断
(4)获取对象信息

!>>>type(123)==int

!>>> isinstance([1, 2, 3], (list, tuple))

True

>>> isinstance((1, 2, 3), (list, tuple))

True

总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”。

(5)实力属性和类属性

18、函数式编程
(1)高阶函数:把函数作为参数传入,这样的函数称为高阶函数(map/reduce,filter,sorted)
函数本身也可以赋值给变量,也就是变量可以指向函数。
传入函数:
def add(x, y, f):
    return f(x) + f(y)
 
print(add(-5, 6, abs))
 
17、列表生成式
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

>>> [x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

 
16、参数设置(在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。)
(1)默认参数
#####定义默认参数要牢记一点:默认参数必须指向不变对象!

def add_end(L=[]):

    L.append('END')

    return L

>>> add_end()

['END', 'END']

>>> add_end()

['END', 'END', 'END']

 

def add_end(L=None):

    if L is None:

        L = []

    L.append('END')

    return L

>>> add_end()

['END', 'END']

>>> add_end()

['END', 'END', 'END']

(2)可变参数

15、函数
(1)请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。(2)如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
(3)def my_abs(x):

    if not isinstance(x, (int, float)):

        raise TypeError('bad operand type')

    if x >= 0:

        return x

    else:

        return -x

14、可变不可变
>>> a = 'abc'

>>> b = a.replace('a', 'A')

>>> b

'Abc'

>>> a

'abc'

对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

13、set集合  相当于存贮字典的key值,没有重复的

12、字典

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

 
11、循环
Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来;第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。要特别注意,不要滥用breakcontinue语句。breakcontinue会造成代码执行逻辑分叉过多,容易出错。
 
10、if
if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elifelse
 
9、list、tuple、str

8、编码

# -*- coding: utf-8 -*-

或者
#coding=utf-8

7、格式化

(1)%d:整数   %f:浮点数   %s:字符串

(2)另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多:

>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)

'Hello, 小明, 成绩提升了 17.1%'

6、变量

5、静态语言和动态语言。这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):

int a = 123; // a是整数类型变量

a = "ABC"; // 错误:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活,就是这个原因。

 
4、转义:

>>> print('\ \')

>>> print(r'\ \')

\ \

 
3、浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10

9

和12.3x10

8

是完全相等的
 
2、缩进有利有弊。好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab。按照约定俗成的管理,应该始终坚持使用4个空格的缩进。
 
1、任何一种编程语言都有自己的一套语法,编译器或者解释器就是负责把符合语法的程序代码转换成CPU能够执行的机器码,然后执行。

 

 

 

 


 

 

 

 

 

 

 

 


 







 

 


 

原文地址:https://www.cnblogs.com/jszd/p/11166738.html