zoukankan      html  css  js  c++  java
  • 函数的概念和运用

    今日所得

      命名关键字参数

      函数对象

      函数的嵌套

      名称空间

      作用域

    命名关键字参数(了解)

      

    # 命名关键字参数:在函数定义阶段,写在*与**可变长参数之间的形参
    # 在给命名关键字传参的时候,只能用关键字为其传参
    # 在定义阶段,其实z和m都是命名关键字传参,不是默认值传参和位置传参
    def func(x,y,*args,z=3,m,**kwargs):
        print(x,y)
        print(args)
        print(z,m)
        prinf(kwargs)
    
    func(1,2,3,4,5,6,7,645,3,1,5,z=88,m=44,o=56,w=123,f=894)

    函数对象

      函数是第一类对象:函数名指向的值可以被当做参数传递

      

    # 1.函数名可以被传递
    
    def func():
        print('from func')
        print(func)
    f = func  # f加括号就是func()
    func()
    print(f)
    f()  # 其实指向的也是函数func指向函数体代码的内存地址
    
    
    
    # 2.函数名可以被当做参数传递给其他函数
    def func():
        print('from func')
    
    
    def index(args):
        print(args)
        print('from andex')
    index(1)
    index(func)
    
    
    # 3.函数名可以被当做函数的返回值
    def index():
        print('index')
    
    def func():
        print('func')
        return index
    res = func()
    print(res)
    res()
    
    
    
    # 4.函数名可以被当做容器类型的参数
    def func():
        print('func')
    print(func())
    l = [1,2,func,func()]
    primt(l)

    函数的嵌套调用

      

    # 在函数内部调用其他函数
    # 可以将复杂的逻辑简单化
    def my_max(x,y):
        if x > y:
            return x
        return y
    
    def my_max4(a,b,c,d):
        res1 = my_max(a,b)
        res2 = my_max(res1,c)
        res3 = my_max(res2,d)
        return res3
    print(my_max4(a,b,c,d))
    
    # 函数的嵌套将一个复杂的四个数比大小简化成了用一个两位数比大小函数代替

    名称空间

    # 名称空间是什么?
    # 就是放名字的地方
    # 详细解释:存放的是变量名与变量值的内存地址的绑定关系的地方
    # 要想访问一个量的值,必须先去名称空间中拿到对应的名字,才能够访问变量的值
    """
    名称空间的分类
        1.内置空间名:python解释器提前给你定义好的名字(已经存放在内置名称空间中了)
        len
        max
        min
        2.全局名称空间:文件级别的代码
        x = 1
        if l = 1:
            y = 2
        print(y)
        while True:
            z = 3
        x,y,z都会放到全局名称空间
        if for while 无论嵌套多少层,它们内部所创建的名字都是全局名称空间的
    
    3.局部名称空间:函数体内创建的名字都属于局部名称空间
        username
    
     生命周期:
            
            内置名称空间:只要python解释器已启动立马创建   关闭python解释器的时候内置名称空间自动销毁
            全局名称空间:只要你右键运行py文件会自动创建   py文件程序运行结束自动销毁 
            局部名称空间:函数被调用的时候自动创建  函数指向结束立即销毁(动态创建动态销毁)
            
        
        名字的查找顺序
    """

      

    名称空间的查找顺序

    len = '我是全局名称空间的len'
    def func():
        # len = '我是局部名称空间的len'
        print(len)
    
    
    # print(len)  # 我现在站在的是全局的位置
    func()
    
    

    def index(): x = 'xxx' def index2(): print(x) y = 666 index() index2() """ 名字的查找 (******) 1.需要先确定你当前在哪(大前提) 1.站在全局: 全局 >>> 内置 2.站在局部: 局部 >>> 全局 >>> 内置 """ """ 函数在定义阶段查找名字的顺序就已经固定了 不会因为函数的调用位置变化而改变(******) """

    作用域

      全局作用域

      全局有效:内置名称空间   全局名称空间

      局部作用域

      局部有效:局部作用域

    # global nonlocal
    """
    1.在局部修改全局的变量
    """
    
    
    
    # global 在局部修改全局的不可变数据类型
    # x = []  # 因为列表是可变类型
    x = 1  # 不可变类型
    username = 'jason'
    def func():
        # x.append('嘿嘿嘿')
        global x,username  # 修改全局变量 而不是创建局部名称空间
        x = 999
        username = 'egon'
    func()
    print(x)
    print(username)
    
    
    
    # nonlocal  局部修改局部
    def func():
        x = 1
        def index():
            nonlocal x
            x = 2
        index()
        print(x)
    func()
    
    
    """
    global:局部修改全局 如果想修改多个 逗号隔开
    nonlocal:局部修局部 如果想修改多个 逗号隔开
    
    """

  • 相关阅读:
    安装IDEA
    缓存工具CacheUtil
    使用Eclipse上传/下载Git项目
    Sublime文本排序&查找重复行&删除重复行
    Sublime Text 3 配置Java开发
    安装XMind
    安装Maven
    安装MySQL
    安装Eclipse及相关Plugin
    Android Xposed框架中创建模块的指导手册
  • 原文地址:https://www.cnblogs.com/AbrahamChen/p/11165864.html
Copyright © 2011-2022 走看看