方式二函式
二、為何要有函式
三、如何用函式
函式中引數的分類
二、實參
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')
由上例得出結論:硬碟都是用新內容覆蓋舊內容,沒有修改的概念,但是記憶體是可以修改的
如何修改檔案:
思路:把硬碟的內容先讀入記憶體,然後在記憶體中修改完畢後,再覆蓋會硬碟
優點: 不耗費硬碟
缺點:耗費記憶體
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)
優點:節省記憶體
缺點:耗費硬碟空間
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'
)
定義函式:
def 函式名(引數1
,引數2
,引數3,.
..):
"""文件注釋"""
**1**2
**3..
.return 返回值
1.無參函式
只返回值或者不返回值,不進行運算
def
login()
: inp_name=
input
("your name: "
).strip(
) inp_pwd=
input
("your pwd: "
).strip(
)if inp_name ==
"egon"
and inp_pwd ==
"123"
:print
('login successful'
)else
:print
('login error'
)login(
)def
sayhi()
:print
('='
*100
)print
('hello'
)print
('='
*100
)sayhi(
)
2.有參函式
函式裡面有引數
引數就像工廠的流水線,可以定義無限個引數,我們根據函式的功能來決定是否呼叫引數
def
sayhi
(s,n)
:# s = '-'
# n = 20
print
(s*n)
print
('hello'
)print
(s*n)
sayhi(
'-',20)
sayhi(
'*',10)
defmax2
(x,y)
:# x=10
# y=20
if x > y:
print
(x)else
:print
(y)max2(10,
20)max2(11,
22)
3.空函式
通常在構建框架時使用
def
func1()
:pass
呼叫函式: 函式名()=> 函式的記憶體位址(),會觸發函式體**的執行
1、語句形式:單純地呼叫一下函式就完了
def
sayhi
(s,n)
:# s = '-'
# n = 20
print
(s*n)
print
('hello'
)print
(s*n)
sayhi(
'*',
30)
2、表示式形式
通過呼叫函式來對於函式返回的值進行後續的運算
def
max2
(x,y)
:if x > y:
return x
else
:return y
res=max2(11,
22)*12
print
(res)
3、可以把函式的呼叫當作值傳給另外乙個函式
相當於函式的巢狀(可以這樣理解:函式和變數一樣,總歸是儲存的乙個值,可以當作乙個變數來使用,只是乙個可以內部運算然後返還值的變數)
print
(max2(11,
22))
引數:已經被賦值,或者還沒有被賦值的變數名
在定義函式時,括號內定義的變數名,稱之為形式引數,簡稱形參=》變數名
位置形參:在函式定義階段按照從左到右的順序依次定義形參(變數名),稱之為位置形參
特點:必須被傳值
在呼叫函式時,括號內傳入的值,稱之為實際引數,簡稱實參=》變數值
位置實參:在函式呼叫階段按照從左到右的順序依次定義實參(傳入的變數值),稱之為位置實參
特點:按照位置傳值,一一對應
關鍵字實參:在函式呼叫階段按照key=value的形式為指定的形參名傳值,該形式稱之為關鍵字實參
特點:在傳值時可以完全打亂順序,但是仍然能夠指名道姓地為指定的形參傳值
注意:可以混用位置實參與關鍵字實參,但是
1 位置實參必須放在關鍵字實參的前面
2 不能為同乙個形參重複賦值
def
func
(name, age, salary)
:print
(name)
print
(age)
print
(salary)
# func('egon',salary=3.1,age=18)
# func('egon',salary=3.1,18) # 錯誤
# func('egon', 18, salary=3.1) # 錯誤
# func('egon',18,age=19,salary=3.3)
3、預設形參:在函式定義階段就已經為某個形參賦值,該形參稱之為有預設值的形參,簡稱預設形參
特點: 定義階段就已經被賦值意味著在函式呼叫階段可以不用為其賦值
1 預設形參應該放在位置形參的後面
def
func
(y=2
,x):
# 錯誤
pass
2 預設形參的值通常應該是不可變型別
def
func
(name,hobby,hobbies=
):print
("%s 的愛好是:%s"
%(name,hobbies)
)func(
"egon"
,'play'
)func(
'lili'
,'music'
)func(
"jack"
,'read'
)def
func
(name,hobby,hobbies=
none):
if hobbies is
none
: hobbies=
print
("%s 的愛好是:%s"
%(name,hobbies)
)func(
"egon"
,'play'
)func(
'lili'
,'music'
)func(
"jack"
,'read'
)
3 預設形參的值只在函式定義階段被賦值一次,函式定義之後的改變對預設形參沒有影響 檔案處理函式
這兩天在寫個遍歷檔案批處理的小工具,碰到幾個時間相關的函式,整理了下,說不定以後可能會再用到呢 判斷檔案是否存在 bool filei ists lpcstr filepath findclose hfind return true 獲取檔案最後修改時間距當前時間的差值 用於判斷該檔案是否正在寫的一...
檔案處理函式
前幾天參加鄭州悉知公司的校園招聘會,面試官問了很多有關檔案處理函式,當時回答的不是很少,雖然平時也經常用到有關檔案處理的函式,但是也沒對檔案處理函式做總結,檔案處理函式也是我們學習web開發中重要的一塊 這是回來之後對檔案處理函式的總結 basename 返回路徑中的檔名 c hgrp 改變檔案所屬...
檔案處理函式
winapi getwindowsdirectory 獲取 windows 所在目錄 宣告 getwindowsdirectory lpbuffer pchar usize uint uint 舉例 vararr array 0 max path ofchar num uint begin num ...