Day10 函式基礎+函式三種定義形式 + 函式的返回值、物件和引數 + 可變長引數

blueeeeeeeeeeee發表於2024-10-24

目錄
  • 0 上節課複習
    • 0.1 檔案是什麼
    • 0.2 操作檔案的步驟
    • 0.3 open
    • 0.4 指標操作
    • 0.5 檔案的複製
  • 1 函式基礎
    • 1.1 函式的作用
    • 1.2 函式的定義形式
    • 1.3 函式定義的兩個階段
  • 2 定義函式的三種形式
    • 2.1 無參函式
    • 2.2 有參函式
    • 2.3 空函式
  • 3 函式的返回值
  • 4 函式物件
  • 5 函式引數的應用
    • 5.1函式定義分為兩個階段
    • 5.2 預設形參
    • 5.3 關鍵字實參
    • 5.4 何時用?
  • 6 可變長引數
    • 6.1 可變長形參
    • 6.2 可變長實參

0 上節課複習

0.1 檔案是什麼

是作業系統提供的虛擬單位,用來儲存資料

0.2 操作檔案的步驟

  1. 開啟檔案
  2. 讀寫
  3. 關閉檔案

0.3 open

  • with open(‘檔案路徑‘,開啟方式,編碼格式) as 變數名:

​ 讀寫操作

  • r只讀 w清空檔案後只寫,a追加寫入,t文字模式 /b二進位制模式(沒有encoding引數)

0.4 指標操作

seek移動指標,tell告訴你當前指標位置,read(n)讀取n個字元,truncate階段檔案(瞭解)

0.5 檔案的複製

with open('a.txt','r',encoding = 'utf8') as fr,open('a_swap.txt','w',encoding = 'utf8') as fw:
  data = fr.read()
  data = data.replace('apple','banana')
  fw.write(data)
import os
os.remove('a.txt')
os.rename('a_swap.txt','a.txt')
# 換行加個斜槓
with open('a.txt','r',encoding = 'utf8') as fr,\
	open('a_swap.txt','w',encoding = 'utf8') as fw:

1 函式基礎

1.1 函式的作用

  1. 把冗餘的程式碼寫成一個通用模板
  2. 可以把冗餘的程式碼獨立開來

1.2 函式的定義形式

def 函式名():   # 函式名得有一定的意義(類似於變數名)
  操作程式碼

# 引用時
函式名()

例如,註冊功能

def register():
  
	print("註冊".center(100, '*'))
	username = input("請輸入你的使用者名稱:\n")
  password = input("請輸入你的密碼:\n")
  with open(r'users information.txt', 'a', encoding='utf-8') as fa:
  	fa.write(f'{username}:{password}\n')

# 使用方式:函式名()可以使用這個工具
register()

1.3 函式定義的兩個階段

  1. 定義函式:在這個過程中,本來會報錯的可能不會報錯,因為這個階段只識別語法,而不執行程式碼
  2. 呼叫函式:這個過程才執行程式碼題

2 定義函式的三種形式

注意:函式知識一種思想,幹活的具體的實現都是靠if/while/for+變數,函式只是讓你幹活更輕鬆

以比大小為例,介紹三種形式

2.1 無參函式

# 定義
def self_max():
  x,y = 10,20
  if x > y:
    print(x)
  else:
    print(y)
# 呼叫
self_max()

2.2 有參函式

# 定義 
def self_max(x,y):
  if x > y:
    print(x)
  else:
    print(y)
# 呼叫
self_max(i,j)

2.3 空函式

def self_max:
  pass

為什麼有空函式?

你想造一把鋸子,但你現在造不來,就給他東西留下來會造的時候再造

3 函式的返回值

變數名用來接收變數值

函式名用來接收函式的返回值,返回值預設為none,可以把函式體裡面的輸出值換成return,返回一個值給函式名,任意資料型別均可

def get_list():
  return [1,2,3,4]
lis = get_list()
print(lis)
  1. return可以返回任意型別的資料
  2. return預設返回none
  3. 當return返回多個值的時候,會以元組的形式把多個值包在一起

4 函式物件

函式名可以看成變數名

列印函式名可以列印返回值

python中一切皆物件,列表資料型別,str,dict,object

舉個例子比較四個數值的大小

def self_max(x,y):
  if x > y:
    return x
  else:
    return y
# 比較四個數大小
a,b,c,d = 10,5,14,6
#甚至可以接用其定義一個新的函式
def self_max_four(a,b,c,d):
	max_four = self_max(self_max(self_max(a,b),c),d)
  return(max_four)
print(self_max_four(1,4,5,2))

切記:函式體裡面要有return,不能由print

5 函式引數的應用

5.1函式定義分為兩個階段

  1. 定義階段:定義階段的x和y被稱為形參,形參具有描述意義,類似於變數名,不為具體的資料型別
  2. 呼叫階段:此階段的a和b稱為實參,實參必須是具體的資料型別
def self_max(x,y):  # 位置形參
  if x > y:
    return x  # return有break的作用,一旦執行後面的就不輸出了
  print(333)
  print(666)
  return y
num_1 = self_max(10,20)  #位置形參
print(num_1)
print('*'*100)
num_2 = self_max(20,10)
print(num_2)

5.2 預設形參

在函式定義階段,提前賦值給形參,當你實參傳值的時候,實參傳的值會覆蓋預設值

def guess_age(age=18):
  inp_age = int(input("age>>>"))
  if age == inp_age:
    print("bingo")
  else:
    print("error!")

a = guess_age(20)

b = guess_age()

5.3 關鍵字實參

用在函式呼叫階段,找到與形參的對應關係,並賦值給對應的形參,形參名為什麼則關鍵字實參名也必須為什麼

def self_max(x,y):
  print(f'x:{x},y:{y}')
  if x > y:
    return x
  return y

print(self_max(y=10,x=41))

5.4 何時用?

什麼時候用預設形參:值不需要改變,並且經常使用,預設形參必須在位置形參後面

什麼時候用關鍵字實參:當你的引數非常多的時候,使用關鍵字實參,關鍵字實參必須位置實參後面

6 可變長引數

6.1 可變長形參

def self_max(*args,**kwargs):
    print(args)   # *a接受了所有引數,然後以元組的形式儲存了下來,只接受位置引數,不接受關鍵字實參
    print(kwargs)   # **b接收了所有的關鍵字實參,然後以字典的形式儲存下來
self_max(1,2,3,4,5,6,7,8,9,x=11,m=47,ff=74)

6.2 可變長實參

def self_max(a,b,c,d,e,f,g,x=1,y=2,z=3):
    print(a,b,c,d,e,f,g,x,y,x,z)

args = [1,2,3,4,5,6,7] # 把這個列表內的元素一個一個取出來,然後一個一個傳給這個函式,取出的值會覆蓋預設引數
kwargs = {"x":10,"y":11,"z":12}  # 把這個字典內的元素一個一個取出來,然後一個一個傳給這個函式,取出的值會覆蓋預設引數
self_max(*args,**kwargs)  # *args,**kwargs,被稱為可變長實參,

約定俗稱的,*後面必須得寫args,**後面必須寫kwargs

相關文章