哪个网站做头像比较好/网络营销服务的特点
打开文件
with open('/path/to/file', 'r',encoding='utf-8') as f:texts = f.readlines()
f.close();
注意:自己写的Python文件不要与Python包重名
模块
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
1.当前目录
2.如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
3.如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
4.模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
模块导入顺序如下:标准库进口,相关的第三方库,本地库。各组的导入之间要有空行。
导入某个模块的函数,语法如下:from modname import name1[, name2[, … nameN]]
Python基础
- 数据类型和变量
整数、浮点数、字符串(‘’ 、“” 、\ 、r’‘表示’'内部的字符串默认不转义)、布尔值、None、变量、list(有序集合,append()、insert()、pop(i)方法,可修改)、tuple(安全) - 字符串和编码
最早只有127个字符被编码到计算机里,ASCII.但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码.Unicode把所有语言都统一到一套编码里.把Unicode编码转化为“可变长编码”的UTF-8编码,常用的英文字母被编码成1个字节,汉字通常是3个字节
Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符.
Python对bytes类型的数据用带b前缀的单引号或双引号表示.以Unicode表示的str通过encode()方法可以编码为指定的bytes.
把bytes变为str,就需要用decode()方法
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数 - 条件循环
判断: if elif else
input()返回的数据类型是str - 循环 for in :
- dict、set
键-值(key-value)存储,具有极快的查找速度。如果key不存在,dict就会报错:一是通过in判断key是否存在 二、get()方法,如果key不存在,可以返回None、作为key的对象就不能变。list是可变的,就不能作为key。
set 是一组key的集合,无序和无重复元素,但不存储value。由于key不能重复,所以,在set中,没有重复的key。add(key)方法可以添加元素到set中.remove(key)方法可以删除元素
函数
1.调用函数:函数名称+参数
参数错误报typeError错误
数据类型转换
可把函数名赋给另一变量
2.定义函数:
使用def,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
3.函数的参数
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
默认参数 *
允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
n=2
def power(x, n=2):
s = 1
while n > 0:n = n - 1s = s * x
return s
设置默认参数时,注意:
一是必选参数在前,默认参数在后
二是设置默认参数,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
三是Python函数在定义的时候,默认参数L的值就被计算出来了,指向对象,每次调用改函数,如果改变了L内容,下次调动默认参数内容改变,所以默认参数必须指向不变对象
可变参数
在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去
关键字参数 *kw
允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
命名关键字参数 ,
限制关键字参数的名字,命名关键字参数需要一个特殊分隔符,后面的参数被视为命名关键字参数。例如,只接收city和job作为关键字参数
注意:如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符
4.递归函数
def fact(n):if n==1:return 1return n * fact(n - 1)
解决递归调用栈溢出的方法是通过尾递归优化,
try:product()print('测试失败!')
except TypeError:print('测试成功!')
高级特性
1.切片
L[-2:]
…字符串也可切片
切片实现trim函数:
2.迭代 for …in
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
字符串也可迭代
用enumerate循环list
同时引用两个变量
3.列表生成式:
两层循环:
items()可迭代key value
注意for后可加if筛选,但不能带else
[x for x in range(1, 11) if x % 2 == 0]
isinstance 返回true/flase
isinstance(x, str)
4.生成器generateor
一边循环一边计算
创建generator
1.把一个列表生成式的[]改成()
使用next()获取生成器下一个返回值(不常用)
使用for循环获取元素
例子 著名的斐波拉契数列(除第一个和第二个数外,任意一个数都可由前两个数相加得到)
yield 关键字
遇到yeild语句返回
例子:上述例题print(b) 改成yeild即可,该函数变成生成器,遇到yield语句返回,再次执行时从上次返回的yeild语句继续执行
5.迭代器;
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列
可迭代对象Iterable:集合数据类型(list,tuple,dict,set,str)+generator
使用isinstance()判断一个对象是否是Iterable对象。
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误.可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的.
函数式编程
1.高阶函数
-
map/reduce
把list所有数字转为字符串:
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
-
filter
过滤序列
例子:删掉偶数,保留奇数
-
sorted
排序,还可以接收一个key函数来实现自定义的排序
按绝对值大小排序
2.返回函数
函数作为结果只返回
例子:求和函数,不需要马上求和,还需要再计算
调用函数返回函数F
调用函数f时,才真正计算求和的结果
返回的函数在其定义内部引用了局部变量,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用
3.匿名函数
lambda标识匿名函数,只有一个表达式,不用return。不用担心名字冲突,也是一个函数对象,也可以作为返回值返回
例子,返回元素平方
4.装饰器
在代码运行期间动态增加功能,是一个返回函数的高阶函数
2.偏函数
面向对象编程
1.类和实例
class关键字,创建实例是通过类名+()实现
__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
构造函数
传入参数
2.访问限制
在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问;在Python中,变量名类似__xxx__的,是特殊变量,可以直接访问的
内部的__name变量已经被Python解释器自动改成了_类名__name
3.继承与多态
4.获取对象信息
- 使用type()函数,判断对象类型,常常比较两个变量的type类型是否相同
判断对象是否为函数:type(函数名)==types.FunctionType
type(abs)==types.BuiltinFunctionType
True - 使用isinstance()判断对象是某种class的类型
- 使用dir(),获得一个对象的所有属性和方法
- getattr()、setattr()\、hasattr()测试对象属性
5.实例属性和类属性
通过实例变量,或者通过self变量给实例绑定属性
错误、调试 、测试
try:print('try...')r = 10 / 0print('result:', r)
except ZeroDivisionError as e:print('except:', e)
finally:print('finally...')
print('END')
try…except捕获错误还有一个巨大的好处,就是可以跨越多层调用,比如函数main()调用bar(),bar()调用foo(),结果foo()出错了,这时,只要main()捕获到了,就可以处理。
使用except注意:所有的错误类型都继承自BaseException,多个except捕捉是否存在子类关系
调用栈
错误未被捕获,将向上抛,最后被python解释权捕获,打印错误信息
记录错误
import logging
logging.exception(e)
打印后继续执行,正常退出
抛出错误raise
执行后可跟踪
常用错误处理方式:
print()
assert 表达式
logging.info()
shell操作:
命令行
敲下python进入交互模式
exit() 或者ctrl+z加回车退出
help()帮助
安装库
pip install 库名
或者先离线下载whl 文件 https://www.lfd.uci.edu/~gohlke/pythonlibs/
然后cmd到文件目录下执行 pip install **.whl
备注:引包的名字不一定与下载的名字相同