第4課:函數、模塊、集合

 1. 文件讀寫:b模式python

import requests 
url = 'http://www.nnzhp.cn/wp-content/uploads/2018/01/601a335c499837a995ae10867fc36101.png' 
img = requests.get(url).content f = open('hhh.jpg', 'wb') # bytes:以二進制模式打開,有wb、rb、ab組合
f.write(img) 

   拓展:git

f = open('haha.txt','w')
f.write('test')
# 不加下面這個這句,有時會在文件中看不到寫入的數據,是由於有緩衝區,它會等緩衝區數據存儲到必定的值纔會寫入到磁盤
f.flush() #當即把緩衝區的內容寫到磁盤裏面。
time.sleep(50)

with open('b.txt') as f,open('c.txt') as fc:#自動關文件指針;一個with能夠打開多個文件,逗號隔開便可。
  f.write('aaa')

2.  修改文件的2種方式:windows

# 粗暴直接,適用於小文件,內容少
with open('geci','a+',encoding='utf-8') as f:
    f.seek(0)
    all = f.read()
    new_all = all.replace('二','一')
    f.seek(0)
    f.truncate()
    f.write(new_all)
    f.flush()
# 替換一個文件中的內容,直接修改文件很差實現,通常把修改後的文件內容保存到bak文件,刪除原來文件,rename bak文件。
# .**文件是隱藏文件
with open('geci.txt', 'r+', encoding='utf-8') as f, open('.geci.bak', 'w', encoding='utf-8') as ff:
    for i in f:
        newline = i.replace('一', '二')
        ff.write(newline)
os.remove('geci.txt')
os.rename('.geci.bak', 'geic.txt')

3.  函數函數

# 函數:就是把一堆代碼組合到一塊兒,變成一個總體
# 提升代碼的複用性
# def hello(filename,content): 這種是位置參數,必填參數
# def hello(filename,content='ceshi'): # 默認值參數,非必填
def hello(filename,content=''): #形參
    with open(filename,'a+',encoding='utf-8') as f:
        if content:
            f.write(content)
        else:
            f.seek(0)
            res = f.read()
            return res

print(hello('demo.txt')) #實參
# return 當即結束函數 print(hello('demo.txt','1243')) #函數沒有寫return的話,返回值是None,返回值不是必須寫的,須要獲取函數返回值再寫 a = 100

  可變參數性能

# 可變參數,*args
def test(a,b=1,*args):
    # print("a",a)
    # print("b", b, type(b))
    print('args',args)
test("haha")
# 若是後面有多餘的參數,會把它保存到args元組中
test("haha",'22','1','2')

  關鍵字參數學習

# 關鍵字參數
def test2(a, **kwargs):
    print('a:',a)
    print(kwargs)
test2(a=1,name='test') # {'name': 'test'}

  練習題測試

print('-1'.isdigit())  # 判斷一個字符串是不是純數字
# 1.寫一個校驗字符串是否爲合法的小數
# 0.88
# -0.99

def check_float(num):
    str_num = str(num)
    print("str_num:",str_num)
    if str_num.count('.') == 1:
        left = str_num.split('.')[0]
        right = str_num.split('.')[1]
        print("left %s;right %s" % (left,right))
        if left.isdigit() and right.isdigit():  # 正小數
            return True
        elif left.startswith('-') and left.count('-') == 1:
            if left.split('-')[-1].isdigit() and right.isdigit():
                return True
    return False
print(check_float('-1.-1'))  # 這裏若是直接傳float型數字,傳參過程當中會自動給把數字給你轉型。

4.  模塊url

# 一個Python文件就是一個模塊
# 1.標準模塊
#   python自帶的,不須要安裝
# 2.第三方模塊
#   手動安裝
#   # 首先下載安裝包
#       解壓
#       在命令行裏面進入到這個解壓以後的目錄(windows下如何快速進入cmd命令窗口:按住shift+右鍵:在此處打開命令窗口)
#       執行python setup.py install
#
# 3.本身寫的python文件
# import xx 導入一個文件的實質:把這個python文件運行一次
# import hahaha
# import 導入文件時,首先從當前目錄下找這個文件
# 而後從python的環境變量中尋找
# 環境變量是讓在任何目錄下都能使用這個命令
import sys
print(sys.path)  # 查看系統的環境變量,在pycharm下執行這句,會把工程根目錄也打印出來,這是pycharm自動加上的。

5.  遞歸spa

# 遞歸:本身調用本身
count = 0


def test1():
    global count
    count += 1
    # num = 8
    # num = int(input('please enter a number:'))
    # if num%2==0:# 判斷輸入的數字是否是偶數
    #    return True # 若是是偶數的話,程序就退出了,返回true
    print('不是偶數請從新輸入!')
    return test1()  # 若是不是偶數的話繼續調用本身,輸入值
print(test1())  # 調用test
# 用遞歸能實現的用循環都能實現,但最好不用遞歸,效率較低。
# 遞歸最多遞歸999次

6.  集合命令行

# 集合,天生去重
# 集合的做用:
# 一、它能夠把一個列表中重複的數據去掉,而不須要你再寫判斷
# 二、能夠作關係測試,好比說有兩個班,一個性能測試班,一個是接口測試班的,想找出來既學習了性能又學習了接口測試的同窗,就能夠用集合

li = [2, 3, 1, 2, 3, 4]
s_list = set(li)  # 這樣就定義了一個集合
set1 = set([1, 3, 4, 5, 6])  # 這種方式和上面的都是把list轉換成一個集合
set2 = {'hehe', 'hehe1', 'hehe3'}  # 直接定義一個集合

s = set()
s2 = {'1', '2', '3', '4'}
# 集合是無序的,沒有辦法經過下標取值
s2.add('5')
s2.add('1')
s3 = {'1', '2'}
print(s2.intersection(s3))  # 取交集,生成了1個新的集合,不會修改原來的集合
print(s2)
print(s3)
# print(s3 & s2)  # 取交集
#
# print(s3.union(s2))  # 取並集
# print(s3 | s2)  # 取並集
#
# print(s2.difference(s3))  # 在s2中存在,在s3中不存在
# print(s2 - s3)  # 取差集
相關文章
相關標籤/搜索