1. 程式人生 > >Python全棧(第一期)Day9

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]}