pyrhon学习_day11___函数进阶

1、函数嵌套的调用

#定义函数
def max2(x,y):
    m  = x if x>y else y                                  #三元运算:结果 = if条件成立的结果 if 条件 else if条件不成立的结果
    return m
#函数嵌套
def max4(a,b,c,d):
    res1 = max2(a,b)
    res2 = max2(res1,c)
    res3 = max2(res2,d)
    return res3
# print(max4(23,-7,31,11))

2、函数嵌套的定义

def func():
    print(123)
    def func2():
        print(234)
    func2()

#func()

二、命名空间及作用域

1、命名空间

  三种命名空间的加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)。在局部,自己有的变量名就用自己的,自己没有的就逐级向上找,甚至到全局的。但是全局不可以使用局部的命名空间。

2、作用域

作用域:站在范围小的局部,如果局部有用局部,局部没有往上一层找,一层一层往上找,找到第一个可用的名字就用这个(1)global:修改全局命名空间里的变量值
a = 0
def demo1():
    global a
    a = 2
    print(a)

demo1()                           #输出结果为:2
print(a)                          #输出结果为:2
(2)nonlocal:只修改局部命名空间里的 从内部往外部找到第一个对应的变量名
#global情况
a = 0
def demo1():
    a = 1
    def demo2():
        def demo3():
            global a
            a = ‘小神仙‘
            print(a)
        demo3()
        print(a)
    demo2()
    print(a)

demo1()                                 #输出结果为:小神仙 1 1
print(a)                                #输出结果为:1    (全局空间变量a被修改)
#nonlocal情况
a = 0
def demo1():
    a = 1
    def demo2():
        def demo3():
            nonlocal a
            a = ‘小神仙‘
            print(a)
        demo3()
        print(a)
    demo2()
    print(a)

demo1()                                #输出结果为:小神仙 小神仙 小神仙
print(a)                               #输出结果为:0  (全局空间变量a未被修改)

三、函数名的本质

  函数名本质是函数的内存地址

1、可以被引用

def func():
    print(‘in func‘)

f = func
print(f)                              #输出结果为函数的内存地址:<function func at 0x0000015AFC0D7048>

2、可以被当做容器类数据的元素

def f1():
    print(‘f1‘)

def f2():
    print(‘f2‘)

def f3():
    print(‘f3‘)

l = [f1,f2,f3]
d = {‘f1‘:f1,‘f2‘:f2,‘f3‘:f3}
#调用
l[0]()                             #结果输出为:f1
d[‘f2‘]()                          #结果输出为:f2

3.可以当变量使用(函数参数或者返回值)

def alex():
    print(123)
def func():
    return alex
ret = func()
print(ret())
 
				
时间: 2024-10-12 00:00:56

pyrhon学习_day11___函数进阶的相关文章

python学习之函数进阶三

一.模块介绍 os模块常用方法 os.getcwd()    #获取当前工作目录 os.listdir("F:\\")    #获取指定目录下的所有文件和目录 os.remove('b.json')    #删除指定文件 os.stat('a.json')    #获取文件属性 os.chmod()        #修改文件属性 os.mkdir('hyh')    #创建目录 os.rmdir('hyh')    #删除目录 os.system('dir')    #运行shell命

Python学习之函数进阶

函数的命名空间 著名的python之禅 Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't

python学习之---函数进阶

一,递归函数: 做程序应该都知道,在一个函数的内部还可以调用其它函数,这叫函数的调用,但是有一种特殊的情况,在一个函数内部对自身函数的调用,我们成这为函数的递归调用. 在此,使用一个家喻户晓的例子来演示一下函数的递归调用------求阶乘: 1 >>> func(1) 2 1 3 >>> func(10) 4 3628800 5 >>> func(100) 6 9332621544394415268169923885626670049071596826

python学习总结(函数进阶)

-------------------程序运行原理------------------- 1.模块的内建__name__属性,主模块其值为__main__,导入模块其值为模块名 1.创建时间,py文件比pyc文件新,则从新生成pyc. 2.magic num,做运行前版本测试,版本不同重新生成pyc. 3.PyCodeObject对象,源代码中的字符串,常量值,字节码指令,原始代码行号的对应关系. 2.LEGB规则 1.Local :本地 当前所在命名空间(如函数,模块),函数的参数也属于命名空

Python学习:函数进阶

本节要点:命名空间及作用域,函数嵌套,函数名本质,闭包 命名空间: 命名空间的本质:存放名字与值的绑定关系. 三种命名空间: 全局命名空间 局部命名空间 内置命名空间 三种命名空间之间的加载与取值顺序: 加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载) 取值: 在局部调用:局部命名空间->全局命名空间->内置命名空间 在全局调用:全局命名空间->内置命名空间 作用域: 作用域就是作用范围,按照生效

第二模块:03python学习之函数进阶

1.名称空间 定义:相比上一节的作用域,名称空间更能解释.名称空间又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方. 名称空间分以下三种: locals:是函数内的名称空间,包括局部变量和形参,当前函数空间内 globals:全局变量,函数定义所在模块的空间 bulildings:内置模块的名称空间 针对作用域的查找顺序,遵循LEGB的规则 L:LOCALS 本地的 E:E

十分钟学习Python的进阶语法

(0)目录 VMware 下安装Ubuntu的吐血经历 零基础学习Shell编程 Linux下的makefile的妙用 Linux调试神器 -- gdb 十分钟学会Python的基本类型 分布式版本管理神器--GIT GIT文件的三种状态 & Git SSH秘钥问题 十分钟学习Python的进阶语法 配置SSH无密码访问及Linux热键.重启.kill进程 Java的不定长参数和Python的不定长参数对比 一:起因 (1)作为胶水语言的Python,可谓无处不在,快速开发原型网站:大数据处理等

Lua学习(4)——函数

在Lua中函数的调用方式和C语言基本相同,如:print("Hello World")和a = add(x, y).唯一的差别是,如果函数只有一个参数,并且该参数的类型为字符串常量或table的构造器,那么圆括号可以省略,如print "Hello World"和f {x = 20, y = 20}.    Lua为面对对象式的调用也提供了一种特殊的语法--冒号操作符.表达式o.foo(o,x)的另一种写法是o:foo(x).冒号操作符使调用o.foo时将o隐含的作

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N