一、list中的每个元素都进行小操作
list = list(map(小操作,list名字))
newList = list(map(int, newList))
二、字符串组成的List连接成一个字符串
" ".join(listName)
三、头疼的编码问题
python2默认编码是ASCII,不能识别中文字符,即为python2把整个python文件当作ASCII进行处理,遇到中文字符就不认识了便出错,需要在文件开头加上编码。python2中字符串有str和unicode两种类型,str是有各种编码的区别,而unicode没有编码的区别。Python2的对于字符编码的转换要以unicode作为“中间人”进行转化,unicode是python解释器在内存中编码方式。有时候就算写了编码方式,但是一旦文中出现了非ASCii和unicode对象进行操作就会出现错误。python2.x中即使指定了文件使用utf8编码格式,但是在遍历字符串的时候,仍然会以字节为单位遍历字符串,需要在定义字符串之前加上一个小写字母u。
Python 3的源码.py文件 的默认编码方式为UTF-8,所以在Python3中你可以不用在py脚本中写coding声明,并且系统传递给python的字符不再受系统默认编码的影响,统一为unicode编码;将字符串和字节序列做了区别,字符串str是字符串标准形式与2.x中unicode类似,bytes类似2.x中的str有各种编码区别。bytes通过解码转化成str,str通过编码转化成bytes。
四、python教程
1.python程序运行方式:解释器后面跟脚本名称(解释器官方默认为cpython)/交互式(直接输入解释器)/IDE
pyc文件,c指compiled,pyc文件是由python解释器将模块的源码转换为字节码,python这样保存字节码是作为一种启动速度的优化,import导入的模块解释器会编译成二进制文件。
2.python文件命名规则:建议只使用小写字母数字下划线,文件名不能以数字开头(因为文件名会被当做模块引入,每一个以py结尾的python源文件都是一个模块),变量命名规则为单词小写多个单词用下划线分隔。
3.python中如果不希望立刻编写分支内部的代码,可以使用pass关键字,表示一个占位符能够保证程序的代码结构正确。
4.循环中一定要有计数变量的修改!continue尤其注意!
5.print会自动加换行,不加换行可以用print(, end="")
end指示的字符串可以自动加在末尾,print("")可以直接加换行。
6.pycharm使用技巧:pycharm中对某个函数使用Ctrl+Q非常好用,查询函数是干啥的;F7进入自己编写的函数内部;选中函数名,在函数旁边有个小灯泡,insert documentation string,添加参数注释,还有一个如果添加了新的变量可以使用add parameters to docstring;python中如果return的东西太多了,就在return后面套一个括号,然后再括号内部的某一任选位置点击回车,就可以换行,增强可读性。
7.非数字型变量的特点:都是一个序列,理解为容器;取值[];遍历for in;计算长度最大值最小值比较删除;链接和重复;切片。
list:del关键字本质上是用来将一个变量从内存中删除的,日常使用中还是使用列表自带的方法,append方法和extend方法区别,同时传入一个list时候,extend方法会把两个list拼接,而append会把List当作一个元素加入原始List中。列表使用+=实际上会改变原有数据,因为调用的是extend函数,而其他类型的+=不会改变。
tuple:元组的使用场景:函数的参数和返回值,一个函数可以接收任意多个参数或者一次返回多个数据
;格式化字符串,格式化字符串后面的()本质上是一个元组,这样%后面可以直接接一个元组,而且格式化字符串可以赋值给另一个变量;让列表不可以被修改,保护数据安全。
list = list(tuple) tuple = tuple(list)
dict:字典通常用于存储描述一个物体的相关信息,其中的key只能使用字符串/数字/元组,字典是一个无序集合,使用print输出时,顺序和定义时不同的。合并字典用dict.update(new_dict),含有同样的key会覆盖之前的。
sorted(dict.iteritems(), key=operator.itemgetter(1), reverse=True)
str:字符串只有当字符串中由双引号的时候采用单引号;str当作函数参数时候调用方法并不会被修改。
字符串中的index和find方法区别:index如果发现寻找的字符串不存在的时候就会报错;find不会,会返回-1;replce方法不会修改原有字符串会返回一个新字符串;字符串逆序[-1::-1]
非数字类型的公共方法:len函数等;运算符;for;切片
8.新建名片项目
9.函数参数的故事:
不可变类型有数字/字符串/元组;可变类型有字典/列表。字典的key是不可变类型,因为首先要对key进行hash操作,使得访问数据便利。
函数的返回值传递的是引用,如果想要返回多个值,需要使用元组,return后面接元组,可以不加括号,接收的时候,元组有几个变量可以用几个参数接收。
函数参数传递的都是引用,在函数内部的所有赋值操作都不会影响实参的变化;
可变类型的参数,在函数内部调用对象的方法会改变实参;
缺省参数要放在不缺省参数后面,调用某个缺省参数的话,要写xx=xx;
多值参数有*args, **kwargs,可以接收任意多个参数,如果对元组进行拆包的话,在元组前面使用*tuple,对字典进行拆包的话,在字典前面使用**dict。*args传进去是正常一个一个变量,如果传进去一个元组需要解包。
10.局部变量和全局变量:
局部变量就是在函数内部定义;全局变量在函数外部定义,所有函数都可以使用。文件编写规则有:shebang/import/全局变量/函数定义/执行代码。
全局变量的命名规则有g_/gl_。
11.属性:
类:一切皆对象,程序执行时, 类会被加载到内存中,类其实也是一个对象,叫做类对象;类实例化的对象叫做实例对象,类对象只有一个,实例对象可以有多个,实例方法存在类对象中,每次实例对象要调用方法,将实例对象的引用传递给self,self作为方法的参数进行接收,从而访问特定对象的特定属性。
属性的获取机制,首先在对象内部属性中查找,如果没有向上查找类属性,但是如果使用对象名.类属性=xx,则不会向上查找到类属性修改,会增加一个对象属性。
类属性:获取的方式有在实例方法中,类名.属性名/对象名.属性名(不推荐), 在类方法中可以直接用参数cls.类属性访问呢,其实类名=cls=类对象的引用。
类方法:@classmothod (cls)
静态方法:不访问实例属性/类属性:@staticmethod ->类方法和静态方法都是这样调用:类名.方法名调用
实例方法可以访问实例属性和类属性;类方法内部只需要访问类属性;静态方法不需要访问实例属性和类属性。
私有属性:__属性名
私有方法:__私有方法名
子类也不能访问它爸爸的私有。
12.类的内置方法:
__mro__可以查看方法的搜索顺序,method resolution order主要用在多继承时判断方法属性的调用路径
__init__:对于类名()这个过程来说有两步,第一步是在内存中将类实例化,然后调用__init__函数,对属性进行初始化,如果某些属性一开始不知道如何赋值,那么我们可以使用None来表示,None判断的时候使用身份运算符is,is not,这两个是用来判断两个的内存地址是否一样,而==是判断值是否相等。
dir(对象名)来获取对象的方法。
__str__:定制输出的格式
__new__:由object类提供的内置的静态方法,为对象分配空间,返回对象引用,python解释器获得引用后,将引用作为第一个参数,传递给__init__方法即self参数。
13.面向对象的特性:
封装:把方法属性都封装到类内部
继承:继承父类,实现代码的重用。如果使用父类的方法,super().父类方法名来调用父类方法,super是一个特殊的类,super()就是super创建出来的类或者父类名.方法名(self)
多态:不同的子类对象调用父类方法获得不同的效果。
14.单例设计模式:
类创建的对象,在系统中只有唯一的一个对象,每次调用类名()都返回的是同一个对象。
定义类属性;重写__new__方法,如果类属性is none,则调用父类的方法分配内存空间,否则的话就只是返回第一个创建的对象的引用。
同时初始化方法也只能被调用一次,但是我们没有办法限制__init__方法的调用,那么就使用一个标记,如果标记为真,就不执行,标记为假执行一次,然后设置标记。’
15.异常
如果对某段代码不能确定是否能正确执行,则需要捕获异常。
异常的传递:当函数方法出现异常,会将异常传递给函数/方法的调用一方,当传递给主程序,仍美哟异常处理,程序才会被中止。利用异常的传递性,在主程序中捕获异常。
16.模块
模块可以为外界提供全局变量/函数/类,直接执行的代码不是向外界提供的工具,在import文件的时候,文件中没有任何缩进的代码都会被执行一遍,__name__属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行!__name__时python的一个内置属性,记录一个字符串。直接执行模块输出的__name__是__main__,而导入其他文件中,调用这个模块的时候输出的是模块的名字。
import 模块名 as 模块别名(大驼峰命名法)
如果希望从某一个模块中,导入一部分工具
from 模块名 import 工具名,需要使用模块名.的方式访问,可以直接访问。两个工具名字一样,后面会覆盖前面的,使用别名的方法,可以使用同样的工具。
from .. import *,导入所有的工具,直接使用。
模块的搜索顺序:
python的解释器在导入模块的时候,会首先搜索当前目录指定的模块名的文件,如果有就直接导入,如果没有,就搜索系统目录,在开发时给文件起名字,不要和系统的模块文件重名。每一个模块都有一个内置属性__file__表示模块的完整路径。
17.文件开发格式
18.包
包是一个包含多个模块的特殊目录,里面有一个特殊的文件__init__.py,里面指定对外界提供的模块列表,从当前目录导入模块列表。
包的好处,使用import包名可以一次性导入包中所有的模块。
制作发布压缩包的步骤:创建setup.py/创建模块/生成发布压缩包。
19.eval函数能够将字符串当作有效的表达式来求值并返回计算结果,不能将用户的输入直接放入eval,会任意操作系统。