目录
今日概要:
-
数据类型:字符串、列表、字典、元组
-
函数
1.数据类型
每种数据类型都有自己的特点及应用场景,以后的开发中需要根据实际的开发情况选择合适的数据类型。
1.1 字符串
1.1.1 定义
name = "武沛齐" data = "beijing"
1.1.2 独有功能
-
判断是否以xx开头
v1 = "中国上海移动" # True/False result = v1.startswith("中国")
addr = input("请输入地址:") if add.startswith("上海"): print("本地户口") else: print("外地户口")
-
判断是否以xx结尾
v1 = "中国上海移动" # True/False result = v1.endswith("移动")
addr = input("请输入地址:") if add.endswith("村"): print("农业户口") else: print("非农户口")
-
判断是否是数字
data = "123" result = int(data)
print("欢迎使用xx系统,请选择:1.xxxx;2.xxxx") choice = input("请输入序号:") # True/False if choice.isdecimal(): msg = "您选择的序号是:{}".format(choice) print(msg) else: print("输入错误")
v1 = input("请输入数字:") v2 = input("请输入数字:") if v1.isdecimal() and v2.isdecimal(): data = int(v1) + int(v2) print(data) else: print("格式错误")
-
大小写
msg = "Root" data = msg.upper() # ROOT print(data) # ROOT print(msg) # Root
msg = "Root" data = msg.lower() # root print(data) # root print(msg) # Root
注意:字符串类型是不可变(内部元素修改了)。
name = 'root' name = "ROOT"
print(".....") choice = input("是否继续(y/n)") # y/Y data = choice.upper() if data == "Y": print("继续") else: print("退出")
-
去除空白
data = "中国移动 " result = data.rstrip() # "中国移动" print(result) # "中国移动" print(data) # "中国移动 "
data = " 中国移动" result = data.lstrip() # "中国移动" print(result) # "中国移动" print(data) # " 中国移动"
data = " 中国移动 " result = data.strip() # "中国移动" print(result) # "中国移动" print(data) # " 中国移动 "
text = input("请输入内容:") data = text.strip() print(data)
# 用户登录案例 user = input("用户名:") # "xxxx " pwd = input("密码:") # "xxxx " user = user.strip() # "xxxx" pwd = pwd.strip() if user == "root" and pwd == "xxx": pass
# 用户登录案例 user = input("用户名:").strip() # "xxxx " "xxxx" pwd = input("密码:").strip() # "xxxx " if user == "root" and pwd == "xxx": pass
-
替换
data = "中国 上海 移动" result = data.replace("海", "河") print(result)
data = "中国 上海 移动" result = data.replace("", "") print(result)
data = "中国上海移动" result = data.replace("上海","**") print(result) # "中国**移动" print(data) # "中国上海移动"
# 1.提示用户输入文本 # 2.对于输入的文本进行替换 上海 ** 北京 ** data = input("请输入:") # 中国移动核心的有上海和北京两个公司 v1 = data.replace("上海","**") # 中国移动核心的有**和北京两个公司 v2 = v1.replace("北京","**") # 中国移动核心的有**和**两个公司
data = input("请输入:") # 中国移动核心的有上海和北京两个公司 data = data.replace("上海","**") # 中国移动核心的有**和北京两个公司 data = data.replace("北京","**") # 中国移动核心的有**和**两个公司 print(data)
data = input("请输入:") # 中国移动核心的有上海和北京两个公司 key_list = ["上海","北京","深圳"] for key in key_list: data = data.replace(key,"**") print(data)
data = "中国移动核心的有上海和北京两个公司" data = data.replace("上海","**").replace("北京","**") print(data)
-
切割 csv
line = "199999999,12312,武沛齐" data = line.split(",") # ["199999999","12312","武沛齐"] print(data)
text = """199999999|12312|武沛齐1 199999999|12312|武沛齐2 199999999|12312|武沛齐3 199999999|12312|武沛齐4 199999999|12312|武沛齐5 199999999|12312|武沛齐6 199999999|12312|武沛齐7""" data_list = text.split("\n") # ['199999999|12312|武沛齐1', '199999999|12312|武沛齐2', '199999999|12312|武沛齐3', '199999999|12312|武沛齐4', '199999999|12312|武沛齐5', '199999999|12312|武沛齐6', '199999999|12312|武沛齐7'] for line in data_list: row_list = line.split("|") # ['199999999', '12312', '武沛齐1'] mobile = row_list[0] code = row_list[1] name = row_list[2] message = "姓名:{},手机号:{},验证码是{}".format(name, mobile, code) print(message)
-
拼接
data_list = ['199999999', '12312', '武沛齐1'] line = "{},{},{}".format( data_list[0] , data_list[1] ,data_list[2] ) print(line)
data_list = ['199999999', '12312', '武沛齐1'] result = ",".join(data_list) print(result) # 199999999,12312,武沛齐1
-
字符串和字节
# unicode编码存储,4字节存储 # 中 00000000 10000100 00001000 00000010 # 国 00000000 10110100 00001001 00001001 # 移 00000000 10110101 00001001 00001001 # 动 00000000 10111100 00001001 00001001 # A 00000000 00000000 00000000 00001001 data = "中国移动A" # 字符串 # 将字符串转换成utf-8编码(压缩,能用更少的字节) # 中 10000100 00001000 00000010 # 国 10110100 00001001 00001001 # 移 10110101 00001001 00001001 # 动 10111100 00001001 00001001 # A 00001001 result = data.encode("utf-8") # 字节 new_data = result.decode("utf-8") # "中国移动A"
案例:用户输入手机号/密码/验证码,对于用户输入的值去除空白再进行判断 root qwe123。
import random code = random.randrange(1000,9999) message = "验证码是:{}".format(code) print(message) user = input("用户名:").strip() pwd = input("密码:").strip() user_code = input("验证码:").strip() if user == "root" and pwd == "qwe123" and user_code == str(code): print("成功") else: print("失败")
1.1.3 公共功能
-
计算长度
name = "root" size = len(name) print(size) # 4
-
索引
# 0123 name = "root" # 只能读 v1 = name[0] print(v1) print(name[1]) name[2] name[ len(name)-1 ] name[ len(name)-2 ] name[-1]
-
切片
# 0123 name = "root" v1 = name[0:2] # "ro" print(v1)
-
for循环
name = "root" for item in name: print(item) # r o o t
1.2 列表
1.2.1 定义
data = [ 1, 2, 3, "root","北京",True] nums = [11,22,33,44]
1.2.2 独有功能
-
追加,在原列表的尾部追加一个元素
data = [1, 2, 3, "root","北京",True] data.append("上海") print(data) # [1, 2, 3, "root","北京",True,"上海"]
# 案例 user_list = [] while True: user = input("请输入用户名(Q退出):").strip() if user.upper() == "Q": break user_list.append(user) print("停止注册") # print(user_list) # ['root', 'eric', 'seven', 'kelly'] msg = "已经注册账户:{}。".format("、".join(user_list)) print(msg)
-
插入,将元素插入到原列表的指定位置
# 0 1 2 3 4 5 data = [1, 2, 3, "root","北京",True] data.insert(0,"上海")
data = [1, 2, 3, "root","北京",True] # data.insert(0,"上海") data.insert(2,"上海") print(data)
name_list = [] while True: name = input("请输入姓名:") if name.upper() == "Q": break if name.startswith("刁"): name_list.insert(0, name) else: name_list.append(name) print(name_list)
-
remove,删除
data_list = ['刁民', 'eric', '武沛齐', 'eric', '中明'] data_list.remove("eric") print(data_list) # 想要删除的前提是,他一定在列表中存在。
data_list = ['刁民', 'eric', '武沛齐', 'eric', '中明'] # True/False if "eric" in data_list: data_list.remove("eric") print(data_list)
data_list = ['刁民', 'eric', '武沛齐', 'eric', '中明'] # True/False while "eric" in data_list: data_list.remove("eric") print(data_list)
# 抽奖 import random data_list = ['刁民', 'eric', '武沛齐', 'eric', '中明'] # 1.随机在列表中抽出1个人 -> 500w name = random.choice(data_list) msg = "恭喜 {} 获得500w奖金".format(name) print(msg) # 2.删除已抽到的人 data_list.remove(name) # 3.在抽出1个人 --> 1000w name = random.choice(data_list) msg = "恭喜 {} 获得1000w奖金".format(name) print(msg)
-
清空列表
data_list = ['刁民', 'eric', '武沛齐', 'eric', '中明'] data_list.clear() print(data_list)
-
排序
data_list = [100, 11, 88, 22, 33, 44, 55] data_list.sort() # 从小到大 print(data_list)
data_list = [100, 11, 88, 22, 33, 44, 55] data_list.sort(reverse=True) # 从大到小 print(data_list)
data_list = ["武沛齐", "赵敏", "李娜"] data_list.sort() print(data_list) # 依据是什么呢?unicode编码值的大小来进行比较。
-
翻转
data_list = ["武沛齐", "赵敏", "李娜"] data_list.reverse() print(data_list)
1.2.3 公共功能
-
长度
data_list = ["武沛齐", "赵敏", "李娜"] size = len(data_list) print(size) # 3
-
索引
data_list = ["武沛齐", "赵敏", "李娜"] # 读取 print(data_list[0]) data_list[1] data_list[2] data_list[-1] data_list[-2] # 修改 data_list[1] = "张弛" print(data_list) # ["武沛齐", "张弛", "李娜"] # 删除 del data_list[1] print(data_list) # ["武沛齐", "李娜"]
-
切片
data_list = ["武沛齐", "赵敏", "李娜"] print(data_list[0:2]) # ["武沛齐", "赵敏"]
-
for循环
data_list = ["武沛齐", "赵敏", "李娜"] for item in data_list: print(item)
for i in range(5): # [0,1,2,3,4] print(i)
data_list = ["武沛齐", "赵敏", "李娜"] for i in range(len(data_list)): # [0,1,2,] item = data_list[i] print(item)
goods = ["汽车", "飞机", "火箭"] print("可供选择的商品有:") for item in goods: print(item) choice = input("请选择:") print(choice)
goods = ["汽车", "飞机", "火箭"] print("可供选择的商品有:") for idx in range(len(goods)): print(idx, goods[idx]) choice_idx_str = input("请选择索引:") if choice_idx_str.isdecimal(): choice_idx = int(choice_idx_str) if choice_idx >= 0 and choice_idx < len(goods): text = goods[choice_idx] print(text) else: print("序号输入错误") else: print("请输入数字序号")
1.3 元组
1.3.1 定义
data = [11,22,33,44] # 列表 data = (11,22,33,44) # 元组
v1 = (11,22,33) v2 = (11,22,33,)
v1 = (11) # 11 v2 = (11,) # (11,)
1 (1) (1,)
1.3.2 独有功能
无
1.3.3 公共功能
-
长度
v1 = (11,22,33) size = len(v1) print(size)
-
索引
v1 = (11,22,33) v1[0] v1[1] v1[-1]
-
切片
v1 = (11,22,33) v1[0:2]
-
for循环
v1 = (11,22,33) for item in v1: print(item)
1.4 字典
1.4.1 定义
info = { "k1":123, "name":"武沛齐", "age":99 }
-
键:必须得是可哈希的类型,目前可哈希:int、bool、str、元组(tuple)
info = { 1:123, "xxx":999 False:888, (11,2):"你好呀", }
-
值:可以是任意类型。
1.4.2 独有功能
-
获取值
info = { "age":123, "status":True, "name":"武沛齐" } # 根据键获取对应的值 v1 = info.get("name") print(v1) # "武沛齐" # 根据键获取对应的值 v1 = info.get("xxxxx") print(v1) # None # 根据键获取对应的值 v1 = info.get("xxxxx",666) print(v1) # 666
-
键/值/键值对
info = { "age":123, "status":True, "name":"武沛齐" } data = info.keys() # ["age","status","name"] data = info.values() # [123,True,"武沛齐"] data = info.items() # [ ["age",123], ["status",True], ["name","武沛齐"] ]
for item in info.keys(): print(item) for item in info.values(): print(item) for item in info.items(): # print(item) # ["age",123] print(item[0],item[1]) for k,v in info.items(): print(k,v)
data = [11,22,33] a1,a2,a3 = [11,22,33]
1.4.3 公共功能
-
长度
info = { "age":123, "status":True, "name":"武沛齐" } size = len(info) print(size) # 3
-
索引
data = [11,22,33,44] data[3] # 读取 info = { "age":123, "status":True, "name":"武沛齐" } v1 = info.get("age") # 如果获取数据,推荐使用它。 v2 = info["agexxx"] # 增 info['xxx'] = 888 # 删除 del info["age"] # 修改 info["age"] = 999
-
for循环 keys/values/items方法来使用。
1.5 补充
1.5.1 嵌套
数据类型由于现在出现了容器类型很容易出现嵌套关系。
# user_list = [ ("wupeiqi","123"),("alex","888"),("eric","888") ] # 1.用注册,让用户输入 用户名 / 密码 构造成元组,再将元组添加到列表中。 user_list = [] while True: user = input("用户名:") if user.upper() == 'Q': break pwd = input("密码:") group = (user, pwd) user_list.append(group) print(user_list) # 2.登录 user_list = [("wupeiqi", "123"), ("alex", "888"), ("eric", "888")] user = input("用户名:") pwd = input("密码:") is_success = False for item in user_list: if item[0] == user and item[1] == pwd: is_success = True break if is_success: print("登录成功") else: print("登录失败")
# 商品信息选择 goods = [ {"title": "电脑", "price": 1999}, {"title": "鼠标", "price": 99}, {"title": "硬盘", "price": 199}, {"title": "显示器", "price": 888}, ] # 1.输出 序号 标题 价格 for idx in range(len(goods)): item = goods[idx] print(idx + 1, item['title'], item['price']) # 2.请用户选择(类型判断、范围的判断) choice = input("请选择序号:") choice = int(choice) data_dict = goods[choice - 1] # 3.输出选择的信息 print(data_dict)
1.5.2 转换
-
int
-
bool
-
str
-
list
-
tuple
-
dict
大原则,想转换成什么类型,就要用什么类型去包裹。
str - int list - tuple v1 = [11,22,33] data = tuple(v1) print(data) # (11,22,33)
特别要注意,其他类型转换成布尔值时:只有 0、空字符串、空列表、空字典、空元祖、None -> False,其他均为True
data = [11,22,] if data: print(123) else: print(456)
1.5.3 类型分类
-
是否可哈希,只有可哈希的类型才能作为字典的键。
可哈希:int/str/tuple/bool 不可哈希:list、dict
-
是否可变类型
不可变:int/str/tuple/bool 可变:list、dict
2.函数
函数,一大堆功能代码的集合。
def 函数名(): 代码.. ... .. .... 函数名()
def info(): print(123) print(456) print(999) info()
函数存在的意义?
-
增强代码的重用性
def send_email(): ... .... if CPU占用率 > 90%: send_email() if 硬盘使用率 > 85%: send_email() if 内存使用率 >95%: send_email()
-
增加代码的可读性
def calculate_same_num_rule(): """判断是否是豹子""" pass def calculate_same_color_rule(): """判断是否是同花""" pass def calculate_straight_rule(): """判断是否顺子""" pass def calculate_double_card_rule(poke_list): """判断是否对子""" pass def calculate_single_card_rule(): """判断是否单牌""" pass # 1. 生成一副扑克牌 card_color_list = ["红桃", "黑桃", "方片", "梅花"] card_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] # A all_card_list = [[color, num] for color in card_color_list for num in card_nums] # 2.洗牌 random.shuffle(all_card_list) # 3.给玩家发牌 ... # 4.判断牌是:豹子?同花顺?顺子?对子?单点? calculate_same_num_rule() calculate_same_color_rule() calculate_straight_rule() ...
2.1 Python发送邮件
之前说了很好多次发送邮件的案例,下面就来教大家用python发邮件,然后再由此引出函数的参数。
-
注册邮箱
-
基础配置
-
授权码
-
SMTP服务器: smtp.126.com
-
-
代码发送邮件
# 1.将Python内置的模块(功能导入) import smtplib from email.mime.text import MIMEText from email.utils import formataddr # 2.构建邮件内容 msg = MIMEText("领导早上好,领导今天辛苦了。", "html", "utf-8") # 内容 msg["From"] = formataddr(["武沛齐", "yangliangran@126.com"]) # 自己名字/自己邮箱 msg['to'] = "424662508@qq.com" # 目标邮箱 msg['Subject'] = "360一天" # 主题 # 3.发送邮件 server = smtplib.SMTP_SSL("smtp.126.com") server.login("yangliangran@126.com", "LAYEVIAPWQAVVDEP") # 账户/授权码 server.sendmail("yangliangran@126.com", "424662508@qq.com", msg.as_string()) # 自己邮箱/目标邮箱/内容 server.quit()
需求来了
需求1:封装称为函数
def send_email(): # 1.将Python内置的模块(功能导入) import smtplib from email.mime.text import MIMEText from email.utils import formataddr # 2.构建邮件内容 msg = MIMEText("领导早上好,领导今天辛苦了。", "html", "utf-8") # 内容 msg["From"] = formataddr(["武沛齐", "yangliangran@126.com"]) # 自己名字/自己邮箱 msg['to'] = "424662508@qq.com" # 目标邮箱 msg['Subject'] = "360一天" # 主题 # 3.发送邮件 server = smtplib.SMTP_SSL("smtp.126.com") server.login("yangliangran@126.com", "LAYEVIAPWQAVVDEP") # 账户/授权码 server.sendmail("yangliangran@126.com", "424662508@qq.com", msg.as_string()) # 自己邮箱/目标邮箱/内容 server.quit() send_email()
需求2: 两个人发邮件
def send_email1(): # 1.将Python内置的模块(功能导入) import smtplib from email.mime.text import MIMEText from email.utils import formataddr # 2.构建邮件内容 msg = MIMEText("领导早上好,领导今天辛苦了。", "html", "utf-8") # 内容 msg["From"] = formataddr(["武沛齐", "yangliangran@126.com"]) # 自己名字/自己邮箱 msg['to'] = "424662508@qq.com" # 目标邮箱 msg['Subject'] = "360一天" # 主题 # 3.发送邮件 server = smtplib.SMTP_SSL("smtp.126.com") server.login("yangliangran@126.com", "LAYEVIAPWQAVVDEP") # 账户/授权码 server.sendmail("yangliangran@126.com", "424662508@qq.com", msg.as_string()) # 自己邮箱/目标邮箱/内容 server.quit() def send_email2(): # 1.将Python内置的模块(功能导入) import smtplib from email.mime.text import MIMEText from email.utils import formataddr # 2.构建邮件内容 msg = MIMEText("领导早上好,领导今天辛苦了。", "html", "utf-8") # 内容 msg["From"] = formataddr(["武沛齐", "yangliangran@126.com"]) # 自己名字/自己邮箱 msg['to'] = "424662508@qq.com" # 目标邮箱 msg['Subject'] = "360一天" # 主题 # 3.发送邮件 server = smtplib.SMTP_SSL("smtp.126.com") server.login("yangliangran@126.com", "LAYEVIAPWQAVVDEP") # 账户/授权码 server.sendmail("yangliangran@126.com", "424662509@qq.com", msg.as_string()) # 自己邮箱/目标邮箱/内容 server.quit() send_email1() send_email2()
def info(): print(123) info()
def info(x1): data = x1 + 100 print(data) info(1) info(20)
def send_email1(to): # 1.将Python内置的模块(功能导入) import smtplib from email.mime.text import MIMEText from email.utils import formataddr # 2.构建邮件内容 msg = MIMEText("领导早上好,领导今天辛苦了。", "html", "utf-8") # 内容 msg["From"] = formataddr(["武沛齐", "yangliangran@126.com"]) # 自己名字/自己邮箱 msg['to'] = to # 目标邮箱 msg['Subject'] = "360一天" # 主题 # 3.发送邮件 server = smtplib.SMTP_SSL("smtp.126.com") server.login("yangliangran@126.com", "LAYEVIAPWQAVVDEP") # 账户/授权码 server.sendmail("yangliangran@126.com", to, msg.as_string()) # 自己邮箱/目标邮箱/内容 server.quit() send_email("424662508@qq.com") send_email("424662509@qq.com")
2.2 参数
def do_something(a1,a2,a3): pass do_something(11,22,33)
-
位置传参
def do_something(a1,a2,a3): res = a1 + a2 + a3 print(res) do_something(11,22,33)
-
关键字传参
def do_something(a1,a2,a3): res = a1 + a2 + a3 print(res) do_something(a3=33,a1=11,a2=22)
2.2.1 默认参数
def do_something(a1,a2,a3=10): pass do_something(11,22) do_something(11,22,33) 注意:定义时,有默认值的参数必须放在最后。
2.2.2 动态参数
def do_something(a1,a2,a3=10): pass do_something(11,22)
-
*
def do_something(*args): # 统一将用户传入的参数搞成一个元组 args=(1,) args=(1,11) args=(9,11,123123) pass do_something(1) do_something(1,11) do_something(9,11,123123)
-
**
def do_something(**kwargs): # 统一将传入的参数搞成字典:kwargs={"k":1} kwargs={"v1":1,"x":11} pass do_something(k=1) do_something(v1=1,x=11) do_something(age=9,xx=11,v1=123123)
-
*,**
def do_something(*args,**kwargs): pass do_something(11,22) do_something(k1=11,k2=22) do_something(11,22,k9=999)
2.3 返回值
函数本质上是一大堆代码的集合,函数放在一起目的是为了让他帮助我们完成某些事。
def plus(v1,v2): data = v1 + v2 + 100 return data value = plus(50,33) print(value) # 183
注意:函数的返回值和print是两个不同的东西。
关于返回值的三个关键知识点:
-
返回值可以是任意类型,函数没有返回值,默认返回None
def f1(): return [11,22,3] res = f1()
def f2(): v1 = 100 v2 = 900 res = f2() # None
-
在函数中一旦遇到return,立即结束函数的执行。
def func(): print(1) for i in range(5): print(i) return 999 print(2) res = func()
-
在函数返回值时,可能会用逗号分开多个值,会打包成元组
def func(): return 1,2,"武沛齐" v1 = func() # (1,2,"武沛齐")
案例:
-
定义函数,函数接受一个字符串类型的参数,在函数中计算字符串中有多少个 'a' 字符,统计出来并返回个数。
def 函数名(参数): pass return 9 v1 = 函数名("asjdfi;uasdfjkaisdfj;lakjsdfkj;asdfkja;skdjf;;") print(v1)
def char_counter(data_string): num = 0 for char in data_string: if char == "a": num = num + 1 return num data = char_counter("阿斯蒂芬卡;sdkfjasduffasdfdafdasfadfasdfsf") print(data)
2.4 作用域
# if 1 == 1: # name = "root" # print(name) # root # for i in range(10): # [0,1,2,3,..9] # pass # print(i)
python中是以函数为作用域:
def info(): name = "root" print(name) info()
全局变量 vs 局部变量
# 全局变量 CITY = "上海" def info(): # 局部变量 name = "root" print(name) info()
自己没有,就向上级作用域
# 全部变量 CITY = "上海" def info(): # 局部变量 name = "root" print(name) print(CITY) info()
global关键字
# 全部变量 CITY = "上海" def info(): # 局部变量 name = "root" print(name) # root CITY = "北京" # 局部变量 print(CITY) # 北京 print(CITY) # 上海 info() print(CITY)
# 全局变量 CITY = "上海" def info(): # 局部变量 name = "root" print(name) # root global CITY # 全局变量CITY CITY = "北京" # 全局变量CITY=北京 print(CITY) # 北京 print(CITY) # 上海 info() print(CITY)
2.5 生成器
# 生成器函数 def func(): print("进来了") yield 11 print("又来了") yield 22 print("又又来了") yield 33 # 调用生成器函数就会得到一个生成器对象 gen = func() v1 = next(gen) print(v1) v2 = next(gen) print(v2) v3 = next(gen) print(v3) next(gen)
# 生成器函数 def func(): yield 11 yield 22 yield 33 # 调用生成器函数就会得到一个生成器对象 gen = func() for item in gen: print(item)
# 生成 1000w个连续的数字 num_list = [] for item in range(10000000): num_list.append(item)
def create_big_num(max_num): num = 0 while True: yield num if num == max_num: return num = num + 1 obj = create_big_num(100000) for item in obj: print(item)
2.6 装饰器
# 从函数中返回函数
def hi(name="yasoob"):
def greet():
return "now you are in the greet() function"
def welcome():
return "now you are in the welcome() function"
if name == "yasoob":
return greet
else:
return welcome
a = hi()
print(a)
# 函数做为参数传递
def new_decorator(a_func):
def wrapTheFunction():
print("before")
a_func()
print("after")
return wrapTheFunction
def function_require():
print("I am the function")
function_decoration = new_decorator(function_require)
function_decoration()
# 装饰器语法糖的使用
def new_decorator(a_func):
def wrapTheFunction():
print("before")
a_func()
print("after")
return wrapTheFunction
@new_decorator
def function_require():
print("I am the function")
# function_decoration = new_decorator(function_require)
# function_decoration()
function_require()
装饰器的了解:
-
定义装饰器
def outer(func):
def inner():
print("before")
res = func() # 被装饰器的原函数
print("after")
return res
return inner
@outer
def info3():
print("原来的info函数")
info3()
-
有参数的装饰器
def mylog(type):
def decorate(fun):
def inner(*args,**kwargs):
if type=="1":
print("hello world")
else:
print("1")
fun(*args,**kwargs)
print("2")
return inner
return decorate
@mylog("2")
def test(a,b):
print("hello world,{}{}".format(a,b))
test(11,22)
2.7 匿名函数(lambda表达式)
def func(a1,a2): return a1 + a2 v1 = func(1,2) print(v1) # 3
func = lambda a1,a2 : a1 + a2 v2 = func(1,2) print(v2) # 3
对于简单的函数可以做的简写。
def func(a1,a2): # 1.打开Excel文件 # 2.读取内容 ... return a1 + a2
2.8 异常
- Raise的用法
def divideNumbers(num1, num2):
if(num2 == 0):
raise Exception('分母不能为空')
return num1 / num2
# 调用函数
try:
result = divideNumbers(10, 0)
except Exception as e:
print(e)