Python5

lambda表达式和匿名函数

  • lambda表达式用来声明匿名函数,lambda函数实际生成一个函数对象
  • lambda表达式只允许包含一个表达式,不能包含复杂语句。

基本语法:
lambda arg1,arg2,arg3…:<表达式>
arg1,arg2,agr3为函数的参数。<表达式>为函数体
运算结果:表达式的运算结果

f=lambda a,b,c:a+b+c
def test01(a,b,c):
    return a+b+c
print(f)
print(f(1,2,3))

g=[lambda a:a*2,lambda b:b*3,lambda c:c*4]
print(g[0](6),g[1](7),g[2](8))

h=[test01,tset01]  #函数也是对象
print(h[0](2,3,4))

eval()函数用法

功能:将字符串str当成有效的表达式来求值并返回计算结果
语法:eval(source,[globals,locals])->value
参数:source:一个Python表达式或函数compile()返回的代码对象
globals:可选,必须是字典
locals:可选,任意映射对象

s="print('dd')"
eval(s) #dd

a=10
b=20
c=eval("a+b")
print(c) #30

dict1=dict(a=100,b=100)
d=eval("a+b",dict1)
print(d)  #300

递归函数

  • 自己调自己,直到栈满
def test01():
    print("test01")
    test01()  #开辟栈帧
    print("##3333")  #不会执行

递归函数:

  1. 终止条件
    2.递归条件
def test01(n):
    print("test01:",n)
    if n==0:
        print("over")
    else:
        test01(n-1)
    print("teat01****",n)

test01(4)

在这里插入图片描述

  • 递归函数:阶乘案例
def f(n):
    if n==1:
        return 1
    else:
       return n*f(n-1)

for i in range(1,5):
    print(i,"!=",f(i))
  • 嵌套函数:在函数内部定义的函数

一般什么情况下使用嵌套函数:

  • 1.封装:数据隐藏
    外部无法访问"嵌套函数"

  • 2.贯彻DRY(Don’t Repeat Yourself)原则
    降低重复代码

  • 3. 闭包

def outer():
    print("outer running...")

    def inner01():
        print("inner01 running...")
    inner01()

outer()


def printChinese(name,familyName):
    print("{0} {1}".format(familyName,name))

def printEnglish(name,familyName):
    print("{0} {1}".format(name,familyName))

def printName(isChinese,name,familyName):
    def inner_print(a,b):
        print("{0} {1}".format(a,b))
    if isChinese:
        inner_print(familyName,name)
    else:
        inner_print(name,familyName)

printName("true","小气","高")

nonlocal_global

nonlocal:声明外层的局部变量
globa:声明全局变量

a=199
def outer():
    b=10
    def inner():
        nonlocal b
        print("inner b:",b) #声明外部函数的局部变量
        b=20

        global a  #声明全局变量
        a=100

    inner()
    print("outer b:" ,b)

outer()
print("a:",a)

LEGB规则

在这里插入图片描述


#str="global str"
def outer():
   # str="outer"
    def inner():
        #str="inner"
        print(str)
    inner()

outer()

类的定义

在这里插入图片描述

class Student:  #类名一般首字母大写,多个采用驼峰原则

    def __init__(self,name,score):  #self必须位于第一个参数
        self.name=name
        self.score=score
    def say_score(self):  #self必须位于第一个参数
        print("{0}的分数是: {1}".format(self.name,self.score))

s1=Student("gaoqi",18)  #通过类名()调用构造函数
s1.say_score()
  • 构造函数_init_

在这里插入图片描述

  • 实例属性
    在这里插入图片描述

异常的本质

在这里插入图片描述

  • 异常类的继承层次
    在这里插入图片描述
    1.抛出异常
    2.捕获异常
#TraceBack追溯。most recent call last最后一次调用
a=1/0

try_except基本结构

try:
被监控的可能引发异常的语句块
except BaseException [as e]:
异常处理语句块

try:
    print("step1")
    a=3/0
    print("step2")  #跳高try块中异常以后的代码
except BaseException as e:
    print("step3")
    print(e)
print("step4")

try_多个except结构

try:
被监控的、可能引发异常的语句块
excep Exception1:
处理Exception1的语句块
except Exception2:
处理Exception2的语句块

excep BaseException:
处理可能遗漏的异常


try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c=float(a)/float(b)

except ZeroDivisionError:
    print("异常,不能除以0")
except ValueError:
    print("异常,不能讲字符串转为数字")
except NameError:
    print("异常,变量不存在")
except BaseException as e:
    print(e)

else结构

try…except…else结构增加了"else块"。如果try块中没有抛出异常,则执行else块。如果try块中抛出异常,则执行except块,不执行else块

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c=float(a)/float(b)

except BaseException as e:
    print(e)
else:
    print("除的结果为",c)

finally结构

try…except…finally结构中,finally块无论是否发生异常都会被执行:通常用来释放try块中申请的资源

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c=float(a)/float(b)

except BaseException as e:
    print(e)
else:
    print("除的结果为",c)
finally:
    print("我是finally中语句,无论是否发生异常与否,都执行")

在这里插入图片描述

自定义异常

  • 通常继承Exception或者其子类即可。命名一般以Error、Exception为后缀
  • 自定义异常由raise语句主动抛出
class AgeError(Exception):  #继承Exception
    def __init__(self,errorInfo):
        Exception.__init__(self)
        self.errorInfo=errorInfo
    def __str__(self):
        return "年龄错误"

if __name__=="__main__":
    age=int(input("输入一个年龄"))
    if age<1 or age>100:
        raise AgeError()
    else:
        print(age)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值