python学习总结

python学习总结

Python是面向对象的、解释型的、通用的、开源的脚本编程语言
1、Python标识符:Python中的标识符是分大小写的,以下划线开头的是有特殊意义的。以单下划线开头的_foo代表不能直接访问类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 foo 代表 Python 里特殊方法专用的标识,如 init() 代表类的构造函数,对象方法。
init() 函数一方面可以接收要保存在对象中的数据,另一方面也可以在实例化类的时候做一些初始化工作。

2、Python 可以同一行显示多条语句,方法是用分号 ; 分开,所有的python的关键字只包含小写字母。
3、python语句中一般以新行作为语句的结束符,可以用 \ 来将一行分为多行显示
4、python变量:
变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
python变量赋值不需要声明类型,但是每个变量在使用前都必须赋值,变量赋值以后该变量才能被创建
5、python3六个标准数据类型:
不可变数据:Numbers(数字)、String(字符串)、Tuple(元组)
可变数据:List(列表)、Dictionary(字典)、Set(集合)
type():查询数据类型
python支持4种不同的数字类型:
int(有符号类型)、long(长整型 八进制或者十六进制)、float(浮点型)、complex(复数)
6、Python序列 sequence
sequence是一组有顺序的元素的集合,即对象的集合,一个sequence可以包含多个对象,也可以没有任何对象,基本的数据类型都可作为序列的元素,元素也可以是另一个序列
序列有两种:
tuple(元组、定值表):s1 = (1,1.2,’测试‘)s1是一个元组
list(表):s1 = [True,5,’smile‘] s1是一个表
tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更。
一个序列作为另一个序列的元素

s3 = [1,[3,4,5]]
空序列

s4 = []
7、Python字典

dic = {‘tom’:11, ‘sam’:57,‘lily’:100}
与表不同的是,词典的元素没有顺序。你不能通过下标引用元素。词典是通过键来引用。
在词典中增添一个新元素的方法:

dic[‘lilei’] = 99
字典常用的方法

print dic.keys()           # 返回dic所有的键
print dic.values()         # 返回dic所有的值
print dic.items()          # 返回dic所有的元素(键值对)
dic.clear()                # 清空dic,dict变为{} 
另外有一个很常用的用法:

del dic[‘tom’]             # 删除 dic 的‘tom’元素
del是Python中保留的关键字,用于删除对象。 
与表类似,你可以用len()查询词典中的元素总数。

print(len(dic))
8、Python函数
函数最重要的目的是方便我们重复使用相同的一段程序。
将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。
函数的返回值可以有多个,以逗号隔开,相当于返回一个tuple(定值表)
对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递)
但是对于表来说,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传
递)
9、Python面向对象
方法的第一个参数必须是self,无论是否用到,都要存在,这个参数表示某个对象,对象拥有类的所有属性,可以通过self调用类的属性
继承:class Chicken(Bird): 当括号中为Object时,则说明该类没有父类
init()是一个特殊方法(special method)。相当于c++类的构造函数。Python有一些特殊方法。Python会特殊的对待它们。特殊方法的特点是名字前后有两个下划线。
如果你在类中定义了__init__()这个方法,创建对象时,Python会自动调用这个方法。这个过程也叫初始化。
dir():用来查询类或者对象的所有属性 dir(list)
help():用来查询说明文档

10、Python循环
continue:在某一次循环执行中,如果遇到continue,那么跳过这次执行,进行下一步操作
break:停止执行整个循环

11、Python中()、[]、{}的区别:
():代表tuple元祖数据类型,是一种不可变序列
[]:代表list列表数据类型,列表是一种可变序列
{}:代表dict字典数据类型,字典是Python中唯一内建的映射类型,字典中的值没有特殊的顺序,但都是存储在一个特定的键(key)下。键可以是数字、字符串甚至是元祖。

12、Python参数传递方式:关键字传递、表传递、字典传递
值传递:对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。
指针传递:但是对于表来说,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。
任意参数列表:在定义函数时,在参数列表中使用**参数名,可以接收一切关键字参数,使用*参数名,就可以接收任意数量的非关键字参数,也就是可变参数

13、类属性、类方法、静态方法、私有属性和私有方法、特殊方法
类属性:可以直接通过类名来访问类属性;
类方法:类方法的定义需要借助装饰器 @classmethod,类方法的第一个参数通常命名为cls,表示这个类本身。类方法中可以使用该类的类属性,但不能使用该类的对象属性。因为类方法隶属于类,而对象属性隶属于对象,使用类方法时可能还没有对象被创建出来。
静态方法:与类方法类似,也是用类名直接访问,需要在前面加上装饰器@staticmethod,静态方法中没有cls参数
私有属性:以 __(两个下划线)开头的属性我们称为私有属性。顾名思义,它是类所私有的,不能在类外部使用。
该规则对类方法、对象属性、对象方法同样适用。只需在名称前加上 __(两个下划线)即可。
我们也可以使用 _(一个下划线)前缀来声明某属性或方法是私有的,但是这种形式只是一种使用者间的约定,并不在解释器层面作限制。若类外部要使用依旧可以用
特殊方法:类中以 __ 开头并以 __ 结尾的方法是特殊方法,特殊方法有特殊的用途。它们可以直接调用,也可以通过一些内置函数或操作符来间接调用,如之前学习过的 init()、next()。

14、函数式编程
在Python中所有的对象都可以赋值给变量,包括函数,例如:
def say_hello(name):
return name + ‘, hello!’
f = say_hello
这里被赋值的是函数本身,而不是函数的结果。赋值后,变量 f 与函数 say_hello 绑定,f 也就相当于是 say_hello 的别名,完全可以用调用 say_hello 的方式来调用 f。
类也可以赋值给变量,例如:
class Apple:
who_am_i = ‘apple’
banana = Apple
banana.who_am_i
‘apple’
注意,被赋值的是类本身,而不是类实例化后的对象。赋值后,变量 banana 与类 Apple 绑定,banana 也就相当于是 Apple 的别名,使用 banana 就相当于使用 Apple。
函数可以作为函数参数;一切对象都可以作为函数的参数,包括另一个函数,接受函数作为参数的函数,称为高阶函数
lambda表达式:在Python中可以通过lambda表达式来便捷的定义一个功能简单的函数,这个函数只有实现没有名字,所以也叫作匿名函数
lambda 参数1, 参数2, 参数N: 函数实现
使用上述表达式将定义一个匿名函数,这个匿名函数可接受若干参数,参数写在冒号前(:),多个参数时用逗号分隔,其实现写在冒号后(:),例如:
f = lambda x: x ** 2
这个 lambda 表达式定义了一个匿名函数,这个匿名函数接受一个参数 x,返回 x ** 2 的计算结果。同时赋值语句将这个匿名函数赋值给了变量 f。注意 f 保存的是函数,而不是函数结果。lambda表达式没有return关键字,匿名函数的执行结果会作为它的返回值,无需用return关键字。一般是在需要把函数作为参数时,才会去使用lmabda表达式,这样就无需在函数调用前去定义另一个函数了。

15、进程和线程
multiprocessing.Process(target=target_method):创建一个进程,target为需要进程指定执行的函数
threading.Thread(target=add) :创建一个线程,target为需要线程指定执行的函数
start():启动线程/进程
join():控制子线程/进程的执行顺序

16、python全局变量与global关键字
全局变量:作用域从定义处到代码结束
如果要对全局变量确定引用并且修改全局变量的值,需要加上global关键字,哪个函数需要修改在函数中加上即可

17、python文件操作
读文件:
with open() as f: //不必自己手动调用close文件,会自动帮我们调用close方法
print(f.read())
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便
for line in f.readlines():
print(line.strip()) # 把末尾的’\n’删掉

18、Python中函数参数:
*args:用来将参数打包成tuple给函数体使用
def function(x, y, *args):
function(1, 2, 3, 4, 5) // 把3,4,5打包成tuple
**kwargs:打包关键字参数成dict给函数体使用
def function(**kwargs):
print(kwargs)
function(a=1, b=2, c=3)
注意事项:def function(arg,*args,**kwargs) 三个参数的顺序是固定的,不然会报错

上一篇:2021-07-04


下一篇:dic 查看CPU运行指令