Python day12:文件處理3+函數基礎

一混弥、文件修改的兩種方法:


with open('a.txt',mode='r+t',encoding='utf-8') as f:
    print(f.writable())
    f.seek(7,0)
    f.write('SB')


with open('a.txt',mode='r+t',encoding='utf-8') as f:
    f.seek(3,0)
    f.write('h')

'''
由上例得出結論:硬盤都是用新內容覆蓋舊內容钟些,沒有修改的概念吮螺,但是內存是可以修改的

如何修改文件:
思路:把硬盤的內容先讀入內存洗鸵,然后在內存中修改完畢后斩跌,再覆蓋到硬盤

方式一:如我們常使用的word,notpad++都是此方法
步驟:
1、先將硬盤中文件的內容全部讀入內存淤堵,然后在內存中修改完畢得到一個修改好的結果
2寝衫、將修改的結果覆蓋回原文件
優(yōu)點: 不耗費硬盤
缺點:耗費內存
'''
with open('a.txt',mode='rt',encoding='utf-8') as f1:
    data=f1.read()
    res=data.replace('lxx','SB')

with open('a.txt',mode='wt',encoding='utf-8') as f2:
    f2.write(res)

'''
方式二:
步驟:
1、循環(huán)讀取源文件內容拐邪,一行行修改一行行寫入一個新的臨時文件
2慰毅、刪除源文件
3、將臨時文件重命名為源文件名
優(yōu)點:節(jié)省內存
缺點:耗費硬盤空間
'''
import os
with open('a.txt',mode='rt',encoding='utf-8') as f1,\
        open('.a.txt.swp',mode='wt',encoding='utf-8') as f2:
    for line in f1:
        res=line.replace('SB','lxx')
        f2.write(res)

os.remove('a.txt')
os.rename('.a.txt.swp','a.txt')

二扎阶、函數基礎

'''
1汹胃、什么是函數
    具備某一功能的工具===》函數

    工具的使用:
        事先準備好工具==========》函數的定義
        遇到應用場景拿來就用====》函數的調用

2、為何要有函數
    1东臀、程序的組織結構不清晰着饥,可讀性差
    2、如果要用到重復的功能惰赋,只能拷貝功能的實現代碼=》代碼冗余
    3宰掉、可擴展性差
3、如何用函數
    函數的使用原則:先定義赁濒,后調用

    定義函數:
        def 函數名(參數1,參數2,參數3,...):
            """文檔注釋"""
            代碼1
            代碼2
            代碼3
            ...
            return 返回值

    調用函數:
        函數名(值1轨奄,值2,值3,...)
'''
'''
一:函數的基本使用
1拒炎、定義函數:申請內存空間把函數體代碼保存下來挪拟,然后把內存地址綁定給函數名-》函數名=函數的內存地址'''
def sayhi():
    print('*'*10)
    print('hello')
    print('*'*10)

print(sayhi)

'''2、調用函數: 函數名()=> 函數的內存地址()击你,會觸發(fā)函數體代碼的運行'''
sayhi()
sayhi()
sayhi()

'''二:定義函數的三種格式
2.1: 無參函數'''
def login():
    inp_name=input("your name: ").strip()
    inp_pwd=input("your pwd: ").strip()
    if inp_name == "yang" and inp_pwd == "123":
        print('login successful')
    else:
        print('login error')

login()


def sayhi():
    print('='*100)
    print('hello')
    print('='*100)

sayhi()

'''2.2: 有參函數'''
def sayhi(s,n):
    print(s*n)
    print('hello')
    print(s*n)

sayhi('-',20)
sayhi('*',10)

def max2(x,y):
    if x > y:
        print(x)
    else:
        print(y)
max2(10,20)
max2(11,22)


'''2.3: 空函數,空函數在項目初期玉组,有些功能還沒做完時,可以先用空函數頂替果漾,防止程序不發(fā)運行'''
def func():
    pass


'''三:函數的調用
return:
函數內可以有多個return球切,但只要執(zhí)行一次函數就立刻結束谷誓,并會把return后的值當作本次調用的結果返回

函數可以有三種形式的返回值
1绒障、return 值:返回的就是該值本身
2、return 值1,值2,值3:返回一個元組
3捍歪、沒有return:默認返回None
'''
def max2(x,y):
    if x > y:
        return x
    else:
        return y

res=max2(1.1,3.3)

print(res * 12 )
'''
四:函數調用的三種格式
4.1 語句形式:單純地調用一下函數就完了
'''
def sayhi(s,n):
    print(s*n)
    print('hello')
    print(s*n)

sayhi('*',30)

'''4.2 表達式形式:'''
def max2(x,y):
    if x > y:
        return x
    else:
        return y

res=max2(11,22) * 12
print(res)

'''4.3 可以把函數的調用當作值傳給另外一個函數'''
print(max2(11,22))

'''
總結:
函數的使用一定要分兩個階段去看:
1户辱、定義階段:只檢測語法,不執(zhí)行代碼
2糙臼、調用階段:執(zhí)行函數體代碼

如果發(fā)生的語法錯誤庐镐,定義階段就會立馬檢測出來'''
def func():
    print("hello"  # 直接報錯

'''如果發(fā)生的不是語法錯誤,而是邏輯錯誤变逃,只能在調用階段檢測到'''
def func():
    xxx

func()


'''示范1:'''
def bar():
    print('from bar')

def foo():
    print('from foo')
    bar()

foo()

'''示范2:'''
def foo():
    print('from foo')
    bar()

def bar():
    print('from bar')

foo()

三必逆、函數參數

'''一:函數的參數分為兩大類:
1、形參:在定義函數時,括號內定義的變量名名眉,稱之為形式參數粟矿,簡稱形參=》變量名'''
def func(x,y):
    x=1
    y=2
print(x)
print(y)


'''2、實參:在調用函數時损拢,括號內傳入的值陌粹,稱之為實際參數,簡稱實參=》變量值
func(1,2)'''
'''
二:在python中參數的種類
1福压、位置參數:
(1)位置形參:在函數定義階段按照從左到右的順序依次定義形參(變量名)掏秩,稱之為位置形參
 特點:必須被傳值
'''
def func(x,y):
    print(x,y)

func(1,2)
func(1) # 少一個不行
func(1,2,3) # 多一個也不行

'''
(2)位置實參:在函數調用階段按照從左到右的順序依次定義實參(傳入的變量值),稱之為位置實參
特點:按照位置傳值荆姆,一一對應
'''
def func(x1,x2,x3,x4,x5,x6):
    print(x1,x2,x3,x4,x5,x6)

func(1,2,3,4,5,6)

'''
2蒙幻、關鍵字實參:在函數調用階段按照key=value的形式為指定的形參名傳值,該形式稱之為關鍵字實參
特點:在傳值時可以完全打亂順序胆筒,但是仍然能夠指名道姓地為指定的形參傳值
'''
def func(name, age, ):
    print(name, age, )


func("yang",18)
func(18,"yang")

func(age=18,name="yang")
'''
注意:可以混用位置實參與關鍵字實參,但是
1 位置實參必須放在關鍵字實參的前面
2 不能為同一個形參重復賦值
'''
def func(name, age, salary):
    print(name)
    print(age)
    print(salary)


func('yang',salary=3.1,age=18)
func('yang',salary=3.1,18) # 錯誤
func('yang', 18, salary=3.1)  # 錯誤

func('yang',18,age=19,salary=3.3)

'''
3杆煞、默認形參:在函數定義階段就已經為某個形參賦值,該形參稱之為有默認值的形參,簡稱默認形參
特點: 定義階段就已經被賦值意味著在函數調用階段可以不用為其賦值
'''
def func(x,y=2):
    print(x,y)

func(1)
func(1,33333)
'''
注意:
1 默認形參應該放在位置形參的后面
'''
def func(y=2,x): # 錯誤
    pass
'''
2 默認形參的值通常應該是不可變類型,因為若值是可變類型,我們獲取到的是一個id地址腐泻,傳入值的時候也是通過id决乎,就會導致傳的每個值都通過這個id存值,使得所有值都放在了一起
'''
def func(name,hobby,hobbies=[]):
    hobbies.append(hobby)
    print("%s 的愛好是:%s" %(name,hobbies))

func("yang",'play')
func('yang','music')
func("tank",'read')
---------------------------------------
yang 的愛好是:['play']
yang 的愛好是:['play', 'music']
tank 的愛好是:['play', 'music', 'read']
'''
要實現以上單獨存的功能派桩,應該把hobbies放到函數里面定義
'''
def func(name,hobby,hobbies=None):
    if hobbies is None:
        hobbies=[]
    hobbies.append(hobby)
    print("%s 的愛好是:%s" %(name,hobbies))

func("yang",'play')
func('yang','music')
func("tank",'read')
------------------------------------
yang 的愛好是:['play']
yang 的愛好是:['music']
tank 的愛好是:['read']
'''
3 默認形參的值只在函數定義階段被賦值一次,函數定義之后的改變對默認形參沒有影響
'''
m=333
def func(x,y=m): # y=333
    print(x,y)

m=444
func(1)


def register(name,age,gender='male'):
    print(name)
    print(age)
    print(gender)

register('yang',18,)
register('jack',20,)
register('mary',18,'female')

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末构诚,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子铆惑,更是在濱河造成了極大的恐慌范嘱,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件员魏,死亡現場離奇詭異丑蛤,居然都是意外死亡,警方通過查閱死者的電腦和手機撕阎,發(fā)現死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門受裹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虏束,你說我怎么就攤上這事棉饶。” “怎么了镇匀?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵照藻,是天一觀的道長。 經常有香客問我汗侵,道長幸缕,這世上最難降的妖魔是什么群发? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮发乔,結果婚禮上也物,老公的妹妹穿的比我還像新娘。我一直安慰自己列疗,他們只是感情好滑蚯,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抵栈,像睡著了一般告材。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上古劲,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天斥赋,我揣著相機與錄音,去河邊找鬼产艾。 笑死疤剑,一個胖子當著我的面吹牛,可吹牛的內容都是我干的闷堡。 我是一名探鬼主播隘膘,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杠览!你這毒婦竟也來了弯菊?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踱阿,失蹤者是張志新(化名)和其女友劉穎管钳,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體软舌,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡才漆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了佛点。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醇滥。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恋脚,靈堂內的尸體忽然破棺而出腺办,到底是詐尸還是另有隱情焰手,我是刑警寧澤糟描,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站书妻,受9級特大地震影響船响,放射性物質發(fā)生泄漏躬拢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一见间、第九天 我趴在偏房一處隱蔽的房頂上張望聊闯。 院中可真熱鬧,春花似錦米诉、人聲如沸菱蔬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拴泌。三九已至,卻和暖如春惊橱,著一層夾襖步出監(jiān)牢的瞬間蚪腐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工税朴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留回季,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓正林,卻偏偏與公主長得像泡一,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子觅廓,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359