第一部分
包与模块
包与模块没有什么明确的规定,好像就是包包括着模块...
模块:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
在一个项目的根文件夹下,创建的所有的文件夹叫做包,文件夹下的程序就叫做模块,模块也可以是程序中的一部分。
包就是文件夹,或者文件夹里面的文件夹(ps:概念不太重要,会用才是关键)
引用格式:
第一种:
from 根目录开始的路径 import 文件名或者类名(用的时候可以直接文件名.变量)
第二种
import 根目录开始的路径.文件名(用的时候必须所有路径.文件名.变量名)
后面可以加as,import 路径.文件名 as t(用的时候可以用t来代替一长串东西)
第二部分
== , is的区别
== 是判断两个值是否相等。is 是判断两个变量是否只想同一个内存地址
a = 10
b = 10
a == b ==> True
a is b ==> True
在数值小于256的情况下,相等的值内存会为变量只建一个内存存储,所以a is b为True。如果大于256,就位False
a = 1000
b = 1000
a == b ==> True
a is b ==> False
字符串,元祖等不可变的对象内存也只会创建一个。
a = "leilei"
b = "leilei"
a == b ==> True
a is b ==> True
深拷贝,浅拷贝
copy,deepcopy
在使用这两个方法得时候都要引入copy模块 import copy
浅拷贝--只拷贝第一层关系,深拷贝是用递归的方法每层都拷贝
a = [1,2,[11,22]]
(==>后代表a的值)
b = copy.copy(a) ==> [1,2,[11,22]]
c = copy.deepcopy(a) ==> [1,2,[11,22]]
b.append(3) ==> [1,2,[11,22]]
c.append(3) ==> [1,2,[11,22]]
b[2].append(3) ==> [1,2,[11,22,3]] a会改变
c[2].append(3) ==>[1,2,[11,22]] a不会改变
property方法
直接说使用方法吧,用代码来表达
calss User(object):
def __init__(self):
self.__name = "lily"
@property # setname方法
def name(str):
self.__name = str
@name.setter # getname方法
def name:
return self.__name
u = User
u.name = "qisi" # 修改name为qisi 把方法想属性一样便于修改,隐藏复杂的方法
print(u.name) # 直接输出u.name
生成器
生成器的目的就是防止一下产生大量的值占用内存,生成器就是用next()一次一个的吧值弄出来
#第一种生成器
# a = (i for i in [1,2,3,4,5,6,7,8,9,0])
# print(next(a))
# print(next(a))
#第二种函数生成器
# def dem():
# n = 0
# m = 0
# while n < 10:
# yield m
# n += 1
# m += 3
#
# res = dem()
# print(next(res))
# print(next(res))
# print(next(res))
yield方法就是大概相当于return,只不过不完全结束程序,运行到yield就停止,下次调用时在从yield的位置开始继续,下次就有停止到这里,再继续。。。。。。yield会让函数变成生成器
# # yield方法与send的使用
# def gen():
# i = 0
# n = 0
# while i < 10:
# r = yield n
# print(r)
# # print(n)
# i += 1
# n += 3
#
# # for i in gen():
# # print(i)
#
# res = gen()
# next(res)
# res.send("sdf")
yield可以接受send()发送的信息,比传参的方法更方便操作点
迭代器
迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值
·凡是可作用于for循环的对象都是Iterable类型;
·凡是可作用于next()函数的对象都是Iterator类型
·集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
·目的是在使用集合的时候,减少占用的内容。
导入相关的模块
# from collections import Iterable,Iterator
list,str,set,dict,tuple都是可迭代对象,但不一定是迭代器
# list = [1,2,3,4,4,5,6,76,78,8,89]
iter()方法,可以让可迭代对象转化为迭代器
# l = iter(list)
isinstance。。判断是否为后面的类型的方法
Iterable--可迭代的对象
# print(isinstance(list,Iterable))
Iterator--迭代器
# print(isinstance(l,Iterator))