zoukankan      html  css  js  c++  java
  • python note 10 函数变量

    1、命名空间

    #内置命名空间 —— python解释器
      # 就是python解释器一启动就可以使用的名字存储在内置命名空间中
      # 内置的名字在启动解释器的时候被加载进内存里
    #全局命名空间 —— 我们写的代码但不是函数中的代码
      # 是在程序从上到下被执行的过程中依次加载进内存的
      # 放置了我们设置的所有变量名和函数名
    #局部命名空间 —— 函数
      # 就是函数内部定义的名字
      # 当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了

    #在局部:可以使用全局、内置命名空间中的名字
    #在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
    #在内置:不能使用局部和全局的名字的

    2、作用域

    # 全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 ——globals()
    # 局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals()

    # 对于不可变数据类型 在局部可是查看全局作用域中的变量
    # 但是不能直接修改
    # 如果想要修改,需要在程序的一开始添加global声明
    # 如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效

     3、全局变量和局部变量

    a = 10
    def func():
        a = 20
        print(a)
    func()
    #输出10

    4、global用法

    1. 可以把全局中的内容引入到函数内部

    2. 如果没有则在全局创建一个变量

    a = 10 # 全局变量本身就是不安全的, 不能随意修改, 闭包
    def func():
        global a  
        a = 20
       print(a)
    func()
    #输出20

    5、nonlocal用法(没找到会报错)

    def outer():
        a = 10
        def inner(): # 在inner中改变a的值
            nonlocal a # 寻找外层函数中离他最近的那个变量
            a = 20
        inner()
        print(a)
    outer()

    6、案例说明

    a = 1
    def fun_1():
        a = 2
        def fun_2():
            nonlocal a
            a = 3
            def fun_3():
                a = 4
                print(a)
            print(a)
            fun_3()
            print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)
    #输出1
    #2
    #3
    #4
    #3
    #3
    #1

    7、例题

    1、此题需注意是个大坑

    def extendlist(val,list=[]):
        list.append(val)
        return list
    
    list1 = extendlist(10)
    list2 = extendlist(123,[])
    list3 = extendlist('a')
    
    print('list1=%s' %list1)
    print('list2=%s' %list2)
    print('list3=%s' %list3)
    #输出
    # list1=[10, 'a']
    # list2=[123]
    # list3=[10, 'a']

    2、

    def func():
        result = []
        hua = ["红心","草花","黑桃","方块"]
        shuzi = [2,3,4,5,6,7,8,9,10,'J','Q','K','A']
        for i in hua:
            for j in shuzi:
                result.append([i,j])
        return result
    print(func())

    3、

    def calc(a,b,c=2,d=4):
        return (a+b)*(c-d)
    print(calc(1,2,5,d=4))
    print(calc(1,2,c=5,4))#会报错需注意

    4、

    def func(*args):
        sum = 0
        for i in args:
            sum = sum + i
        print(sum)
    func(1,2,3)

    5、

    def func(*args):#打散
        print(args)
    func(*[1,2,3,4],*"你好啊")
    #输出(1, 2, 3, 4, '你', '好', '啊')

     6、九九乘法表

    for i in range(1,10):
        for j in range(1,i+1):
            print("%sx%s=%s" %(i,j,i*j),end=" ")
        print()
  • 相关阅读:
    DispatcherServlet?
    解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法?
    面向对象的特征有哪些方面?
    服务调用是阻塞的吗?
    构造器Constructor是否可被override?
    迭代器和枚举之间的区别?
    Kafka 判断一个节点是否还活着有那两个条件?
    数据传输的事务定义有哪三种?
    mq 的缺点 ?
    如何获取 topic 主题的列表?
  • 原文地址:https://www.cnblogs.com/P-Z-W/p/10584638.html
Copyright © 2011-2022 走看看