1. 程式人生 > >python學習之路--day08

python學習之路--day08

一、檔案處理補充

檔案內游標移動

1、f.read(n):

I.檔案開啟方式為文字模式時,代表讀取n個字元  

II.檔案開啟方式為b模式時,代表讀取n個位元組

只有t模式下read(n)中n代表字元個數

2、其餘的檔案內游標移動都是以位元組為單位如seek,tell,truncate

1)seek有三種移動方式

0 :參照檔案開頭,往後數,只有其既可以在t下用,也可以在b下用

1 :參照指標當前位置往下數

2 :參照檔案末尾,往下數

其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes為單位移動的

       f.seek(3,0)   3--位元組,0--方式

2)f.truncate(3):截斷檔案,在第三個字元後新增內容/刪除之後的內容

其檔案的開啟方式必須可寫,但是不能用w或w+等方式開啟(直接清空檔案),所以truncate要在r+或a或a+等模式下測試效果

3)f.tell:游標移動到檔案末尾

# 小程式
import time
with open('access.log',mode='rb')as f:
    f.seek(0,2)
    while True:
        line=f.readline()
        if len(line)==0:
            time.sleep(
0.1) else: print (line,decode('utf-8'),end=' ')
小程式

 

二、函式

1.函式的定義

函式就是在程式中具備某一功能的工具。函式的定義可以理解為事先準備好工具。函式的呼叫即可理解為遇到場景拿來用的行為

2.為什麼用函式

I.程式碼冗餘

II.程式組織結構不清晰,可讀性差

III.擴充套件性差

3.怎麼用函式(函式使用必須遵循一個原則)

I.先定義

定義語法:
     def 函式名(引數1,參2,參3...)
           """
          註釋
           
""" 縮排程式碼塊 return

II.後呼叫

  函式名()

#1. 定義階段: 只檢測語法,不執行程式碼
 def func():
     print('from func 1')

#2. 呼叫階段: 開始執行函式體程式碼
 func()

# 定義
def func():
    print('from func')
    bar()

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

# 呼叫
func()
函式的定義與呼叫

 

4.定義函式的三種形式

1)無參函式

2)有參函式

3)  空函式

# 1. 無參函式
def func():
    print('from func')

func()

# 2. 有參函式
def max2(x,y):
    # x=1
    # y=2
    if x > y:
        print(x)
    else:
        print(y)

max2(1,2)
max2(3,4)


# 3. 空函式
def register():
    pass
定義函式三種形式

 

5.呼叫函式的三種形式

1)語句形式

2)表示式形式

3)函式的呼叫可以當作另外一個函式的引數傳入

# 1 語句形式
def func():
    print('from func')

func()
# 2 表示式形式
def max2(x,y):
    if x > y:
        return x
    else:
        return y

res=max2(110,220) * 12
print(res)

res=len('hello')
print(res)

# 3 函式的呼叫可以當作另外一個函式的引數傳入
def max2(x,y):
    if x > y:
        return x
    else:
        return y

res=max2(max2(7,9),2)
print(res)
呼叫函式的三種形式

 

三、函式的返回值

1.返回值定義

函式體程式碼的執行成果

2.為什麼使用返回值

需要拿到函式的處理結果做進一步處理

3.如何使用

1)返回值的特點: 返回的值沒有型別限制,也沒有個數限制

I: return或者函式沒return:返回值None
II: return 值:返回的就是該值本身
III: return 值1,值2,值3:返回元組(值1,值2,值3)

def func():
    return 1,1.2,'aaa',[1,2,3]
    pass
res=func()
print(res)     #(1, 1.2, 'aaa', [1, 2, 3])

 

2)return是函式結束執行的標誌,函式內可以有多個return,但只要執行一次函式就立即結束,並且將return後的值當作本次呼叫的結果返回

def func():
    print('aaaa')
    return 1
    print('bbb')
    return 2
    print('ccc')
    return 3

func()    #aaaa 只返回第一個return的值

 

四、函式的引數

1.形參:在定義函式時,括號內指定引數(變數名)

1)位置形參:在定義階段,按從左到右順序依次定義的形參

特點:必須被傳值

def func(x,y,z):
    print(x,y,z)

func(1,2,3)   #有且只有三個值,多少都會報錯

  

2)  預設形參:在定義階段,就已經為某個形參賦值

特點:在定義階段,就已經有值,意味著呼叫階段可以不用為其傳值,但若傳值,則以傳入的值為準 

def func(x,y=2):   #x與y此時位置不可互換
    print(x,y)

func(1)          # 1 2
func(1,3333333)  # 1 3333333  若傳值,則以傳值為準

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

register('靚仔',18,)
register('花姑娘',16,'female')
# 靚仔 18 male
# 花姑娘 16 female
預設形參

  注意:位置形參必須放在預設形參的前面 

 3) 形參中*與**的用法

 I. 形參中帶*:*會將溢位的位置實參存成元組的形式然後賦值其後變數名
def func(x,y,*args):
print(x,y,args)
func(1,2,3,4,5,6) # 1 2 (3, 4, 5, 6)
II.形參中帶**:**會溢位的關鍵字實參存成字典的格式然後賦值其後變數名
def func(x,y,**kwargs):
print(x,y,kwargs)
func(1,y=2,z=3,m=1,n=2) # 1 2 {'z': 3, 'm': 1, 'n': 2}

2.實參:在呼叫函式時,括號內傳入的值(變數值)

 1)位置實參:在呼叫階段,按從左到右依次傳入的值

特點:這種傳值方式會與形參一一對應

      func(2,1,3)

 2)  關鍵字實參:在呼叫階段,按key=value格式傳值

特點:可完全打亂位置,但仍可為指定形參傳值

     func(z=3,y=2,x=1) 

注意:可以混用關鍵字實參與位置實參,但是
1. 同一個形參只能被賦值一次
2. 位置實參必須跟在關鍵字實參的前面
func(1,z=3,y=2)
func(1,z=3,y=2,x=333)
func(x=1,2,z=3) # 報語法錯誤
3 )實參中*與**的用法
I. 實參中帶*:先將實參打散成位置實參,然後再與形參做對應
def func(x,y,z):
print(x,y,z)
func(1,[2,3]) # 報錯
func(*[1,2,3]) # 1,2,3
func(*'hello') # 報錯,只需要三個值
func(*'hel') #h e l
II.實參中帶**:先將實參打散成關鍵字實參,然後再與形參做對應
def func(x,y,z):
print(x,y,z)

func(**{'x':1,'z':3,'y':2}) # 1 2 3