第一部分
包與模塊
包與模塊沒有什么明確的規(guī)定,好像就是包包括著模塊...
模塊:一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的后綴撑刺。
在一個項目的根文件夾下,創(chuàng)建的所有的文件夾叫做包述呐,文件夾下的程序就叫做模塊寺惫,模塊也可以是程序中的一部分疹吃。
包就是文件夾,或者文件夾里面的文件夾(ps:概念不太重要西雀,會用才是關(guān)鍵)
引用格式:
第一種:
from 根目錄開始的路徑 import 文件名或者類名(用的時候可以直接文件名.變量)
第二種
import 根目錄開始的路徑.文件名(用的時候必須所有路徑.文件名.變量名)
后面可以加as萨驶,import 路徑.文件名 as t(用的時候可以用t來代替一長串東西)
第二部分
== , is的區(qū)別
== 是判斷兩個值是否相等艇肴。is 是判斷兩個變量是否只想同一個內(nèi)存地址
a ?= 10
b = 10?
a == b ==> ?True
a is b ==> True
在數(shù)值小于256的情況下腔呜,相等的值內(nèi)存會為變量只建一個內(nèi)存存儲,所以a is b為True再悼。如果大于256核畴,就位False
a? = 1000
b = 1000
a == b ==> ?True
a is b ==> False
字符串,元祖等不可變的對象內(nèi)存也只會創(chuàng)建一個冲九。
a = "leilei"
b = "leilei"
a == b ==> True
a is b ==> True
深拷貝谤草,淺拷貝
copy,deepcopy
在使用這兩個方法得時候都要引入copy模塊 ?import copy
淺拷貝--只拷貝第一層關(guān)系娘侍,深拷貝是用遞歸的方法每層都拷貝
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
生成器
生成器的目的就是防止一下產(chǎn)生大量的值占用內(nèi)存憾筏,生成器就是用next()一次一個的吧值弄出來
#第一種生成器
# a = (i for i in [1,2,3,4,5,6,7,8,9,0])
# print(next(a))
# print(next(a))
#第二種函數(shù)生成器
# 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嚎杨,只不過不完全結(jié)束程序,運行到y(tǒng)ield就停止氧腰,下次調(diào)用時在從yield的位置開始繼續(xù)枫浙,下次就有停止到這里,再繼續(xù)古拴。箩帚。。黄痪。紧帕。。yield會讓函數(shù)變成生成器
# # 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()發(fā)送的信息,比傳參的方法更方便操作點
迭代器
迭代是訪問集合元素的一種方式是嗜。迭代器是一個可以記住遍歷的位置的對象愈案。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結(jié)束鹅搪。迭代器只能往前不會后退
迭代是重復反饋過程的活動站绪,其目的通常是為了逼近所需目標或結(jié)果。每一次對過程的重復稱為一次“迭代”丽柿,而每一次迭代得到的結(jié)果會作為下一次迭代的初始值
·凡是可作用于for循環(huán)的對象都是Iterable類型恢准;
·凡是可作用于next()函數(shù)的對象都是Iterator類型
·集合數(shù)據(jù)類型如list、dict甫题、str等是Iterable但不是Iterator馁筐,不過可以通過iter()函數(shù)獲得一個Iterator對象。
·目的是在使用集合的時候幔睬,減少占用的內(nèi)容眯漩。
導入相關(guān)的模塊
# from collections import Iterable,Iterator
list,str麻顶,set赦抖,dict,tuple都是可迭代對象辅肾,但不一定是迭代器
# list = [1,2,3,4,4,5,6,76,78,8,89]
iter()方法队萤,可以讓可迭代對象轉(zhuǎn)化為迭代器
# l = iter(list)
isinstance。矫钓。判斷是否為后面的類型的方法
Iterable--可迭代的對象
# print(isinstance(list,Iterable))
Iterator--迭代器
# print(isinstance(l,Iterator))