Python知识总结
列表、函数、标准模块内建函数
1. 列表快速生成方式
列表中如果存储大量的数据,会导致内存急剧消耗的问题,当数据小的时候用推导式,大的时候用生成器
1.1 推导式
按照一定的规则进行推导产生对应的数据,列表推导式直接产生包含所有数据的列表
1.最基本的列表推导式
a = [x for x in range(0,100)]
备注:生成一个列表,存储0~100内的数据
2.附带条件的列表推导式
a = [x for x in range(0,100) if x % 2 ==0]
生成一个列表,存储100内的偶数
3.附带运算的列表推导式
a = [x**2 for x in range(0,10)]
生成一个列表,存放数据为10以内数据的平方
4.附带多项 数据的列表推导式
a = [x + y for x in range(0,5) for y in range(0,2)]
[0, 1, 2, 3, 4, 1, 2, 3, 4, 5]
总结:
语法:变量 = [推导表达式]
优点:语法简单,可以通过包含逻辑条件生成一个符合条件的列表
缺点:逻辑过于简单,不能生成条件更加复杂的更加准确的列表
1.2 生成器
Python中提供的一种可以将程序算法表达式包含起来的一个用于产生列表数据对象
a_generator = (x for x in range(0,100))
列表生成器:产生一个生成器对象,包含算法
1.使用生成器中的数据
(1)通过系统内建函数next()获取生策划更年期中下一个数据
print(next(a_generator))
(2)通过类型的next()魔法方法,直接获取下一个数据
print(a_generator.next())
1.3 循环遍历与迭代器
程序中任何可以通过next()操作的对象,或者可以通过for循环遍历的对象。
都是迭代对象,迭代对象中有一个迭代标识,迭代标识可以通过迭代对象的iter()****函数获得。
导入模块:for collections import Iterable,Iterator
迭代对象:collections.Iterable 迭代对象
迭代标识:collections.Iterator 迭代标识
class Person:
def __init__(self,favorite):
self.favorite = favorite
def __iter__(self):
return iter(self.favorite)
p = Person(['1','2','3'])
for x in p:
print(x)
输出:
1
2
3
备注:必须重写iter()
2. 函数
Python中的函数,本身也是一个对象,常规定义语法的函数,就是将一个函数对象的引用地址赋值给函数名称的变量,通过函数名称的变量调用执行函数
2.1 函数的引用赋值
def show():
print("你好。。。")
#经函数的地址赋值给一个变量
a = show
#通过变量调用函数
a()
函数也是一个对象,有自己的内存地址
2.2 函数的传值操作
函数的传值操作:设计模式,策略模式
def show(message):
message()
def hanshu1():
print("你好。。。")
def hanshu2():
print("再见。。。")
show(hanshu1)
输出:你好。。。
传递给函数的参数也是一个函数,函数也可以当作一个参数传给另一个函数
2.3 函数装饰器
Python提供了装饰器函数,可以在不修改原有函数的情况下通过添加装饰器函数的注解,给函数进行功能扩展
#定义装饰器函数
def decorates(hanshu):
def info(*args,**kwargs):
print("开始执行。。。")
result = hanshu(*args,**kwargs)
print("结束执行。。。")
return result
return info
@decorates
def hanshu1():
print("你好...")
@decorates
def hanshu2():
print("再见。。。")
hanshu1()
hanshu2()
输出:
开始执行。。。
你好...
结束执行。。。
开始执行。。。
再见。。。
结束执行。。。
2.4 偏函数(不常用)
导入functools模块里面的partial可以使用偏函数。
使用偏函数,可以给需要传参的函数设定为任意传参的个数,不一定非要传递函数需要的参数个数
from functools import partial
def show(name,msg):
print(name,":",msg)
s = partial(show,msg="HI")
s("tom")
show("jerry","hello")
输出:
tom : HI
jerry : hello
2.5 函数闭包
因为函数的出现,导致变量出现了分化:全局变量、局部变量
def hanshu():
info = "变量"
print("这是一个函数")
def hanshu2():
print("这是第二个函数")
return info
return hanshu2
my = hanshu()
msg = my()
print(msg)
输出:
这是一个函数
这是第二个函数
变量
2.6 匿名函数
注意事项:主要是用来替代功能简单的函数,提高代码的简洁性。大量使用lambda表达式会造成代码的可读性严重下降
lambda表达式:通过一个表达式实现函数功能
基本语法:lambda 参数列表:表达式语句
表达式语句:计算表达式,计算结果会自动输出
等价于:
fn = lambda x,y: x + y
def hanshu(x,y):
print("输出:",x+y)
print(fn(1,2))
hanshu(3,4)
输出:
3
输出: 7
3. 标准模块与内建函数
3.1 系统标准模块
Python标准库中提供了大量的模块,辅助开发人员的软件开发工作
dir() 查看所有内建模块
['annotations', 'builtins', 'doc', 'loader', 'name', 'package', 'spec']
dir(builtins) #****核心内建模块
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', 'build_class', 'debug', 'doc', 'import', 'loader', 'name', 'package', 'spec', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']