python内置函数和推导式
1. 匿名函数
-
匿名函数,则是基于lambda表达式实现定义一个可以没有名字的函数
data_list = [ lambda x:x+100, lambda x:x+110, lambda x:x+120 ] print( data_list[0] ) -
参数,支持任意参数。
-
函数体,只能支持单行的代码。
-
返回值,默认将函数体单行代码执行的结果返回给函数的执行这。
2. 三元运算
func = lambda x: "大了" if x > 66 else "小了"
3. 生成器
在内存中创建很多数据时,可以想着用基于生成器来实现一点一点生成
-
生成器函数,但函数中有yield存在时,这个函数就是生产生成器函数。
-
生成器对象,执行生成器函数时,会返回一个生成器对象。
点击查看代码
def func():
print(111)
v1 = yield 1
print(v1)
print(222)
v2 = yield 2
print(v2)
print(333)
v3 = yield 3
print(v3)
print(444)
data = func()
n1 = data.send(None)
print(n1)
n2 = data.send(666)
print(n2)
n3 = data.send(777)
print(n3)
n4 = data.send(888)
print(n4)
4.内置函数
5.推导式
data_list = data for data in range(5)
可以生成列表、集合、字典、元组
元组不是直接生成元组,是生成器,可以遍历其中的元素
6. 推导式支持嵌套
data = [ [i, j] for j in range(5) for i in range(10)]
7. 自定义模块
在Python中一般对文件和文件的称呼(很多开发者的平时开发中也有人都称为模块)
-
一个py文件,模块(module)。
-
含多个py文件的文件夹,包(package)。
注意:在包(文件夹)中有一个默认内容为空的__init__.py的文件,一般用于描述当前包的信息(在导入他下面的模块时,也会自动加载)。
-
py2必须有,如果没有导入包就会失败。
-
py3可有可无。
在Python内部默认设置了一些路径,导入模块或包时,都会按照指定顺序逐一去特定的路径查找。也可以自动手动在sys.path中添加指定路径
查看模块路径
import sys
print(sys.path)
不能和内置和第三方的同名
python3.9 -m pip install --upgrade pip # 更新pip
pip3.9 config set global.index-url https://pypi.douban.com/simple/ # 设置下载源
Writing to /Users/wupeiqi/.config/pip/pip.conf
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/
8. 内置模块(一)
os
点击查看代码
import os
# 1. 获取当前脚本绝对路径
"""
abs_path = os.path.abspath(__file__)
print(abs_path)
"""
# 2. 获取当前文件的上级目录
"""
base_path = os.path.dirname( os.path.dirname(路径) )
print(base_path)
"""
# 3. 路径拼接
"""
p1 = os.path.join(base_path, 'xx')
print(p1)
p2 = os.path.join(base_path, 'xx', 'oo', 'a1.png')
print(p2)
"""
# 4. 判断路径是否存在
"""
exists = os.path.exists(p1)
print(exists)
"""
# 5. 创建文件夹
"""
os.makedirs(路径)
"""
"""
path = os.path.join(base_path, 'xx', 'oo', 'uuuu')
if not os.path.exists(path):
os.makedirs(path)
"""
# 6. 是否是文件夹
"""
file_path = os.path.join(base_path, 'xx', 'oo', 'uuuu.png')
is_dir = os.path.isdir(file_path)
print(is_dir) # False
folder_path = os.path.join(base_path, 'xx', 'oo', 'uuuu')
is_dir = os.path.isdir(folder_path)
print(is_dir) # True
"""
# 7. 删除文件或文件夹
"""
os.remove("文件路径")
"""
"""
path = os.path.join(base_path, 'xx')
shutil.rmtree(path)
"""
walk,查看目录下所有的文件(含子孙文件)
点击查看代码
import os
"""
data = os.listdir("/Users/wupeiqi/PycharmProjects/luffyCourse/day14/commons")
print(data)
# ['convert.py', '__init__.py', 'page.py', '__pycache__', 'utils.py', 'tencent']
"""
"""
要遍历一个文件夹下的所有文件,例如:遍历文件夹下的所有mp4文件
"""
data = os.walk("/Users/wupeiqi/Documents/视频教程/路飞Python/mp4")
for path, folder_list, file_list in data:
for file_name in file_list:
file_abs_path = os.path.join(path, file_name)
ext = file_abs_path.rsplit(".",1)[-1]
if ext == "mp4":
print(file_abs_path)
shutil
点击查看代码
import shutil
# 1. 删除文件夹
"""
path = os.path.join(base_path, 'xx')
shutil.rmtree(path)
"""
# 2. 拷贝文件夹
"""
shutil.copytree("/Users/wupeiqi/Desktop/图/csdn/","/Users/wupeiqi/PycharmProjects/CodeRepository/files")
"""
# 3.拷贝文件
"""
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/")
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/x.png")
"""
# 4.文件或文件夹重命名
"""
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/xxxx.png")
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/files","/Users/wupeiqi/PycharmProjects/CodeRepository/images")
"""
# 5. 压缩文件
"""
# base_name,压缩后的压缩包文件
# format,压缩的格式,例如:"zip", "tar", "gztar", "bztar", or "xztar".
# root_dir,要压缩的文件夹路径
"""
# shutil.make_archive(base_name=r'datafile',format='zip',root_dir=r'files')
# 6. 解压文件
"""
# filename,要解压的压缩包文件
# extract_dir,解压的路径
# format,压缩文件格式
"""
# shutil.unpack_archive(filename=r'datafile.zip', extract_dir=r'xxxxxx/xo', format='zip')
sys
# 2. 导入模块路径
"""
print(sys.path)
"""
random
点击查看代码
import random
# 1. 获取范围内的随机整数
v = random.randint(10, 20)
print(v)
# 2. 获取范围内的随机小数
v = random.uniform(1, 10)
print(v)
# 3. 随机抽取一个元素
v = random.choice([11, 22, 33, 44, 55])
print(v)
# 4. 随机抽取多个元素
v = random.sample([11, 22, 33, 44, 55], 3)
print(v)
# 5. 打乱顺序
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(data)
print(data)
json
res = json.dumps(data, ensure_ascii=False) # 序列化数据
data_list = json.loads(data_string) # 反序列化
实例
点击查看代码
import json
import requests
url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=5&page_start=20"
res = requests.get(
url=url,
headers={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}
)
# json格式
print(res.text)
# json格式转换为python数据类型
data_dict = json.loads(res.text)
print(data_dict)
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
其他类型转换json
点击查看代码
import json
from decimal import Decimal
from datetime import datetime
data = [
{"id": 1, "name": "wq", "age": 18, 'size': Decimal("18.99"), 'ctime': datetime.now()},
{"id": 2, "name": "www", "age": 18, 'size': Decimal("9.99"), 'ctime': datetime.now()},
]
class MyJSONEncoder(json.JSONEncoder):
def default(self, o):
if type(o) == Decimal:
return str(o)
elif type(o) == datetime:
return o.strftime("%Y-%M-%d")
return super().default(o)
res = json.dumps(data, cls=MyJSONEncoder)
print(res)
时间处理
time
v1 = time.time() # 获取时间戳
time.sleep(5) # 停止n秒,再执行后续的代码。
datetime
点击查看代码
from datetime import datetime, timezone, timedelta
v1 = datetime.now() # 当前本地时间
v2 = v1 + timedelta(days=140, minutes=5)
print(datetime.now().strptime("1990-05-12", '%Y-%m-%d')) # 1990-05-12 00:00:00 转换字符串时间为datetime
v = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 2021-08-10 转换当前时间为字符串格式
# 时间戳格式 --> 转换为datetime格式
ctime = time.time() # 11213245345.123
v1 = datetime.fromtimestamp(ctime)
# datetime格式 ---> 转换为时间戳格式
v1 = datetime.now()
val = v1.timestamp()
实例:用户注册,将用户信息写入Excel,其中包含:用户名、密码、注册时间 三列。
点击查看代码
import os
import hashlib
from datetime import datetime
from openpyxl import load_workbook
from openpyxl import workbook
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
FILE_NAME = "db.xlsx"
def md5(origin):
hash_object = hashlib.md5("sdfsdfsdfsd23sd".encode('utf-8'))
hash_object.update(origin.encode('utf-8'))
return hash_object.hexdigest()
def register(username, password):
db_file_path = os.path.join(BASE_DIR, FILE_NAME)
if os.path.exists(db_file_path):
wb = load_workbook(db_file_path)
sheet = wb.worksheets[0]
next_row_position = sheet.max_row + 1
else:
wb = workbook.Workbook()
sheet = wb.worksheets[0]
next_row_position = 1
user = sheet.cell(next_row_position, 1)
user.value = username
pwd = sheet.cell(next_row_position, 2)
pwd.value = md5(password)
ctime = sheet.cell(next_row_position, 3)
ctime.value = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
wb.save(db_file_path)
def run():
while True:
username = input("请输入用户名:")
if username.upper() == "Q":
break
password = input("请输入密码:")
register(username, password)
if __name__ == '__main__':
run()
本文来自博客园,作者:wq512,转载请注明原文链接:https://www.cnblogs.com/wangqi512/p/15124850.html

浙公网安备 33010602011771号