一、寫代碼的時候少用全局變量。
①、不安全。因爲項目代碼可能由多人共同完成,全局變量容易被別人誤修改。
②、全局變量佔用系統內存。前端
二、函數有多個返回值(return)的時候,返回值是存放在元組裏,而後返回。
def hello(a,b,c,d):
return a,b,c,d
a = 2
b = 1
# b = 1 a = 2
# b,a = a,b #交換兩個變量的值
# print(a,b)
a = a + b #3
b = a - b #2
a = a - b #3-2java
三、列表推導式
nums = [1, 2, 3, 4, 5]
# 列表推導式
new_nums = [str(x) for x in nums] # 將nums的元素轉換成字符串
# new_nums = [x-1 for x in nums]
print(new_nums)python
四、一個函數儘可能指實現一個功能
實現一樣的功能,代碼越少,越牛逼linux
五、測試開發
開發工具、平臺
前端 後端 數據庫 部署 中間件git
自動化測試
經過寫代碼來作測試,提升測試效率
6.map和filter
#filter也是幫你循環調用函數的,filter只保存結果返回真的。
def func(a): #0 1 2
if a%2==0:
return True
else:
return False
nums = [x for x in range(11)]
res = filter(func,nums)
print(list(res))sql
#map
# all_res = []
# for num in nums:
# res = func(num)
# all_res.append(res)
#
# res = map(func,nums) #
#
# print(list(res))
#循環調用函數,而後把每次函數處理的結果,放到一個list裏面返回數據庫
7.函數即變量
def add():
print('添加商品')
def view():
print('查看商品')
def delete():
print('刪除商品')json
choice = input('請輸入選擇 一、二、三、').strip()windows
menu = {
'1':add,
'2':view,
'3':delete
}
if choice in menu:
menu[choice]() #適合用於函數沒有參數,或者參數是同樣的狀況下。
else:
print('輸入錯誤')後端
8.處理json
import json
#json串就是字符串。
d = {
'car':{'color':'red','price':100,'count':50},
'挨糞叉':{'color':'red','price':100,'count':50},
'挨糞叉1':{'color':'red','price':100,'count':50},
'挨糞叉2':{'color':'red','price':100,'count':50},
'挨糞叉3':{'color':'red','price':100,'count':50},
'挨糞叉4':{'color':'red','price':100,'count':50}
}
dumps
# res = json.dumps(d,indent=8,ensure_ascii=False) #把list、字典轉成json,indent多少縮進,ensure_ascii能夠顯示中文
# f1 = open('f1','w',encoding='utf-8')
# f1.write(res)
loads
# f1 = open('f1',encoding='utf-8')
# res = f1.read()
# dict_res = json.loads(res) #把json串變成python的數據類型
# print(dict_res)
dump
# f1 = open('f1','w',encoding='utf-8')
# json.dump(d,f1,ensure_ascii=False,indent=4)
#自動幫你寫入文件,第一個參數是數據,第二個是文件對象
load
f1 = open('f1',encoding='utf-8')
print(json.load(f1))
#自動幫你讀文件。
9.經常使用模塊
import os
# print(os.getcwd())#取當前工做目錄
# print(os.chdir("..")) # 更改當前目錄
# print(os.getcwd())#取當前工做目錄
# print(os.curdir) # 當前目錄,相對路徑
# print(os.pardir) # 父目錄,相對路徑
# print(os.mkdir("test1")) # 建立文件夾
# print(os.rmdir("test1")) # 只能刪除空文件夾
# print(os.remove("../day4/5.png")) # 刪除文件,不能刪文件夾。
# print(os.listdir('c://')) # 列出一個目錄下的全部文件
# os.rename("test", "test1") # 重命名
# print(os.stat("筆記.txt"))#獲取文件信息
# print(__file__) #__file__就是這個文件的絕對路徑
# print(os.path.abspath(__file__)) # 獲取絕對路徑
# print(os.path.split("c:\\usr\\hehe\\hehe.txt")) # 分割路徑和文件名
# print(os.path.dirname("c:\\usr\\hehe\\hehe.txt")) # 獲取父目錄
# print(os.path.basename("c:\\usr\\hehe\\hehe.txt")) # 獲取最後一級,若是是文件顯示文件名,若是是目錄顯示目錄名
# print(os.path.exists("c://test2")) # 目錄/文件是否存在
# print(os.path.isfile(r"E:\txz\day2.zip"))#判斷是不是一個文件
# print(os.path.isdir(r"E:\txz\day2"))#是不是一個文件夾
# name = 'a.sql'
# print(os.path.join("e",name))#拼接成一個路徑
# print(os.sep) # 當前操做系統的路徑分隔符
# print(os.linesep) # 當前操做系統的換行符
# print(os.pathsep) # 當前系統的環境變量中每一個路徑的分隔符,linux是:,windows是;
# print(os.environ) # 當前系統的環境變量
# print(os.name) # 當前系統名稱
# c://java/jre;c://python
# /usr/local:/root
#os.system('dir') #用來執行操做系統命令,只能執行,獲取不到結果
# res = os.popen('ipconfig') #用來執行操做系統命令,而且獲取到返回結果.read
# print(res.read())
#常量
import sys
# print(sys.path) #環境變量
# print(sys.platform) #看當前系統是什麼
# print(sys.version)#看python的版本
# print(sys.exit('程序退出'))
# quit('程序退出') #退出程序
# print('hahaha')
# def fun(a):
# pass
print(sys.argv) #是獲取運行python文件的時候 傳入的參數
#python xxx.py
隨機數模塊
import random,string
# print(random.randint(1,199))#1-199隨機取一個整數
# print(string.digits) #全部的數字0-9
# print(string.ascii_lowercase) #全部的小寫字母
# print(string.ascii_uppercase) #全部的大寫字母
# print(string.ascii_letters) #全部的小寫字母+全部的大寫字母
# print(string.punctuation) #全部的特殊字符
# s = random.choice(['ybq','mpp','zhx','df'])#隨機取一個元素
# s = random.choice()#隨機取一個元素
# res = random.sample(string.digits,3) #隨機取N個元素
# print(''.join(res))
# res = random.uniform(1,9)#取隨機小數??
# print(res)
# print(round(res,2))# 保留幾位小數,若是四捨五入以後,最後一位小數是0,那麼不顯示
#print(random.random()) #取0-1之間隨機小數
s = ['a','b','c','d','e']
random.shuffle(s) #洗牌,打亂順序,只能傳list
print(s)
加密模塊
import hashlib
# md5
ybm_pwd='yuanbapqingsdfs234FF234HF@F' #
m = hashlib.md5() #
bytes_ybq = ybm_pwd.encode()#把字符串轉成bytes類型
m.update(bytes_ybq) #加密,不能字符串,只能傳bytes類型,二進制
# print(m.hexdigest()) #加密後的結果
def md5_password(st:str):#限定了入參的類型,只能爲string類型
bytes_st = st.encode() #轉成二進制類型
m = hashlib.md5(bytes_st) #加密
return m.hexdigest() #返回加密後的結果
#
# sha_256 =hashlib.sha256(bytes_ybq)
# sha512 =hashlib.sha512(bytes_ybq)
# print(sha512.hexdigest())
# print(dir(m))
#md5加密是不可逆的,不能被解密的。
# MD5 md5AF
# 123456 f0dfb4c958c67903e542e31c729c629b
#撞庫
import base64
s='hahaha'
byte_s = s.encode() #字符串變成二進制
res = base64.b64encode(byte_s) #base64編碼
print(res.decode()) #把bytes轉成字符串。
jie_mi_res = base64.b64decode(res.decode()) #base64編碼
print(jie_mi_res.decode())
時間模塊
import time
# time.sleep(2) #等待幾秒
# 一、格式化好的時間 2018-1-14 16:42
# 二、時間戳 是從unix元年到如今全部的秒數
# 三、時間元組
# 想時間戳和格式化好的時間互相轉換的話,都要先轉成時間元組,而後才能轉
# print(int(time.time())) #當前時間戳
# cur_time = time.strftime('%Y-%m-%d %H:%M:%S')
# cur_time = time.strftime('%H%M%S') #取當前時間的格式化時間
# print(time.gmtime())#默認取標準時區的時間元組,若是傳入了一個時間戳,那麼就把這個時間戳轉換成時間元組。
# print(time.timezone) #和標準時間相差了幾個小時
# print(time.gmtime(1516005840)) #標準時區。
cur_time = time.localtime(1516005840) # 默認取當前時區的時間元組,若是傳入了一個時間戳,那麼就把這個時間戳轉換成時間元組。
res = time.strftime('%Y-%m-%d %H:%M:%S', cur_time)
def timestampToStr(time_strmp, format='%Y%m%d%H%M%S'):
# 時間戳轉格式化好的時間
cur_time = time.localtime(time_strmp) # 時間戳轉成時間元組
res = time.strftime(format, cur_time) # 再把時間元組轉成格式化好的時間
return res
def strToTimestamp(time_st, format='%Y%m%d%H%M%S'):
# 20181128113859
# 這個函數是格式化好的時間,轉時間戳的
t = time.strptime(time_st, format) # 把格式化好的時間轉成時間元組
res = time.mktime(t) # 時間元組轉成時間戳
return res
# 86400 * 3
# 32342 - 86400 * 3
10.內置函數
print(all([1,2,3,4]))#判斷可迭代的對象裏面的值是否都爲真
print(any([0,1,2,3,4]))#判斷可迭代的對象裏面的值是否有一個爲真
print(bin(10))#十進制轉二進制
print(bool('s'))#把一個對象轉換成布爾類型
print(bytearray('abcde',encoding='utf-8'))#把字符串變成一個可修改的bytes
print(callable('aa'))#判斷傳入的對象是否可調用
print(chr(10))#打印數字對應的ascii
print(ord('b'))#打印字符串對應的ascii碼
print(dict(a=1,b=2))#轉換字典
print(dir(1))#打印傳入對象的可調用方法
print(eval('[]'))#執行python代碼,只能執行簡單的,定義數據類型和運算
print(exec('def a():pass'))#執行python代碼
print(filter(lambda x:x>5,[12,3,12,2,1,2,35]))#把後面的迭代對象根據前面的方法篩選
print(map(lambda x:x>5,[1,2,3,4,5,6]))
print(frozenset({1,2,3,3}))#定義一個不可修改的集合
print(globals())#返回程序內全部的變量,返回的是一個字典
print(locals())#返回局部變量
print(hash('aaa'))#把一個字符串哈希成一個數字
print(hex(111))#數字轉成16進制
print(max(111,12))#取最大值
print(oct(111))#把數字轉換成8進制
print(round(11.11,2))#取幾位小數
print(sorted([2,31,34,6,1,23,4]))#排序
dic={1:2,3:4,5:6,7:8}
print(sorted(dic.items()))#按照字典的key排序
print(sorted(dic.items(),key=lambda x:x[1]))#按照字典的value排序
__import__('decorator')#導入一個模塊
十一、常量 常量就是一個不會變的變量 常量名所有用大寫字母 NAME = WANGYAN