print(all([0, 2, 3, 4])) # False,判斷可迭代的對象裏面的值是否都爲真
print(any([0, 1, 2, 3, 4])) # True 判斷可迭代的對象裏面的值是否有一個爲真
print(bin(100), type(bin(100))) # 0b1100100 <class 'str'> 十進制轉二進制,二進制前有0b,若是想去掉,用以下方法:
ejz = bin(100)
print(ejz.replace('0b', ''), type(ejz.replace('0b', ''))) # 1100100 <class 'str'>
print(bool('s')) # 把一個對象轉換成布爾類型
print(bytearray('abcde', encoding='utf-8')) # 把字符串變成一個可修改的bytes,什麼狀況下會用到呢???
'''
print(callable('aa'))
# 1. 判斷傳入的對象是否可被調用,可被調用是指可否使用()(括號)的方法調用
# 2. 可調用對象,在實際調用也可能調用失敗;可是不可調用對象,調用確定不成功。
# 3. 類對象都是可被調用對象,類的實例對象是否可調用對象,取決於類是否認義了__call__方法。
# >>> callable(1)
# False
# >>> 1()
# Traceback (most recent call last):
# File "<pyshell#5>", line 1, in <module>
# 1()
# TypeError: 'int' object is not callable
# >>> class A: # 定義類A
# pass
#
# >>> callable(A) # 類A是可調用對象
# True
# >>> a = A() # 調用類A
# >>> callable(a) # 實例a不可調用
# False
# >>> a() # 調用實例a失敗
# Traceback(most recent call last): File "<pyshell#31>", line 1, in < module > a()
# TypeError: 'A'
# object is not callable
#
# >>> class B: # 定義類B
# def __call__(self):
# print('instances are callable now.')
# >>> callable(B) # 類B是可調用對象
# True
# >>> b = B() # 調用類B
# >>> callable(b) # 實例b是可調用對象
# True
# >>> b() # 調用實例b成功
# instances are callable now.
'''
print(chr(65)) # A 打印數字對應的ascii
print(ord('A')) # 65 打印字符對應的ascii碼
print(dict(a=1, b=2)) # {'a': 1, 'b': 2} 轉換字典
print(dir(1)) # 打印傳入對象的可調用方法 ,通常只看不帶__的方法,或屬性
# print(eval('[]')) # 執行python代碼,只能執行簡單的運算
# code = '1+1'
# print(eval(code))
# print(exec('def a():pass')) # 執行python代碼
code = '''
def a():
print('aa')
a()'''
print(exec(code)) # 結果中有None是由於exec(code)沒有返回值,因此輸出None
# 結果是
# aa
# None
'''
# zip() # 把可迭代對象(如list)結合在一塊兒,以短的list爲準
ids = [1, 2, 3, 4]
names = ['小黑', '小白', '小黃']
# for idd, name in ids, names: # 這種寫法會報錯
for idd, name in zip(ids, names):
print(idd, name)
結果:
1 小黑
2 小白
3 小黃
print(map(lambda x: x > 5, [1, 2, 3, 4, 5, 6]))
# map:循環調用函數,處理結果保存在map對象中,能夠用list(map對象)查看返回結果
# 使用map高級些
# 一樣的功能,代碼越少越牛逼
def func(a):
if a % 2 == 0:
return a
# return True
else:
return False
# return True [0, True, 2, True, 4, True, 6, True, 8, True, 10]
nums = [x for x in range(11)]
res = map(func, nums) # 參數只有這兩個
print(list(res))
# 等價於
all_res = []
for num in nums:
res = func(num)
all_res.append(res)
print(filter(lambda x: x > 5, [12, 3, 12, 2, 1, 2, 35])) # 把後面的迭代對象根據前面的方法篩選
# filter:循環調用函數,只保存返回結果爲真的
res = filter(func, nums)
# print(list(res)) # return a時,[2, 4, 6, 8, 10] 沒有0,是由於return 0 ,0也是假,因此未返回
print(list(res)) # return b時,[0, 2, 4, 6, 8, 10]
'''
print(frozenset({1, 2, 3, 3})) # 定義一個不可修改的集合
print(globals()) # 返回程序內全部的全局變量,返回的是一個字典
print(locals()) # 返回局部變量
print(hash('aaa')) # 把一個字符串哈希成一個數字
print(hex(111)) # 0x6f 數字轉成16進制
print(max(111, 12)) # 111 取最大值
print(oct(111)) # 0o157 把數字轉換成8進制
print(round(11.111111, 2)) # 11.11 取幾位小數
print(format(11.11111, '0.2f')) # 11.11
print(sorted([2, 31, 34, 6, 1, 23, 4], reverse=True)) # 排序,默認升序,把reverse的值賦爲True,降序排列
'''
# 函數若是有多個return值,那麼會把這幾個return的值都放到一個元組裏面,而後返回
def hello(a, b, c, d):
return a, b, c, d
print(hello('1', '2', '3', '4')) # ('1', '2', '3', '4')
# 列表推導式
nums = [0, 1, 2, 3, 4]
new_nums = [str(x) for x in nums]
print(new_nums) # ['0', '1', '2', '3', '4']
'''
# json:一種通用的數據類型
import 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},
}
# json.dumps()將list dict轉化爲json串
res = json.dumps(d, indent=4, ensure_ascii=False)
# fi = open('f.txt', 'w', encoding='utf-8')
# fi.write(res)
# json文件中必須用"",不能用'',不然會報錯
# f1 = open('f.txt', 'w', encoding='utf-8')
# 自動將json串寫入文件中
# json.dump(d, f1, indent=4, ensure_ascii=False)
f1 = open('f.txt', encoding='utf-8')
# 自動將從文件讀取的json串轉化爲python對象
res = json.load(f1)
print(res, type(res))
import os
# .表明當前路徑,..表明上一級路徑
# print(os.getcwd()) # 獲取當前工做目錄#
# os.chmod("/usr/local", 7) # 給文件/目錄加權限
# print(os.chdir("../")) # 更改當前目錄
# print(os.curdir) # 當前目錄
# print(os.pardir) # 父目錄
# print(os.makedirs("/usr/hehe/hehe1")) # 遞歸建立文件夾,父目錄不存在時建立父目錄
# print(os.removedirs("/usr/hehe/hehe1")) # 遞歸刪除空目錄
# print(os.mkdir("test1")) # 建立文件夾
# print(os.rmdir("test1")) # 刪除指定的空文件夾
# print(os.remove("test")) # 刪除文件
# print(os.listdir('.')) # 列出一個目錄下的全部文件
# os.rename("test", "test1") # 重命名
# print(os.stat("筆記")) # 獲取文件信息
# print(os.sep) # 當前操做系統的路徑分隔符
# print(os.linesep) # 當前操做系統的換行符
# print(os.pathsep) # 當前系統的環境變量中每一個路徑的分隔符,linux是:,windows是;
# print(os.environ) # 當前系統的環境變量
# print(os.name) # 當前系統名稱
# print(__file__) # 獲取當前文件的絕對路徑 D:/PyCharmWorkspace/bcClassExercises/day5/經常使用模塊.py
# print(os.path.abspath(__file__)) # 獲取絕對路徑 D:\PyCharmWorkspace\bcClassExercises\day5\經常使用模塊.py
# print(os.path.split("/usr/hehe/hehe.txt")) # 分割路徑和文件名 ('/usr/hehe', 'hehe.txt')
# print(os.path.split(r'D:\haha\1.txt')) # ('D:\\haha', '1.txt')
# print(os.path.dirname("/usr/local")) # 獲取父目錄
# print(os.path.basename("/usr/local")) # 獲取最後一級,若是是文件顯示文件名,若是是目錄顯示目錄名
# print(os.path.exists("/usr/local")) # 判斷目錄/文件是否存在
# print(os.path.isabs(".")) # 判斷是不是絕對路徑
# print(os.path.isfile("/usr/local")) # 判斷是不是一個文件
# print(os.path.isdir("/usr/local")) # 是不是一個路徑
# print(os.path.join(r"\root", 'hehe', 'a.sql')) # 拼接爲一個路徑(自動加上\),拼的個數沒有限制
# os.system('notepad') # 執行系統命令
# print(os.path.getatime("len_os.py")) # 輸出最近訪問時間
# print(os.path.getmtime("len_os.py")) # 輸出最近訪問時間
# os.popen('cmd') 返回的是文件的對象(默認模式r,還能夠是w),對其進行讀取read()就能夠看到輸出內容了
# res = os.popen('ipconfig').read() # 執行系統命令,並獲取返回結果
# print(res)
# import sys
# print(sys.platform) # 查看當前系統是什麼 windows的話都是打印win32
# print(sys.version) # 查看python的版本
# # 獲取運行Python文件時,傳入的參數
# print(sys.argv) # 命令行參數List,第一個元素是程序自己路徑
# sys.exit(n) # 退出程序,正常退出時exit(0)
# quit("程序退出")
# sys.version # 獲取Python解釋程序的版本信息
# sys.maxint # 最大的Int值
# sys.path # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
# sys.platform # 返回操做系統平臺名稱
# sys.stdout.write('please:') # 向屏幕輸出一句話
# val = sys.stdin.readline()[:-1] # 獲取輸入的值
import time
# time.sleep(1) # 等待幾秒
# 1. 格式化好的時間 2018-1-14 16:42
# 2. 時間戳,是從unix元年到如今的全部秒數
# print(int(time.time())) # 當前時間戳
# cur_time = time.strftime('%Y:%m:%d %H:%M:%S') # 獲取當前時間的格式化時間字符串
# print(cur_time)
#
#
# print(time.gmtime()) # # 默認獲取標準時區的時間元組,若是傳入了一個時間戳,那麼把這個時間戳轉化爲時間元組
# print(time.gmtime(1516005840)) # 取的標準時區
# print(time.timezone) # 和標準時間相差了幾個小時
# print(time.localtime()) # 默認獲取當前時區的時間元組,若是傳入一個時間戳,那麼把這個時間戳轉化爲時間元組
#
res = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1515686400))
print(res)
# 把格式化好的時間轉化爲時間戳
t = time.strptime('20180112', '%Y%m%d') # 將參數string按第二個參數format解析爲時間元組
print(time.mktime(t)) # 將時間元組轉化爲時間戳
# 一天的秒數:86400s
# 32342 + 86400*3 or 32342 - 86400*3
# 經過時間戳的加減能夠獲取幾天前幾天後的時間
import random
import string
'''
print(type(string.digits)) # 全部的數字0-9 字符串類型
print(string.ascii_lowercase) # 全部的小寫字母
print(string.ascii_uppercase) # 全部的大寫字母
print(string.ascii_letters) # 全部的大寫字母和小寫字母
print(string.punctuation) # 全部的特殊字符
print(random.randint(1, 999)) # 1-999隨機取一個整數
print(random.choice(['1', '2', '3', '4'])) # 隨機取一個元素,參數是可迭代對象
res = random.sample(string.digits, 3)
print(res)
print(''.join(res))
'''
# 回頭查查資料,數字的格式化輸出
# random.uniform(1, 9)
res = format(random.uniform(1, 9), '.2f') # 取隨機小數
# res = random.uniform(1, 9) # 取隨機小數
print(res)
'''
# 5.03203 保留幾位小數,四捨五入,若是四捨五入後最後一位小數爲0,不顯示
# 1.9027236450716112
# 1.9
print(round(res, 2))
print(random.random()) # 取0-1之間的隨機小數
s = ['a', 'b', 'c', 'd']
random.shuffle(s) # 洗牌,打亂順序,參數必須爲list
print(s)
'''
import hashlib
# md5
pwd = 'b'
m = hashlib.md5() # 新建一個md5對象
# print(dir(m)) # 打印對象全部的屬性和方法
pwd.encode() # 將字符串轉成bytes類型
m.update(pwd.encode()) # update() 加密,不能傳字符串,只能傳二進制bytes類型
print(m.hexdigest()) # 加密後的結果
def md5_passwd(st:str): # 限定入參類型,只能是string類型
bytess = st.encode()
m = hashlib.md5(bytess)
return m.hexdigest()
res = md5_passwd('1')
print(res)
# md5加密是不可逆的,不能被解密的。
# MD5 md5AF
# 123456 f0dfb4c968
# 撞庫
# 另一種加密方式
sha_256 = hashlib.sha3_256()
import base64
# base64
s = 'hahaha'
bytes_s = s.encode()
res = base64.b64encode(bytes_s)
print(res)
print(res.decode()) # 把bytes類型轉成字符串
jie_mi_res = base64.b64decode(res)
print(jie_mi_res.decode())