zoukankan      html  css  js  c++  java
  • 函数基础

    函数是第一类对象,即函数可以被当做数据处理。

    def func():
        print('fron func')
    print(func)

    <function func at 0x0000023B491BF5E8>

    函数对象的四大功能

    1、引用

    name = 'tank'
    dsb = name
    
    def index():
        print('from index')
    
    
    a = index
    a()

    2、函数名可以当做参数传递

    def foo(x, y, func):
        print(x, y)
        func()
    
    
    def bar():
        print('from bar')
    
    
    foo(1, 2, bar)

    3、函数名可以当做返回值使用

    传参的时候没有特殊需求一定不要加括号,加括号当场执行

    def index():
        print("from index")
    
    
    def func(a):
        return a
    
    
    a = func(index)
    print(a)
    a()

    4、函数名可以被当做容器类型的元素

    def func():
        print('from func')
    
    
    l1 = [1, '2', func, func()]
    
    f = l1[2]
    print(f)

    练习

    def register():
        print('register')
    
    
    def login():
        print('login')
    
    
    def shopping():
        print('shopping')
    
    
    def pay():
        print('pay')
    
    
    func_dic = {
        '1': register,
        '2': login,
        '3': shopping,
        '4': pay
    }
    
    def main():
        while True:
            print("""
                1、注册
                2、登录
                3、购物
                4、付款
                5、退出
            """)
            choice = input("请输入对应的编号:").strip()
            if choice == '5':
                break
            if choice not in func_dic:
                continue
            else:
                func_dic[choice]()
    main()

    函数的嵌套定义

    函数内部定义的函数,无法在函数外部使用内部定义的函数。

    def index():
        print('from index')
    
    
    def func():
        index()
        print('from func')
    
    func()
    def func1(x, y):
        if x > y:
            return x
        else:
            return y
    
    
    print(func1(1,2))
    def func2(x, y, z, a):
        result = func1(x, y)
        result = func1(result, z)
        result = func1(result, a)
        return result
    
    
    print(func2(1, 200000, 3, 1000))

    函数的嵌套定义

    def index():
        def home():
            print("from home")
        home()
    
    index()

    什么是名称空间?

       存放名字的空间

         如果你想访问一个变量值,必须先方向对应的名称空间,拿到名字和对应的内存地址的绑定关系

      名称空间的分类:

         1、内置名称空间:

             python提前给你的定义完的名字,就是存在内置名称空间

         2、全局名称空间 :

            存放于文件级别的名字,就是全局名称空间

            if while for 内部定义的名字执行之后都存放于全局名称空间

         3、局部名称空间

             函数内部定义的所有名字都是存放与当前函数的内置名称空间

      生命周期:

         1、内置名称空间

           在python解释器启动的时候生效,关闭解释器的时候失效

         2、全局名称空间

           当你启动当前这个py文件的时候生效,当前页面代码执行结束之后失效

         3、局部名称空间

           当你调用当前函数时生效,函数体最后一行代码执行结束就失效

      名称空间的查找顺序:

         局部:局部 > 全局 > 内置

         全局:全局 > 内置 # 内置再找不到就报错

        函数内部使用的名字,在定义阶段已经规定死了,与你的调用位置无关

    作用域的分类:

       1、全局作用域

         全局可以调用的名字就存在于全局作用域

        内置名称空间+全局名称空间

      2、局部作用域

        局部可以调用的名字就存放与局部作用域

        局部名称空间

       global:声明全局变量(**)

       nonlocal:在局部名称空间声明局部变量,在局部修改上层函数的变量(

       只有可变类型可以在局部修改外部变量的值 (*

    在局部修改外部函数的变量
    x = 1111
    
    
    def index():
        x = 1
    
        def func2():
            x = 2
    
            def func():
                nonlocal x
                x = 3
    
            func()
            print(x)
    
        func2()
        print(x)
    
    
    index()
    print(x)
    
    l1 = []
    def index(a):
        l1.append(a)
        # print(l1)
    index(1)
    
    print(l1)
    # 局部变量的修改无法影响上层,上上层
    
    def index():
        x = 1
    
        def index2():
            nonlocal x
            x = 2
    
        index2()
        print(x)
    
    
    index()

     

  • 相关阅读:
    __weak与__block修饰符区别
    Socket 记录
    Python yaml文件中文读取写入
    Xshell 连接 本地虚拟机
    MySQL查询学生表
    Python Excel读写操作
    pytest mark标记运行
    pytest 参数化
    pytest xfail参数详解
    pytest 失败截图
  • 原文地址:https://www.cnblogs.com/lvguchujiu/p/11836071.html
Copyright © 2011-2022 走看看