2018-10-13day11文件操作

1??recode

1.匿名函數(shù)

函數(shù)名 = lambda 參數(shù)列表:返回值
函數(shù)體是一條語(yǔ)句,并且語(yǔ)句是有結(jié)果的
匿名函數(shù)也是函數(shù)

2.變量的作用域

全局變量:沒(méi)有聲明在函數(shù)或者類(lèi)中的變量。從聲明開(kāi)始在文件結(jié)束,任何位置都能使用。
局部變量:聲明在函數(shù)或者類(lèi)中的變量。從聲明開(kāi)始到函數(shù)或者是類(lèi)結(jié)束而結(jié)束。
global:在函數(shù)中聲明一個(gè)全局變量/想要在函數(shù)中修改一個(gè)全局變量到值
nonlocal:想要在局部的局部去修改一個(gè)局部變量到值

3.函數(shù)作為變量

聲明函數(shù)就是在聲明一個(gè)類(lèi)型是function的變量。普通變量能做的事,函數(shù)變量都能做。
函數(shù)名 --> 一個(gè)函數(shù)
函數(shù)名() --> 調(diào)用函數(shù),拿到的事函數(shù)的返回值
函數(shù)作為參數(shù) --> 閉包
函數(shù)作為返回 --> 裝飾器

4.調(diào)用過(guò)程

函數(shù)的調(diào)用過(guò)程是一個(gè)壓棧的過(guò)程
調(diào)用函數(shù)的時(shí)候系統(tǒng)會(huì)自動(dòng)在棧區(qū)間開(kāi)辟空間存儲(chǔ)數(shù)據(jù)(函數(shù)的參數(shù),函數(shù)中聲明的變量),調(diào)用結(jié)束后會(huì)自動(dòng)銷(xiāo)毀。

5.遞歸函數(shù)

自己調(diào)用自己的函數(shù)
循環(huán)能做的遞歸都可以做,但是能用循環(huán)的就不要用遞歸
三個(gè)步驟:
a.找臨界值,在這要讓函數(shù)結(jié)束
b.找出f(n)和f(n-1)的關(guān)系
c.使用f(n-1)去實(shí)現(xiàn)f(n)的功能

2??模塊的使用

python中一個(gè)py文件就是一個(gè)模塊。
可以通過(guò)import或者from-import在一個(gè)模塊中去使用另一個(gè)模塊的內(nèi)容
代碼執(zhí)行到import的時(shí)候,會(huì)將import后面的模塊的內(nèi)容執(zhí)行一遍

import 模塊名 ---> 將模塊中所有的內(nèi)容都導(dǎo)入,并且可以在當(dāng)前模塊中通過(guò)'模塊名.'的方式去使用模塊中的所有全局變量

from 模塊名 import 變量1,變量2,... ---> 模塊中所有的內(nèi)容都導(dǎo)入。但是只能使用import后面的變量
from 模塊名 import * ---> 將模塊中所有的內(nèi)容都導(dǎo)入,可以直接使用模塊中所有的全局變量

import test1
from test1 import text_a
print(text_a,test1.text_a)
print(test1.text_a)

2.重命名

import 模塊名 as 新的模塊名
from 模塊名 import 變量名 as 新的名字

import test1 as TS
print(TS.text_a)

3.import:

可以檢查被導(dǎo)入的內(nèi)容之前是否以及導(dǎo)入過(guò),如果已經(jīng)導(dǎo)入過(guò),不會(huì)再次導(dǎo)入
導(dǎo)入多次,但是只執(zhí)行一次。多種導(dǎo)入的效果可以同時(shí)生效

3??關(guān)于選擇性導(dǎo)入(阻止導(dǎo)入)

import test1

1.阻止導(dǎo)入的方法:

if __name__ == '__main__':
    代碼塊(不希望被別的模塊導(dǎo)入執(zhí)行的代碼寫(xiě)在這兒)

說(shuō)明:
代碼塊 ---> 直接執(zhí)行當(dāng)前模塊,代碼會(huì)被執(zhí)行。如果在別的模塊中導(dǎo)入,代碼不會(huì)執(zhí)行

2.每一個(gè)模塊都有一個(gè)name屬性,這個(gè)屬性的默認(rèn)值是當(dāng)前模塊對(duì)應(yīng)的py文件的文件名。
當(dāng)前模塊正在被執(zhí)行的時(shí)候,系統(tǒng)會(huì)自動(dòng)將模塊的name屬性變成'main'

3.什么時(shí)候使用模塊

將具有相同的功能的函數(shù)和數(shù)據(jù)封裝到一起

4??什么是迭代器

1.什么是迭代器(iter())

迭代器是python中一種容器類(lèi)的數(shù)據(jù)類(lèi)型。是屬于序列。沒(méi)有具體點(diǎn)字面量,可以將其他的序列轉(zhuǎn)換成迭代器:iter(序列)

2.迭代器的特點(diǎn)

他只能通過(guò)next方法去一個(gè)一個(gè)按順序的獲取迭代器中的元素,取出后迭代器中就不存在這個(gè)元素類(lèi)

iter1 = iter('asda12')

 print(next(iter1))

for x in iter1:
    print(x)

print(next(iter1)) # StopIteration 迭代器為空在用next()從迭代器中取值報(bào)的錯(cuò)

"""
next()
迭代器.__next__()

"""
iter2 = iter(('hjj', 2, 3))
print(iter2.__next__())

5??生成器和迭代器

1.什么是生成器

生成器就是迭代器,但是迭代器不一定是生成器
生成式就是一種生成器的一種特殊形式:(for 變量 in 序列)

產(chǎn)生一個(gè)生成器,生成器中可以生成的數(shù)據(jù)是數(shù)字0~9(每個(gè)元素是數(shù)字)
ge1 = (x for x in range(10))
print(ge1)

for x1 in ge1:
    print(x1)

ge2 = ([x2, x2*2] for x2 in 'abddsc')

for x2 in ge2:

    print(x2)
ge3 = (x for x in range(5) if x % 2)

2.生成器就是函數(shù)體中有yield關(guān)鍵字的函數(shù)

--->(函數(shù)中只要有yield,那么調(diào)用這個(gè)函數(shù)不再是執(zhí)行函數(shù)體并且獲取返回值,而是產(chǎn)生一個(gè)生成器)
通過(guò)next獲取生成器的元素的時(shí)候,回去執(zhí)行生成器對(duì)應(yīng)的函數(shù)的函數(shù)體,執(zhí)行到y(tǒng)ield,并且將yield后面的值最為返回值()
后,飯后保存當(dāng)前結(jié)束的位置,下一次獲取元素的時(shí)候會(huì)接著上次絕書(shū)的位置往后執(zhí)行
生成器可以當(dāng)成序列來(lái)使用

def func1(n1):
    print('213')
    for x2 in range(n1+1):
        print(x2)
        yield x2

ge4 = func1(10)
for x in range(10):
    print(next(ge4))


def func2():
    for x in range(101):
        yield x

ge5 = func2()
for x in range(10):
    print('--', next(ge5))

6??文件的讀和寫(xiě)

使用本地文件可以做數(shù)據(jù)的持久化(本地化) -->數(shù)據(jù)庫(kù)文件\txt、json、plist、二進(jìn)制文件

1.文件操作 -- 讀寫(xiě)操作

讀 -> 取出文件中的數(shù)據(jù)
寫(xiě) -> 將數(shù)據(jù)寫(xiě)到文件中
所有文件操作的過(guò)程:打開(kāi)文件 --> 操作文件 --> 關(guān)閉文件

2.打開(kāi)文件和關(guān)閉文件

open(file, mode='r', encoding=None)

a.file -> 文件路徑(必須傳參),決定需要打開(kāi)的是那個(gè)文件

絕地路徑:
相對(duì)路徑:./相對(duì)路徑(相對(duì)路徑是對(duì)當(dāng)前py文件對(duì)應(yīng)的文件夾)
./ -->當(dāng)前文件

b.mode -> 文件打開(kāi)方式(不同的操作對(duì)應(yīng)不同的打開(kāi)方式)

'r' --> read 以只讀的形式打開(kāi)文件
'rb'/'br' --> 讀操作,讀出來(lái)的數(shù)據(jù)是二進(jìn)制形式的數(shù)據(jù)
'w' --> 以寫(xiě)的形式打開(kāi)文件
'bw'/'wb' --> 寫(xiě)操作,將二進(jìn)制數(shù)據(jù)寫(xiě)入文件
'a' --> 寫(xiě)操作,追加的意思

c.encoding -> 文本文件的編碼方式

utf-8 :幾乎支持所有的語(yǔ)言文字
gbk :只支持英文

d.open函數(shù)的返回值,就是被打開(kāi)的文件對(duì)象

關(guān)閉文件:文件對(duì)象.close()

f1 = open('./test.txt', 'r', encoding='utf_8')

----------------文件的讀操作


1.讀文件中的內(nèi)容

文件對(duì)象.read() --> 從文件讀寫(xiě)位置開(kāi)始讀到文件結(jié)束,返回讀到的結(jié)果
文件對(duì)象.readline() --> 讀一行
文件對(duì)象.readlines() --> 返回一個(gè)列表,列表的元素是文件中每一行的內(nèi)容

content = f1.read()

print(type(content), content)
# contend = f1.readlines()
# print(contend)

2.關(guān)閉文件

f1.close()

----------------文件的寫(xiě)操作


1.打開(kāi)文件

'w' -> 將字符串寫(xiě)入文件中,完全覆蓋文件原來(lái)的內(nèi)容
'wb'/'bw' -> 將二進(jìn)制寫(xiě)入文件中,完全覆蓋文件原來(lái)的內(nèi)容

f2 = open('./test.txt', 'ww', encoding='utf-8')

寫(xiě)入文件

f2.write(content + 'hello world')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 〇、前言 本文共108張圖,流量黨請(qǐng)慎重! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 19,582評(píng)論 17 410
  • 題目描述:操作給定的二叉樹(shù),將其變換為源二叉樹(shù)的鏡像思路: 如上圖:交換根結(jié)點(diǎn)的左右子樹(shù);再遞歸對(duì)左子樹(shù)進(jìn)行交換;...
    fighting_css閱讀 292評(píng)論 0 0
  • 陳莉 上海裕和堂中醫(yī)養(yǎng)生 【日精進(jìn)打卡第5天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)大綱》5遍 共22遍 《大學(xué)》2遍共11遍...
    女神陳莉閱讀 165評(píng)論 0 0
  • 在這起風(fēng)的夜里 小孩在嬉戲追逐 大媽跳起廣場(chǎng)舞 有人坐著閑聊 有人跑動(dòng)健身 有人閑庭漫步 也有人 靜立無(wú)言 任發(fā)絲...
    青云墨閱讀 241評(píng)論 2 4
  • 我們吃完午飯 把自己交給干凈的馬路 讓她牽著我們往家走 午后的太陽(yáng) 倔強(qiáng)地穿過(guò)烏云 把光鋪在我們身上 微風(fēng)開(kāi)始了賽...
    四知錄閱讀 250評(píng)論 0 8

友情鏈接更多精彩內(nèi)容