Python基础学习Day7(上)(嵌套函数、LEGB规则、类、构造函数)

嵌套函数

在函数内部定义的函数。
一般在什么情况下使用嵌套函数?
1.封装-数据隐藏
外部无法访问“嵌套函数”。
2.贯彻DRY(Don’t Repeat Yourself)原则
嵌套函数,可以让我们在函数内部避免重复代码。
3.闭包

嵌套函数实例一

#测试嵌套函数(内部函数)的定义
def outer():
    print("outer running")
    def inner01():
        print("inner01 running")
    inner01()#只为outer()函数服务
outer()
inner01()#无法调用

在这里插入图片描述

嵌套函数实例二

def printName(isChinese,name,familyName):
    def inner_print(a,b):
        print("{0} {1}".format(a,b))
    if isChinese:
        inner_print(familyName,name)#只为printName()函数服务
    else:
        inner_print(name,familyName)
printName(True,"一一","张")
printName(False,"Ivanka","Trump")

在这里插入图片描述

nonlocal 关键字

nonlocal 用来声明外层的局部变量
global 用来声明全局变量
声明后即可使用(赋新值等)

#测试nonlocal、global关键字的用法
a=100
def outer():
    b=10
    def inner():
        nonlocal b#声明外部函数的局部变量(声明后即可使用(赋新值等))
        print("inner b:",b)
        global a#声明全局变量(声明后即可使用(赋新值等))
        a=1000
        b=20
    inner()
    print("outer b:",b)
outer()
print("a:",a)

在这里插入图片描述

LEGB规则

Python在查找“名称”时,是按照LEGB规则查找的:Local->Enclosed->Global->Built in。
Local 指的就是函数或者类的方法内部
Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global 指的是模块中的全局变量
Built in 指的是Python为自己保留的特殊名称
下面的例子进行了优先级进行排序(1、2、3、4)

#测试LEGB
str()#4 Built in
str="global str"#3 Global 
def outer():
    str="outer"#2 Enclosed 
    def inner():
        str="inner"#1 Local 
        print(str)
    inner()
outer()

类的定义

定义类的语法格式如下:
class 类名:
类体

要点:
1.类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。
2.类体中我们可以定义属性方法
3.属性用来描述数据,方法(即函数)用来描述这些数据相关的操作。

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("meidi",22)#通过类名调用构造函数
s1.say_score()

在这里插入图片描述

构造函数__init__()

一个Python对象包含如下部分:
1.id(identity识别码)
2.type(对象类型)
3.value(对象的值)
(1)属性(attribute)
(2)方法(method)
创建对象,我们需要定义构造函数__init__()方法。构造方法用于执行“实例对象的初始化工作”,即对象创建后,初始化当前对象的相关属性,无返回值
__init__()的要点如下:
1.名称固定,必须为__init()__
2.第一个参数固定,必须为:self。self指的就是刚刚创建好的实例对象。
3.构造函数通常用来初始化实例对象的实例属性,如下代码就是初始化实例属性:name和score。
在这里插入图片描述
4.通过“类名(参数列表)”来调用构造函数。调用后,将创建好的对象返回给相应的变量。
5.__init__()方法:初始化创建好的对象,初始化指的是:给实例属性赋值。
6.__new__()方法:用于创建对象,但我们一般无需定义该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值