1. 程式人生 > >文件指針,函數

文件指針,函數

好的 參數詳解 如何 urn ret 自定義函數 擴展 變量 app

文件內指針移動:
  強調:只有t模式下read(n),n代表字符個數,除此之外都是以字節為單位

    with open(‘a.txt‘,‘rt‘,encoding=‘utf-8‘)as f:
    res=f.read(4)
    print(res)
  以字節為單位:
    with open(‘a.txt‘,‘at‘,encoding=‘utf-8‘)as f:
    f.truncate(4)
  指針移動是以字節為單位的:
  三種模式:只有0模式可以在t和b下面,只有1,2模式只能在b模式下
    0 :參照文件開頭

      with open(‘a.txt‘,‘rt‘,encoding=‘utf-8‘)as f:
      f.seek(3,0)
      print(f.tell())
      print(f.read())

    1 :參照指針當前所在的位置
      with open(‘a.txt‘,‘rb‘)as f:
      f.read(2)
      f.seek(4,1)
      print(f.read().decode(‘utf-8‘))

    2 :參照文件末尾
      with open(‘a.txt‘,‘rb‘)as f:
      f.seek(-5,2)
      print(f.tell())
      print(f.read().decode(‘utf-8‘))

  tail -f access.log
  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.程序的組織結構不清晰,可讀性差
  3.擴展性差

兩大類:
  內置函數
  自定義函數


如何用函數
  先定義
定義語法:
def 函數名(參數1,參數2,參數3。。。。。):
"""
文檔註釋
"""
代碼1
代碼2
。。。
return 值

  後調用
函數名

一、定義階段:只檢測語法,不執行代碼
def func():
print(‘from func 1‘)

二、調用階段:開始執行函數體代碼
func()
# 定義
def faa():
print(‘sdsdsdsdya‘)
fbb()

def fbb():
print(‘sbsbsbsbya‘)
# 調用
faa()

定義函數的三種形式:
  1.無參函數
def func():
print(‘from func‘)
func()
  2.有參函數
def max(x,y):
if x>y:
print(x)
else:
print(y)

max(1,2)

  3.空函數
def register():
pass

調用函數的三種形式:
  1.語句形式

  2.表達式形式
def max(x,y):
if x>y:
return x
else:
return y
res=max(1,2)
print(res)


  3.當中另一個函數的參數


  函數的返回值:
    返回值是函數體代碼的運行成果

  為何要有返回值:
    需要拿到函數的處理結果做進一步的處理,則函數必須有返回值

  如何用
return 返回值的特點:
  1.返回值沒有類型限制,也沒有個數限制
    return或者函數沒有return:返回值None
    return值:返回的就是該值本身
    return值1,值2,值3,返回的是元祖(值1,值2,值3)

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

函數的參數分為兩大類:
  1.形參:在定義函數時括號內指定的參數(變量名)
  2.實參:在調用函數時括號內傳入的值(變量值)
  二者的關系:在調用函數時,實參值會傳給形參,這種綁定關系在調用函數時生效,調用結束,綁定關系解除

函數參數詳解:
  1.形參:
  位置形參:在定義階段,按照從左到右的順序依次定義的形參
  特點:必須被傳值

  默認參數:在定義階段,就已經為某個形參賦值
  特點:在定義階段就已經有值,意味著調用階段可以不用為其傳值
  註意點:位置形參必須放在默認形參的前面
  def func(x,y=2):
  print(x,y)

形參中*與**的用法
形參中帶*:*會將溢出的位置實參存成元祖的形式然後賦值其後變量名
def func(x, y, *z):
print(x,y,z)

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

形參中帶**:**會將溢出的關鍵字實參存成字典的格式然後賦值其後變量名
def func(x,y,**kwargs):
print(x,y,kwargs)
func(1,y=2,z=5,m=3,n=4)

2.實參
  位置實參:在調用階段,按照從左到右的順序依次傳入的值
  特點:這種傳值方式會與形參一一對應

  關鍵字實參:在調用階段,按照key=value的格式傳值
  特點:可以完全打亂位置,但仍然能為指定的形參傳值
  def func(z, y, x):
  pass

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

註意:可以混用關鍵字實參與位置實參,但是
同一個形參只能被賦值一次
位置實參必須跟在關鍵字實參的前面
func(1,z=3,y=2)
func(1,z=3,y=2,x=333)
func(x=1,2,z=3)#報語法錯誤

實參中帶*:先將實參打散成位置實參,然後再與形參做對應
def func(x,y,z):
print(x,y,z)
func(1,[2,3],6)
func(*[1,2,3])
func(*‘hel‘)

實參中帶**:先將實參打散成關鍵字實參,然後再與形參做對應
def func(x,y,z):
print(x,y,z)
func(**{‘x‘:1,‘z‘:3,‘y‘:2})

def index(x,y,z):
print(x,y,z)
def wrapper(*args,**kwargs):
index(*args,**kwargs)

wrapper(1,2,3,4,5,a=1,b=2,c=3)

wrapper(1,z=3,y=2)

文件指針,函數