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.内置函数

Python3 内置函数 | 菜鸟教程 (runoob.com)

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()
 ​

 

posted @ 2021-08-10 17:11  wq512  阅读(66)  评论(0)    收藏  举报