[7天速成Python——第六天]

[7天速成Python——第六天]

各位小伙伴想要博客相关资料的话,关注公众号:chuanyeTry即可领取相关资料!

6 函数进阶

今日概要:

  • 函数名就是一个变量(扩展)
  • 匿名函数 lambda 表达式
  • 内置函数(内置的很多功能)
  • 推导式(一行代码生成数据)

1.函数名就是变量

def func():
    pass

v1 = func

func()
v1()
def func():
    return 123

data_list = [11,22,True,"123456","中国联通", func, func() ]

data_list[-2]()
def send_sms():
    print("发送短信报警")
    
def send_email():
    print("发送邮件报警")
    
def send_dingding():
    print("发送钉钉报警")
    
def send_wechat():
    print("发送微信报警")

    
func_list = [ send_sms, send_email, send_dingding, send_wechat ]
for item in func_list:
    item()
def register():
    pass

def login():
    pass

def show_users():
    pass

print("欢迎xx系统")
print("1.注册;2.登录;3.查看所有用户")

choice = input("请选择序号:")
choice = int(choice)

func_list = [ register, login, show_users ]
# func_list[0]()
# func_list[1]()
# func_list[2]()
func_list[ choice-1 ]()

让函数当做字典的值。

def func():
    return 123

func_dict = {
    "11":func,
    "22":func,
    "33":func
}

# 获取函数并执行
# func_dict["11"]()
# func_dict["22"]()

# 获取函数并执行
func_object = func_dict.get("22")
if func_object == None:
    print("函数不存在")
else:
    func_object()

案例1

用户登录系统显示:1.登录;2.注册;3.查询,让用户选择序号,选择对应的序号,然后根据序号找到对应的函数并执行。

def login():
    pass

def register():
    pas
    
def query():
    pass

func_dict = {
    "1":login,
    "2":register,
    "3":query
}

choice = input("请输入序号:")
data = func_dict.get(choice)  # None、函数
if not data:
    print("序号输入错误")
else:
    data()

案例2

资源下载管理器,系统有三大专区:图片专区、NBA专区、短视频专区。

  • 每个专区定义一个函数。

  • 用户去选择

    • 选择对了进入专区。
    • 选择多了重复选择(错误提示)。
    • 用户选择试输入是 Q/q,终止程序。
  • 图片专区(NBA和短视频专区功能相同)

    • 罗列出来所有的序号和图片。
    • 让用户选择序号,用户选择那个序号,
      • 则内部帮用户把这个图片下载下来。【后续再下载】
      • 输出,用户当前选择的那个选择:标题 + URL
    • 再次提示用户输入是否继续(n/N),返回上一级(让用户重新选择专区)。
  • 数据

    • 图片

      image_dict = {
          "1": ("吉他男神", "https://hbimg.huabanimg.com/51d46dc32abe7ac7f83b94c67bb88cacc46869954f478-aP4Q3V"),
          "2": ("漫画美女", "https://hbimg.huabanimg.com/703fdb063bdc37b11033ef794f9b3a7adfa01fd21a6d1-wTFbnO"),
          "3": ("游戏地图", "https://hbimg.huabanimg.com/b438d8c61ed2abf50ca94e00f257ca7a223e3b364b471-xrzoQd"),
          "4": ("alex媳妇", "https://hbimg.huabanimg.com/4edba1ed6a71797f52355aa1de5af961b85bf824cb71-px1nZz"),
      }
      
    • NBA专区

      nba_dict = {
          "1": {
              "title": "威少奇才首秀三双",
              "url": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fc20000bvi413nedtlt5abaa8tg&ratio=720p&line=0"
          },
          "2": {
              "title": "塔图姆三分准绝杀",
              "url": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fb60000bvi0ba63vni5gqts0uag&ratio=720p&line=0"
          }
      }
      
    • 短视频

      video_dict = {
          "1": {
              "title": "东北F4模仿秀",
              'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch7lo53oog"
          },
          "2": {
              "title": "卡特扣篮",
              'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000bv52fpn5t6p007e34q1g"
          },
          "3": {
              "title": "罗斯mvp",
              'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f240000buuer5aa4tij4gv6ajqg"
          },
      }
      
def image():
    """ 图片专区 """
    print("========进入图片专区========")
    image_dict = {
        "1": ("吉他男神", "https://hbimg.huabanimg.com/51d46dc32abe7ac7f83b94c67bb88cacc46869954f478-aP4Q3V"),
        "2": ("漫画美女", "https://hbimg.huabanimg.com/703fdb063bdc37b11033ef794f9b3a7adfa01fd21a6d1-wTFbnO"),
        "3": ("游戏地图", "https://hbimg.huabanimg.com/b438d8c61ed2abf50ca94e00f257ca7a223e3b364b471-xrzoQd"),
        "4": ("alex媳妇", "https://hbimg.huabanimg.com/4edba1ed6a71797f52355aa1de5af961b85bf824cb71-px1nZz"),
    }
    msg_list = []
    for k, v in image_dict.items():
        ele = "{}.{}".format(k, v[0])
        msg_list.append(ele)
    msg_string = ";".join(msg_list)
    print(msg_string)

    while True:
        idx = input("请选择图片的序号(n/N):")
        if idx.upper() == "N":
            return
        item_tuple = image_dict.get(idx)
        if not item_tuple:
            print("\n序号不存在,请重新输入")
            continue
        title, url = item_tuple
        print(title, url)


def nba():
    """ NBA专区"""
    print("========进入NBA专区========")
    nba_dict = {
        "1": {
            "title": "威少奇才首秀三双",
            "url": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fc20000bvi413nedtlt5abaa8tg&ratio=720p&line=0"
        },
        "2": {
            "title": "塔图姆三分准绝杀",
            "url": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fb60000bvi0ba63vni5gqts0uag&ratio=720p&line=0"
        }
    }
    msg_list = []
    for k, v in nba_dict.items():
        ele = "{}.{}".format(k, v["title"])
        msg_list.append(ele)
    msg_string = ";".join(msg_list)
    print(msg_string)

    while True:
        idx = input("请选择序号(n/N):")
        if idx.upper() == "N":
            return
        item_dict = nba_dict.get(idx)
        if not item_dict:
            print("\n序号不存在,请重新输入")
            continue
        title, url = item_dict['title'], item_dict['url']
        print(title, url)


def video():
    """ 短视频专区 """
    print("========进入短视频专区========")
    video_dict = {
        "1": {
            "title": "东北F4模仿秀",
            'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch7lo53oog"
        },
        "2": {
            "title": "卡特扣篮",
            'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000bv52fpn5t6p007e34q1g"
        },
        "3": {
            "title": "罗斯mvp",
            'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f240000buuer5aa4tij4gv6ajqg"
        },
    }
    msg_list = []
    for k, v in video_dict.items():
        ele = "{}.{}".format(k, v["title"])
        msg_list.append(ele)
    msg_string = ";".join(msg_list)
    print(msg_string)

    while True:
        idx = input("请选择序号(n/N):")
        if idx.upper() == "N":
            return
        item_dict = video_dict.get(idx)
        if not item_dict:
            print("\n序号不存在,请重新输入")
            continue
        title, url = item_dict['title'], item_dict['url']
        print(title, url)


def run():
    """ 实现程序中的主要逻辑 """

    func_dict = {
        "1": image,
        "2": nba,
        "3": video
    }

    while True:
        print("------------专区--------------")
        print("1.图片专区; 2.NBA专区; 3.短视频专区")
        choice = input("请输入专区选项(q/Q):")
        if choice.upper() == "Q":
            return

        func = func_dict.get(choice)
        if not func:
            print("\n序号选择错误,请重新输入")
            continue
        # 用户选择正确,并执行函数
        func()

run()

下载的功能的实现:

title = "alex媳妇"
url = "https://hbimg.huabanimg.com/51d46dc32abe7ac7f83b94c67bb88cacc46869954f478-aP4Q3V"
  • 安装第三方的模块

    python安装目录/Scripts/pip.exe  install  requests
    
    "C:\python39\Scripts\pip.exe" install  requests
    
  • 基于第三方的模块来实现下载

    import requests
    
    # 1.下载图片(网络)
    res = requests.get(
        url="https://hbimg.huabanimg.com/51d46dc32abe7ac7f83b94c67bb88cacc46869954f478-aP4Q3V",
        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 FS"
        }
    )
    
    # 2.保存到本地
    file_object = open("a1.png", mode='wb')
    file_object.write(res.content)
    file_object.close()
    

大家的任务来了:

  • v2.py,已实现用户选择和获取 title和URL
  • download.py,单独下载脚本。

实现,用户选择 序号/图片/视频,下载并保存。

  • 图片, png为后缀
  • 视频,mp4为后缀
import requests


def download(url, file_name):
    """
    实现下载图片、视频
    :param url: 视频或图片的连接
    :param file_name: 文件名称
    :return:
    """
    # 1.下载图片(网络)
    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 FS"
        }
    )

    # 2.保存到本地
    file_object = open(file_name, mode='wb')
    file_object.write(res.content)
    file_object.close()


def image():
    """ 图片专区 """
    print("========进入图片专区========")
    image_dict = {
        "1": ("吉他男神", "https://hbimg.huabanimg.com/51d46dc32abe7ac7f83b94c67bb88cacc46869954f478-aP4Q3V"),
        "2": ("漫画美女", "https://hbimg.huabanimg.com/703fdb063bdc37b11033ef794f9b3a7adfa01fd21a6d1-wTFbnO"),
        "3": ("游戏地图", "https://hbimg.huabanimg.com/b438d8c61ed2abf50ca94e00f257ca7a223e3b364b471-xrzoQd"),
        "4": ("alex媳妇", "https://hbimg.huabanimg.com/4edba1ed6a71797f52355aa1de5af961b85bf824cb71-px1nZz"),
    }
    msg_list = []
    for k, v in image_dict.items():
        ele = "{}.{}".format(k, v[0])
        msg_list.append(ele)
    msg_string = ";".join(msg_list)
    print(msg_string)

    while True:
        idx = input("请选择图片的序号(n/N):")
        if idx.upper() == "N":
            return
        item_tuple = image_dict.get(idx)
        if not item_tuple:
            print("\n序号不存在,请重新输入")
            continue
        title, url = item_tuple

        file_name = "{}.png".format(title)
        download(url, file_name)


def nba():
    """ NBA专区"""
    print("========进入NBA专区========")
    nba_dict = {
        "1": {
            "title": "威少奇才首秀三双",
            "url": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fc20000bvi413nedtlt5abaa8tg&ratio=720p&line=0"
        },
        "2": {
            "title": "塔图姆三分准绝杀",
            "url": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fb60000bvi0ba63vni5gqts0uag&ratio=720p&line=0"
        }
    }
    msg_list = []
    for k, v in nba_dict.items():
        ele = "{}.{}".format(k, v["title"])
        msg_list.append(ele)
    msg_string = ";".join(msg_list)
    print(msg_string)

    while True:
        idx = input("请选择序号(n/N):")
        if idx.upper() == "N":
            return
        item_dict = nba_dict.get(idx)
        if not item_dict:
            print("\n序号不存在,请重新输入")
            continue
        title, url = item_dict['title'], item_dict['url']
        print(title, url)

        file_name = "{}.mp4".format(title)
        download(url, file_name)


def video():
    """ 短视频专区 """
    print("========进入短视频专区========")
    video_dict = {
        "1": {
            "title": "东北F4模仿秀",
            'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch7lo53oog"
        },
        "2": {
            "title": "卡特扣篮",
            'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000bv52fpn5t6p007e34q1g"
        },
        "3": {
            "title": "罗斯mvp",
            'url': "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f240000buuer5aa4tij4gv6ajqg"
        },
    }
    msg_list = []
    for k, v in video_dict.items():
        ele = "{}.{}".format(k, v["title"])
        msg_list.append(ele)
    msg_string = ";".join(msg_list)
    print(msg_string)

    while True:
        idx = input("请选择序号(n/N):")
        if idx.upper() == "N":
            return
        item_dict = video_dict.get(idx)
        if not item_dict:
            print("\n序号不存在,请重新输入")
            continue
        title, url = item_dict['title'], item_dict['url']

        file_name = "{}.mp4".format(title)
        download(url, file_name)


def run():
    """ 实现程序中的主要逻辑 """

    func_dict = {
        "1": image,
        "2": nba,
        "3": video
    }

    while True:
        print("------------专区--------------")
        print("1.图片专区; 2.NBA专区; 3.短视频专区")
        choice = input("请输入专区选项(q/Q):")
        if choice.upper() == "Q":
            return

        func = func_dict.get(choice)
        if not func:
            print("\n序号选择错误,请重新输入")
            continue
        # 用户选择正确,并执行函数
        func()


run()

2. lambda表达式(匿名函数)

在特定情况下,让我们的代码更简洁。

lambda表达式(匿名函数),我一行代码实现定义简单的函数。

def func():
    return 123


# func是函数名(变量)
# lamdab : 函数体,函数体中写了123,内部自动会执行一个return
func = lambda : 123

res = func()
print(res) # 123
def func(a1,a2):
    return a1 + a2

func = lambda a1,a2 : a1 + a2
res = func(100,200)
print(res) # 300
def func(data_string):
    return data_string.upper()

func = lambda data_string : data_string.upper()
res = func("root")
print(res) # "ROOT"
def func(data_list):
    return data_list[0]

func = lambda data_list : data_list[0]
res = func([11,22,33,44])
print(res) # 11

注意注意注意:

  • lambda内部自动return
  • return后面到底生成的是什么?返回的就是什么。
data = []
v1 = data.append(123)  # None,append是python内部定义的函数,执行函数,内部没有返回值。
v2 = data.append(1456) # None
def func(data_list):
    return data_list.append(999)

res = func([11,22,33])
print(res) # None
func = lambda data_list : data_list.append(123)

value = func([11,22,33])
print(value) # None

练习题

data = "root"

# 调用upper函数,会生一个ROOT并返回。
v1 = data.upper()
print(v1)
data = []
data.append(111)
f1 = lambda data: data.replace("中国","广西")

res = f1("中国联通")

print(res) # 广西联通
f2 = lambda v1,v2: v1.insert(0,v2)

res = f2([11,22],99)
print(res) # None
f3 = lambda name : name.split("-")[1]

res = f3("day01-11-python基础入门-第一篇.mp4")
print(res) # "11"
f3 = lambda name : int( name.split("-")[1] )
res = f3("day01-11-python基础入门-第一篇.mp4")
print(res) # 11

3. 函数做参数

def do():
    print("do")

def func(a1,a2):
    print(a1)
    a2()

func( 11 , do )
11
do

注意:一般情况下少用。

def do():
    print("do")

def func(a1,a2):
    print(a1)
    res = a2()
    print(res)
    return 123

v1 = func( 11 , do )
print(v1)
11
do
None
123

4.内置函数

Python内部为我们已写好的函数,我们可以直接拿来用,不需要自己再编写了。

data = abs(-10)
print(data)
abs = 123123

data = abs(-10) # 报错

4.1 第1组(5)

  • abs,绝对值

    data = abs(-10)
    print(data) # 10
    
  • pow,次方

    data = pow(2,5)   # 获取2的5次方
    print(data)
    
  • sum,求和

    num_list = [1,2,10,20]
    res = sum( num_list )
    print(res) # 求和
    
  • divmod,商和余数

    v1,v2 = divmod(92,10)
    print(v1) # 9
    print(v2) # 2
    
  • round,保留小数点后几位

    data = round(3.14134,2)
    print(data) # 3.14
    

4.2 第2组(4)

  • min,求最小值

    data = [11,22,-19,99,10]
    res = min(data)
    print(res)
    
  • max,求最大值

    data = [11,22,-19,99,10]
    res = max(data)
    print(res)
    
  • all,是否所有元素转换成布尔值都是True

    data = [1,-1,88,9]
    v1 = all(data)
    print(v1) # True
    
    data = [1,-1,88,0,9]
    v1 = all(data)
    print(v1) # False
    
    data = [1,-1,88,"",9]
    v1 = all(data)
    print(v1) # False
    
    v1 = input("用户名:")
    v2 = input("密码:")
    is_valid = all( [v1,v2] )
    if is_valid:
        print("都不为空")
    else:
        print("用户名或密码为空")
    
  • any,只要有转换为布尔值为True

    data = [1,-1,88,9]
    v1 = any(data)
    print(v1) # True
    
    data = [1,-1,88,0,9]
    v1 = any(data)
    print(v1) # True
    
    data = [0,"",[],{}]
    v1 = any(data)
    print(v1) # False
    

4.3 第3组(3个)

  • bin,十进制转换成二进制

    res = bin(100)
    print(res) # 0b101001001
    
  • oct,十进制转换成八进制

    res = oct(100)
    print(res) # 0o1221
    
  • hex,十进制转换成十六进制

    res = hex(100)
    print(res) # 0x1221
    

练习题

给你一个IP地址 ip = "192.168.11.23",你需要的每一段转换成二进制。

1.每一段转换成二进制
192		0b100011001
168		0b100011001
11		0b100
23		0b1002

2.去掉前面0b,补足8位。
	00000100
	00001002
	
3.再次拼接起来
	"1000110011000110010000010000001002"
4.在将这个拼接起来的二进制转换10进制整数
	num = int("1000110011000110010000010000001002",base=2)
	print(num)
ip = "192.168.11.23"

bin_str_list = []

str_list = ip.split(".")
for item in str_list:
    bin_str = bin( int(item) )[2:]
    bin_fill_str = bin_str.zfill(8)
	bin_str_list.append(bin_fill_str)
    
num_string = "".join(bin_str_list)
num = int(num_string,base=2)
print(num)

4.4 第4组(2)

编码时 unicode ,将文字和二进制做上对应。

A        101010101010                   65
武		0101010100101010101010         987
  • ord

    v1 = ord("A")
    print(v1) # 65
    
  • chr

    v2 = chr(65)
    print(v2) # "A"
    

基于chr实现动态验证码:

# 1.随机获取 65 - 90 的数字,就可以将chr转换成字母。
import random

num = random.randint(65,90)
print(num)
char = chr(num)
print(char)
import random

char_list = []

for i in range(6):
    num = random.randint(65, 90)
    char = chr(num)
    char_list.append(char)

print(char_list)  # ['P', 'L', 'N', 'E', 'L', 'G']

code = "".join(char_list)
print(code)

4.5 第5组(9)

  • int

  • str

    data = str(10)
    print(data)
    
  • bool

  • list

  • dict

  • set

  • tuple

  • float

  • bytes

4.6 第6组(10)

  • len

  • print

  • input

  • open

    f = open("xxx",mode='r',encoding='utf-8')
    data = f.read()
    f.close()
    
  • range

  • hash,计算哈希值(字典的键、集合元素都必须是可哈希)

    data = hash("武沛齐")
    print(data)
    
  • type,查看数据类型

    def func(data):
        # 如果data是字符串则返回123
        # 如果data是列表则返回456
        # 其他的返回None
        if type(data) == str:
            return 123
        elif type(data) == list:
            return 456
        else:
            return None
    
    v1 = func(123123)
    
    print(v1)
    
  • callable,是否可执行(后面是否可以加括号执行)

    name = "武沛齐"
    
    v1 = callable(name)
    print(v1) # False
    
    def func():
        print(666)
        
    v2 = callable(name)
    print(v2) # True
    
    def func():
        return 123
    
    data_list = [11,22,33, func ]
    # 循环每个元素,如果可以执行则执行并获取返回值
    for item in data_list:
        if callable(item):
            res = item()
            print(res)
    	else:
            print(item)
    
  • enumerate,循环过程中,自动提供自增的一列。

    goods = ["飞机", "迫击炮", "AK47"]
    
    # 以前
    # for i in range(len(goods)):
    #     msg = "{} {}".format(i + 1, goods[i])
    #     print(msg)
    
    # 现在
    for idx, item in enumerate(goods, 100):
        msg = "{} {}".format(idx, item)
        print(msg)
    
  • sorted,排序 (不修改原数据、生成新的列表)

    # 列表中的排序(原列表进行排序)
    data_list = [11,22,33,44,55,1,-10]
    data_list.sort()
    print(data_list)
    
    data_list = [11,22,33,44,55,1,-10]
    new_data = sorted(data_list)
    print(new_data)
    

    注意:如果是元素是中文如何排序?

    data_list = ["1", "2", "3", "10", "12"]
    new_data = sorted(data_list)
    
    # ['1', '10', '12', '2', '3']
    print(new_data)
    

练习题

data_list = [
    '5 编译器和解释器.mp4',
    '9 Python解释器种类.mp4',
    '2 课堂笔记的创建.mp4',
    '8 Python介绍.mp4',
    '7 编程语言的分类.mp4',
    '3 常见计算机基本概念.mp4',
    '1 今日概要.mp4',
    '6 学习编程本质上的三件事.mp4',
    '4 编程语言.mp4',
]

res = sorted(data_list)
print(res)

# ['1 今日概要.mp4', '2 课堂笔记的创建.mp4', '3 常见计算机基本概念.mp4', '4 编程语言.mp4', '5 编译器和解释器.mp4', '6 学习编程本质上的三件事.mp4', '7 编程语言的分类.mp4', '8 Python介绍.mp4', '9 Python解释器种类.mp4']
data_list = [
    '5 编译器和解释器.mp4',
    '17 今日作业.mp4',
    '9 Python解释器种类.mp4',
    '16 今日总结.mp4',
    '2 课堂笔记的创建.mp4',
    '15 Pycharm使用和破解(win系统).mp4',
    '12 python解释器的安装(mac系统).mp4',
    '13 python解释器的安装(win系统).mp4',
    '8 Python介绍.mp4',
    '7 编程语言的分类.mp4',
    '3 常见计算机基本概念.mp4',
    '14 Pycharm使用和破解(mac系统).mp4',
    '10 CPython解释器版本.mp4',
    '1 今日概要.mp4',
    '6 学习编程本质上的三件事.mp4',
    '18 作业答案和讲解.mp4',
    '4 编程语言.mp4',
    '11 环境搭建说明.mp4'
]

# 自定义排序的规则
def func(arg):
    return int( arg.split(" ")[0] )

res = sorted(data_list, key=func)
print(res)

# ['1 今日概要.mp4', '10 CPython解释器版本.mp4', '11 环境搭建说明.mp4', '12 python解释器的安装(mac系统).mp4', '13 python解释器的安装(win系统).mp4', '14 Pycharm使用和破解(mac系统).mp4', '15 Pycharm使用和破解(win系统).mp4', '16 今日总结.mp4', '17 今日作业.mp4', '18 作业答案和讲解.mp4', '2 课堂笔记的创建.mp4', '3 常见计算机基本概念.mp4', '4 编程语言.mp4', '5 编译器和解释器.mp4', '6 学习编程本质上的三件事.mp4', '7 编程语言的分类.mp4', '8 Python介绍.mp4', '9 Python解释器种类.mp4']
data_list = [
    '5 编译器和解释器.mp4',
    '17 今日作业.mp4',
    '9 Python解释器种类.mp4',
    '16 今日总结.mp4',
    '2 课堂笔记的创建.mp4',
    '15 Pycharm使用和破解(win系统).mp4',
    '12 python解释器的安装(mac系统).mp4',
    '13 python解释器的安装(win系统).mp4',
    '8 Python介绍.mp4',
    '7 编程语言的分类.mp4',
    '3 常见计算机基本概念.mp4',
    '14 Pycharm使用和破解(mac系统).mp4',
    '10 CPython解释器版本.mp4',
    '1 今日概要.mp4',
    '6 学习编程本质上的三件事.mp4',
    '18 作业答案和讲解.mp4',
    '4 编程语言.mp4',
    '11 环境搭建说明.mp4'
]

# 自定义排序的规则
# def func(arg):
#     return int( arg.split(" ")[0] )

# key = lambda arg : int(arg.split(" ")[0])

res = sorted(data_list, key=lambda arg : int(arg.split(" ")[0])  )
print(res)

5. 推导式

Python中为我们提供的一个简便的语法,一行代码实现生成列表、字典等多个元素。

创建一堆数据并存储到列表中:

data = [] # [1,2,3,4,5...100]
for i in range(1,101):
    data.append(i)
user_list = []
for i in range(1,301):
    user = "工号-{}".format(i)
    user_list.append(user)

5.1 列表推导式

# data_list = [ 0,1,2,3,4,..99 ]

data_list = [ i for i in range(100)  ]
# data_list = [ 100, 100, 100,100,100..100 ]

data_list = [ 100 for i in range(100)  ]
# data_list = [100,101,102...199 ]

data_list = [ 100 + i  for i in range(100)  ]
# data_list = [ [1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2], ]
data_list = [ [1,2]  for i in range(100)  ]
# data_list = [ (0,100), (1,101),....(99,199) ]
data_list = [ (i,i+100)  for i in range(100)  ]
# data_list = [ "工号-0","工号-1","工号-2","工号-3",..."工号-99", ]
data_list = [ "工号-{}".format(i)  for i in range(100)  ]
# [7,8,9]
data_list = [ i for i in range(10) if i > 6  ]
# [7,8,9]
data_list = [ i for i in range(100) if i > 6 and i<10 ]

案例:

data_list = [11, True, "武沛齐", [11, 22], 99, 123, 333]

result = [item for item in data_list if type(item) == int]
print(result)  # [11, 99, 123, 333]
data_list = [
    '5 编译器和解释器.mp4',
    '17 今日作业.mp4',
    '9 Python解释器种类.mp4',
    '16 今日总结.mp4',
    '2 课堂笔记的创建.mp4',
    '15 Pycharm使用和破解(win系统).mp4',
    '12 python解释器的安装(mac系统).mp4',
    '13 python解释器的安装(win系统).mp4',
    '8 Python介绍.mp4',
    '7 编程语言的分类.mp4',
    '3 常见计算机基本概念.mp4',
    '14 Pycharm使用和破解(mac系统).mp4',
    '10 CPython解释器版本.mp4',
    '1 今日概要.mp4',
    '6 学习编程本质上的三件事.mp4',
    '18 作业答案和讲解.mp4',
    '4 编程语言.mp4',
    '11 环境搭建说明.mp4'
]

# 1. 获取序号并放入列表 result = ["5","17",....]
result = [item.split(" ")[0] for item in data_list]
print(result)

# 2. 获取序号并放入列表 result = [5,17,....]
result = [int(item.split(" ")[0]) for item in data_list]
print(result)

5.2 字典推导式

"""
data = {
    0:123,
    1:123,
    ...
    9:123,
}
"""
data = { i:123 for i in range(10) }
"""
{
	0:(0,100),
	1:(1,100),
}
"""
data = { i:(i,100) for i in range(10) }
"""
{
	8:(8,100),
	9:(9,100),
}
"""
data = { i:(i,100) for i in range(10) if i > 7}

练习题:

text = "query=xx&_asf=www.sogou.com&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=847&sst0=1636790847260&sugsuv=1626278055911299&sugtime=1636790847260"

# 将字符串转换为字典
data_dict = {
    "query":"xx",
    "_asf":"www.sogou.com"
}
text = "query=xx&_asf=www.sogou.com&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=847&sst0=1636790847260&sugsuv=1626278055911299&sugtime=1636790847260"

# ['query=xx', '_asf=www.sogou.com', 'w=01019900', 'p=40040100', 'ie=utf8', 'from=index-nologin', 's_from=index', 'sut=847', 'sst0=1636790847260', 'sugsuv=1626278055911299', 'sugtime=1636790847260']
data_list = text.split("&")
result = {}
for item in data_list:
    result[item.split("=")[0]] = item.split("=")[1]
    
print(result)
text = "query=xx&_asf=www.sogou.com&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=847&sst0=1636790847260&sugsuv=1626278055911299&sugtime=1636790847260"

result = {item.split("=")[0]: item.split("=")[1] for item in text.split("&")}

print(result)
# "query=xx&_asf=www.sogou.com&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=847&sst0=1636790847260&sugsuv=1626278055911299&sugtime=1636790847260"
data_dict = {
    'query': 'xx',
    '_asf': 'www.sogou.com',
    'w': '01019900',
    'p': '40040100',
    'ie': 'utf8',
    'from': 'index-nologin',
    's_from': 'index',
    'sut': '847',
    'sst0': '1636790847260',
    'sugsuv': '1626278055911299',
    'sugtime': '1636790847260'
}

data_list = ["{}={}".format(k, v) for k, v in data_dict.items()]

res = "&".join(data_list)
print(res)
# "query=xx&_asf=www.sogou.com&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=847&sst0=1636790847260&sugsuv=1626278055911299&sugtime=1636790847260"
data_dict = {
    'query': 'xx',
    '_asf': 'www.sogou.com',
    'w': '01019900',
    'p': '40040100',
    'ie': 'utf8',
    'from': 'index-nologin',
    's_from': 'index',
    'sut': '847',
    'sst0': '1636790847260',
    'sugsuv': '1626278055911299',
    'sugtime': '1636790847260'
}

res = "&".join(["{}={}".format(k, v) for k, v in data_dict.items()])
print(res)

总结

上述就是学习函数必备的知识点。

  • 定义

  • 执行

  • 参数

  • 返回值

  • 作用域

  • 函数是一个变量

    def func():
    	pass
    
  • lambda 表达式

  • 内置函数

    内置函数:python内部给我们提供好的函数。
    自定义函数:
            def func():
                pass
    
  • 推导式(与函数无关),简化代码创建字典、列表。

6. 关于pip.exe

下载视频时,用到了pip去下载第三方包。

pip是一个专门用于帮助去下载第三方包的工具,安装好Python之后,自动安装好了。

C:\python39	
	- python.exe      Python解释器
	- Scripts
		- pip.exe	  包管理工具
	- Lib(内置+第三方)
		- site-package
			- 第三方包
>>>C:\python39\python.exe /Users/wupeiqi/PycharmProjects/gx_day06/demo.py
>>>C:\python39\Scripts\pip.exe  install  包

6.1 系统的环境变量

如果你将:C:\python39\Scripts 添加到了环境变量中。

>>>pip install 包名称

在这里插入图片描述

6.2 常见命令

  • 安装

    pip install 包名称
    
  • 卸载

    pip uninstall 包名称
    
  • 罗列目前已安装第三方包

    pip list
    
  • 将已安装的包写入到文件中

    pip freeze > a1.txt
    
    pip freeze > requirements.txt
    
    邱恩婷在自己电脑上安装(逐一安装)
    	pip install beautifulsoup4==4.9.3
    	pip install certifi==2020.12.5
    批量安装:
    	pip install -r requirements.txt
    

问题:

  1. 在同一个Python的环境中,无法通知安装多个版本的包,只能同时有一个。
  2. requirements.txt 一般放在项目的根目录录下(每个项目根目录下都要放一个)。

6.3 配置

在这里插入图片描述

如何成为开源作者,发布包:
https://www.bilibili.com/video/BV17541187de

有时在进行下载时,会发现速度比较慢:

pip install 包
timeout/retry...

在这里插入图片描述

基于豆瓣源去下载某些第三方包:

  • 一次性操作

    pip install flask  -i  https://pypi.douban.com/simple/ 
    pip install django  -i  https://pypi.douban.com/simple/ 
    
  • 永久默认豆瓣

    pip config set global.index-url https://pypi.douban.com/simple/
    
    pip install django
    

    在这里插入图片描述

6.4 源码安装

一般情况下,我们在开发过程用到的所有的第三方包都可以通过 pip 管理工具来进行安装,但是如果你遇到一些包在pip中没有,可以找到他的源码,也可以通过源码安装。

  • 下载源码

    https://pypi.org/project/requests/#files
    
  • 解压
    在这里插入图片描述

  • 安装【终端】

    • 进入源码目录

    • 执行安装命令

      python3.9 setup.py build
      python3.9 setup.py install
      

6.5 wheel包

有些源码开发者,提前把代码打包成 wheel包,你以后下载时,就不需要自己build,直接安装即可。

  • pip 支持wheel包的安装了。

    pip install wheel
    
  • 下载wheel包
    在这里插入图片描述

  • 进入终端去安装

    • 打开终端,进入wheel包目录

    • 直接去安装

      pip3 install mysqlclient-2.0.3-cp39-cp39-win_amd64.whl
      

注意事项:无论你是通过什么方式安装的第三方包,都是安装在了 site-package 目录。

C:\python39	
	- python.exe      Python解释器
	- Scripts
		- pip.exe	  包管理工具
	- Lib(内置+第三方)
		- site-package
			- 第三方包

想要卸载的话,直接通过:pip uninstall 包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值