# 迭代器和生成器# 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的# 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir(数据) )# 可迭代的一定可以被for循环# 迭代器协议:含有__iter__.__next__的方法# 迭代器一定可迭代,可迭代的通过调用iter()方法就能得到一个迭代器# 迭代器的特点: # 很方便使用,且只能取所有的数据取一次 # 节省内存空间 # 生成器# 生成器的本质就是迭代器# 生成器的表…
一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print(issubclass(B,A)) # 判断子类和父类的关系 print(issubclass(A,B)) ''' #--------------------------------------------------------------------------------# # # 反射:是用…
一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teacher, course_name, period, price): self.teacher = teacher # 授课老师 self.name = course_name # 课程名字 self.period = period # 课程周期 self.price = price # 课程价格 def…
一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counter.OrderedDict和defaultdict等. 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要用来计数 4.OrderedDict: 有序字典 5.defaultdic…
一. 递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 最大递归深度默认是997 -- python从内存角度出发做得限制(而不是程序真的报错),最大深度可以修改 def func(n): print(n) func(n+1) func(1) 查看最大递归深度 ‘’‘ 改变最大递归深度,根据自身电脑配置,深度各不相同 ’‘’ import sys sys.setrecursionlimit(1000000) 修改最大递归深度 举个例子: 现在你们问我,alex老师多大了?我说我不…
def qqxing(l = []): # 可变数据类型 l.append(1) print(l)qqxing() # [1]qqxing([]) # [1]qqxing() # [1, 1]qqxing() # [1, 1, 1] # 如果默认参数的值是一个可变数据类型,那么每一次调用函数的时候,如果不传值,就公用这个数据类型的资源 def qqxing(l = {}): # 可变数据类型 l['k'] = 'v' print(l)qqxing() # {'k': 'v'}qqxing({})…
基础数据类型汇总 1. str 2. int 3. list 4. bool 5. dict (1) fromkeys Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对象中的元素分别作为字典中的键,且所有键对应同一个值,默认为None. 6. tuple 元组里面如果只有一个元素且不加逗号,则类型和该元素一样 7.set (1) 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重…
1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:python3的默认编码方式为utf-8(解决方式:在文件的首行输入:# -*- encoding:utf-8 -*-) print函数: Python3中print为一个函数,必须用括号括起来:Python2中print为class input(): Python3中用input,Python2中用ro…
'''数据类型:intbool... 数据结构:dict (python独有的)listtuple (pytho独有的)setstr''' # reverse() 反转l = [1,2,3,4,5]l.reverse()print(l) # reversed() 反转,但它的反转不改变原来的列表且返回一个反序的迭代器l = [1,2,3,4,5]l2 = reversed(l)print(l2) # <list_reverseiterator object at 0x000001DF4CC309…
# 作用域相关(2)locals() # 返回本地作用域中的所有名字 globals() # 返回全局作用域中的所有名字 # 迭代器/生成器相关(3)range()print('__next__' in dir(range(10))) # False --> 可迭代的,但不是迭代器print('__next__' in dir(iter(range(10)))) # True --> iter()转换之后,就成为迭代器了 # next(迭代器) # 迭代器.__next__() == next…
一. 接口类 java:面向对象编程 设计模式 -- 接口类 接口类:python原生不支持 抽象类:python 原生支持的 from abc import abstractclassmethod,ABCMeta class Payment(metaclass= ABCMeta): # 元类,默认元类:type @abstractclassmethod def pay(self, money): raise NotImplemented # 没有实现这个方法 # Payment 规范:接口类/…
一. 单继承 class A:pass # 父类,也叫基类,也叫超类 class B:pass # 父类,也叫基类,也叫超类 class AB_son(A,B):pass # 子类,也叫派生类 class B_son(B):pass # 子类,也叫派生类 一个类可以被多个类继承 一个类可以继承多个父类 -- python 独有的 print(AB_son.__bases__) # (<class '__main__.A'>, <class '__main__.B'>) print(…
一. 序列化模块 # 序列化 --> 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化# 反序列化 --> 从字符串转换成数据类型的过程叫做反序列化# 序列 -- 字符串 # 什么地方需要转换成字符串?# 数据存储:写文件等# 网络上传输的时候只能传bytes,故需要先转成字符串 # json -- 最重要:*****(5星级)# pickle -- ****# shelve -- *** # json # 好处:通用的序列化格式 # 弊端:只有很少的一部分数据类型能够通过json转…
一. 正则表达式 正则表达式本身和python没有什么关系,就是匹配字符串内容的一种规则. 官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 谈到正则,就只和字符串相关了. 字符组 : [字符组] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 字符分为很多类,比如数字.字母.标点等等. 假如你现在要求一个位置"只能出现一个数字",…
1. int: i.bit_length(): 把i这个数转换成二进制所需最少的位数 2. bool: (1) 1比True的效率更高 (2) 空字符串(什么都没有)为False:非空字符串为True (空格为非空字符串) 3. str的索引与切片 (1) 索引: 初始索引为0 (2) 切片: 切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则:顾头不顾尾) 倒着取时步长应为负 4. 字符串常用方法: (1) capitalize(): 首字母大写 (2) title()…
0. 默写a. 生成器函数获取移动平均值例子: def init(func): def inner(*args,**kwargs): ret = func(*args,**kwargs) ret.__next__() return ret return inner @init def average(): average = 0 count = 0 sum = 0 while 1: num = yield average sum += num count += 1 average = sum/c…
# def wrapper(f):# def inner(*args,**kwargs):# print('在被装饰的函数执行之前做的事')# res = f(*args,**kwargs)# print('在被装饰的函数执行之后做的事')# return res# return inner# @wrapper # holiday = wrapper(holiday) 这时holiday == inner# def holiday(day):# print('全体放假%s天'%day)# ret…
# 装饰器的形成的过程:最简单的装饰器:有返回值的:有一个参数的:万能参数# 装饰器的作用# 原则:开放封闭原则# 语法糖# 装饰器的固定模式:# def wrapper(f): # 装饰器函数,f是被装饰的函数# def inner(*args,**kwargs):# '''在被装饰函数之前要做的事'''# res = f(*args,**kwargs) # 被装饰的函数# '''在被装饰函数之后要做的事'''# return res# return inner import time# pr…
'''# len# 计算字符串的长度# s = '金老板小护士'# len(s)# 不能用 len 怎么办#low一点的方法# count = 0# for i in s:# count += 1# print(count) s1 = '班主任阿娇'# count = 0# for i in s1:# count += 1# print(count) #相当于把一段代码放到了一个地方# 函数 可以多次的调用函数def my_len(): # 定义函数(不执行,执行需要用到调用函数),my_len…
''''如何打开一个文件模特主妇护士老师.txt1. 文件路径:f:\模特主妇护士老师.txt2. 操作方式:只读:r ,rb ,只写: w, wb ,追加: a , ab,读写:r+ , r+b,写读 :w+ , w+b ......3. 编码方式 以什么编码方式储存的文件,就以什么编码打开进行操作 ''' 绝对路径: 从根目录开始f = open('f:\模特主妇护士老师.txt', mode = 'r', encoding = 'utf-8')content = f.read()print…
1. 数据类型划分: (1) 不可变数据类型(可哈希): 元组, bool, int(123 就是123,不会变成其他数), str, 字典的keys (2) 可变数据类型(不可哈希): 列表list, 字典dict, 集合set 2. 字典的key必须是不可变数据类型, 可哈希 字典的value, 任意数据类型 3. 字典的优点:二分查找去查询:存储大量的关系型数据 4. 字典的特点:python3.5以及之前的版本:无序 5. 增: (1) dic1['high'] = 173 没有键值对,…
1. 列表list: 列表转换成字符串: s = 'kidd' s1 = '_'.join(s) # 用_连接 字符串转换成列表: split() range(头,尾,步长): [0,1,2,3,4,5,6,...,100,...] 指定范围,生成指定数字 增: (1) append(): 增加到最后 (2) insert(): 按照索引去增加 (3) extend(): 迭代的去增加(分解到最小元素去增加) 删: (1) pop(): 按照位置去删除, 有返回值 (2) del: 按照位置去删…
1. 格式化输出: (1) %(占位符) s(str字符串) d(digit数字) (2) 想单纯输入%,需要输入两个%(%和占位符冲突),前面的%相当于转义. 2. while else循环: (1) 当while循环被break打断后,else的内容不执行 (2) 当while循环没有被break打断,则执行else的内容 3. 逻辑运算: and or not (1) 优先级: () > not > and > or ps: 数字转换成布尔值: int --> bool. 只…
一. configparser模块 生成文档 import configparser config = configparser.ConfigParser() config[', 'Compression': 'yes', ', 'ForwardX11':'yes' } config['bitbucket.org'] = {'User':'hg'} config[','ForwardX11':'no'} with open('example.ini', 'w') as configfile: c…
# l = [1,2,3]# 索引# 循环 for # list # dic # str # set # tuple # f = open() # range() # enumerate'''print(dir([])) # 告诉我列表的所有方法print(dir({})) # 告诉我字典的所有方法print(dir('')) # 告诉我字符串的所有方法# 求以上三个方法的交集ret = set(dir([]))&set(dir({}))&set(dir(''))print(ret)# 双…
一. 面向对象进阶与实例 dic = {'k': 'v' } 对象:存储 属性 和 调用方法 dic['k'] = 'v' class Foo: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def __getitem__(self, item): if hasattr(self, item): return self.__dict__[item] def __setitem_…
一. 封装 class Room: def __init__(self, name, length, width): self.__name = name self.__length = length self.__width = width def get_name(self): return self.__name def set_name(self, newName): if type(newName) is str and newName.isdigit() == False: self…
一. 面向对象的引入# 人狗大战 def person(name,HP,aggr,sex): person = { 'name':name, # 昵称 'HP':HP, # 生命值 'aggr':aggr, # 攻击力 'sex':sex } return person alex = person('狗剩儿',100,2,'不详') nezha = person('哪吒',200,1,'不详') # 代码精简了,方便增加人物,方便修改,人物更加规范 ------ 人的模板 print(alex)…
一. 包 # 把解决一类问题的模块放在同一个文件夹里 -- 包 # 创建目录代码# import os# os.makedirs('glance/api')# os.makedirs('glance/cmd')# os.makedirs('glance/db')# l = []# l.append(open('glance/__init__.py','w'))# l.append(open('glance/api/__init__.py','w'))# l.append(open('glance…
1. 判断下列逻辑语句的True,False.(1) 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6True(2) not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6False 2. 求出下列逻辑语句的值.(1) 8 or 3 and 46 or 2 and 0 or 9 and 78(2) 0 or 2 and…