Python全棧(第一期)Day9
今日主要內容:
初識函式
引數的小知識
一,談一下學習整體進度
python基礎 ——38天 2個月
資料庫 —— 儲存資料和資訊用的,本質上和檔案沒有區別 1-2周
—— 優點:增刪改查更方便了
前端 —— 2周(能開啟的網頁之類的都叫前段)
框架 —— django 2個月
linux基礎 2周
python 基礎階段 的 大體 目錄
基礎資料型別
流程控制 —— 條件判斷和各種迴圈
為什麼要有檔案處理(# 檔案裡儲存的是使用者名稱和密碼)
記憶體 —— 硬碟
函式 —— 兩週
面向物件和模組 —— 兩週
網路程式設計 —— 一週
併發程式設計 —— 一週
二,複習一下昨日內容
1,檔案操作:詳細步驟
檔案處理 開啟檔案 open('路徑','開啟方式','指定編碼方式') 開啟方式 r w a r+ w+ a+ b(可以和前面所有的一起使用) r+ 開啟檔案直接寫 和讀完再寫 編碼方式 —— utf-8 操作檔案 讀 read 一次性讀 readlines 一次性讀 readline 一行一行讀 不知道在哪兒結束 視訊 圖片 rb bytes 按照位元組讀 for迴圈 —— 最好!!! 寫 write 游標 —— 檔案指標 seek _ 指定游標移動到某個位置 tell _ 獲取游標當前的位置 truncate _ 擷取檔案 關閉檔案 close
2,實戰:某個檔案的備份或者是臨時檔案,我們叫 .bak
修改檔案 with open('小護士班主任', encoding='utf-8') as f, open('小護士班主任.bak','w',encoding='utf-8') as f2: for line in f: print(line) if '星兒' in line: #班主任:星兒 line = line.replace('星兒', '啊嬌') print('hello python') #寫檔案 f2.write(line) #小護士:金老闆 ''' 刪除檔案 + 重新命名檔案 ''' import os os.remove('小護士班主任') #刪除檔案 os.rename('小護士班主任.bak', '小護士班主任') #重新命名檔案 ''' os.rename('old','new') '''
三,初識函式
1,返回的重要性
s = '金老闆小護士'
len(s)
def my_len(): #自定義函式
num = 0
for i in s:
num += 1
print(num)
length = my_len()
print(length)
# 函式
# 定義了之後,可以在任何需要它的地方呼叫
# 沒有返回長度,只是單純的列印
輸出結果:
6
None
2,1—>改進
s = '金老闆小護士'
def my_len(): #自定義函式
num = 0
for i in s:
num += 1
return num #返回值
length = my_len()
print(length)
輸出結果:
6
3,小知識
# 返回值
# 返回值的3種情況
# 沒有返回值 —— 返回None
# 不寫return
# 只寫return: 結束一個函式的繼續
#
#
#
# '''
# 遇到 return 之後,後邊的內容就不再執行了
# 可以用一些別的用法:結束某個函式的時候可以用。
# '''
#
#
# return None —— 不常用
# 返回1個值
# 可以返回任何資料型別
# 只要返回就可以接收到
# 如果在一個程式中有多個return,那麼只執行第一個
# 返回多個值
# 用多個變數接收:有多少返回值就用多少變數接收
# 用一個變數接收: 得到的是一個元組
4,區分以下接收情況
def func2():
return 1, 2, 3 #return 1,2,3
r1 = func2()
print(r1)
q, w, e = func2()
print(q, w, e)
輸出結果:
(1, 2, 3)
1 2 3
5,關於引數的知識
站在實參的角度上:(三種方法,但是儘量不混合用)
按照位置傳參
按照關鍵字傳參
混著用可以:但是 必須先按照位置傳參,再按照關鍵字傳引數
不能給同一個變數傳多個值
站在形參的角度上
位置引數:必須傳,且有幾個引數就傳幾個值
預設引數: 可以不傳,如果不傳就是用預設的引數,如果傳了就用傳的
'''
在下邊的例子中:
name:位置引數
sex:預設引數
'''
def classmate(name, sex='男'):
print('%s : %s'%(name, sex))
classmate('大猛')
classmate('朗哥', '女')
輸出結果:
大猛 : 男
朗哥 : 女
只有呼叫函式的時候
按照位置傳 : 直接寫引數的值
按照關鍵字: 關鍵字 = 值
定義函式的時候:
位置引數 : 直接定義引數
預設引數,關鍵字引數 :引數名 = '預設的值'
動態引數 : 可以接受任意多個引數
引數名之前加*,習慣引數名args,
引數名之前加**,習慣引數名kwargs
順序:位置引數,*args, 預設引數,**kwargs
上面的這個順序一定要死死的記住!
6,動態引數練習
def sum(*args):
n = 0
for i in args:
n += i
return n
print(sum(1, 2))
print(sum(1, 2, 3))
print(sum(1, 2, 3, 4))
輸出結果:
3
6
10
'''
可以傳輸多個關鍵字引數
'''
def func(**kwargs):
print(kwargs)
func(a=1, b=2,c=3)
func(a=1,b=2)
func(a=1)
輸出結果:
{‘a’: 1, ‘b’: 2, ‘c’: 3}
{‘a’: 1, ‘b’: 2}
{‘a’: 1}
動態引數有兩種:可以接受任意個引數
*args : 接收的是按照位置傳參的值,組織成一個元組
**kwargs: 接受的是按照關鍵字傳參的值,組織成一個字典
args必須在kwargs之前
繼續看一些實戰!
def func(*args,default = 1,**kwargs):
print(args, kwargs)
print(default)
func(1,2,3,4,5,default=2,a = 'aaaa',b = 'bbbb',)
輸出結果:
(1, 2, 3, 4, 5) {‘a’: ‘aaaa’, ‘b’: ‘bbbb’}
2
# 動態引數的另一種傳參方式
def func(*args):#站在形參的角度上,給變數加上*,就是組合所有傳來的值。
print(args)
func(1,2,3,4,5)
l = [1,2,3,4,5]
func(*l) #站在實參的角度上,給一個序列加上*,就是將這個序列按照順序打散
func(l)
輸出結果:
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
([1, 2, 3, 4, 5],)
四,習題講解
1,使用range列印100,99,98,…1,0
for i in range(100, -1, -1):
print(i)
2,實現一個整數加法計算器:
如:content = input(‘請輸入內容:’) # 如使用者輸入:5+8+7…(最少輸入兩個數相加),
然後進行分割再進行計算,將最後的計算結果新增到此字典中(替換None):
dic={‘最終計算結果’:None}。
content = input('請輸入內容:') # 5+8+7。。。
content_list = content.split('+')
print(content_list)
sum = 0
for i in content_list:
sum = sum + int(i)
print(sum)
輸出結果:
請輸入內容:4 + 9 +1
['4 ', ’ 9 ', ‘1’]
14
3,在列表中,將所有大於66的數放到字典的第一個key中,其餘的數放到第二個key中。
li = [11, 22, 33, 44, 55, 77, 88, 99, 90]
result = {}
for row in li:
if row > 66:
if 'key1' not in result:
result['key1'] = []
result['key1'].append(row)
else:
if 'key2' not in result:
result['key2'] = [] # result = {'key2':[]}
result['key2'].append(row)
print(result)
輸出結果:
{‘key2’: [11, 22, 33, 44, 55], ‘key1’: [77, 88, 99, 90]}
li = [11,22,33,44,55,77,88,99,90]
result = {}
for row in li:
result.setdefault('key1',[])
result.setdefault('key2',[])
if row > 66:
result['key1'].append(row)
else:
result['key2'].append(row)
print(result)
輸出結果:
{‘key1’: [77, 88, 99, 90], ‘key2’: [11, 22, 33, 44, 55]}