zoukankan      html  css  js  c++  java
  • 函数初识二

    1. 函数的动态参数

    • *args **kwargs
    def func(a,b,*args):
    	print(a,b,args)
    func(1,2,3,4,5,6)
    结果:
    1 2 (3,4,5,6)  可以传递多个参数,以元组形式出现
    
    def func(a,b,*args):
    	print(a,b,*args)  # *args将元组打散
    func(1,2,3,4,5,6)
    结果:
    1 2 3 4 5 6
    
    def num(*args,a=1,b=2):
    	print(a,b,args)
    num(1,2,3,4,5,6)
    结果:
     1 2 (1,2,3,4,5,6) #打印顺序原因
    

    下边的也可以,不报错,但没有意义

    def func(a=1,b=2,*args):
    	print(a,b,args)
    func(10,11,12,13,14,15)
    结果:
    10 11 (12,13,14,15)
    

    参数排列顺序:优先级

    位置参数 > 动态位置参数 > 默认参数 (关键字参数) > 动态关键字参数

    def func(a,b,**kwargs):
    	print(a,b,kwargs)   #kwargs 以字典形式输出
    func(1,2,c=3,d=4)
    结果:
    1 2 {"c":3,"d":4}  
    
    def func(a,b,**kwargs):
    	print(a,b,*kwargs)   # *kwargs 获得的是字典的键
    print(1,2,c=3,d=4)
    结果:
    1 2 c d 
    
    def func(a,b,*args,c=3,d=4,**kwargs):
        print(a,b,args,c,d,kwargs)
    func(1,2,3,4,c=5,d=6,bj= "首都",alex="IT")
    结果:
    1 2 (3, 4) 5 6 {'bj': '首都', 'alex': 'IT'}
    

    万能传参

    def func(*args,**kwargs):
    	print(args,kwargs)
    func(1,2,3,a=3,b=4,c=5)
    结果:
    (1, 2, 3) {'a': 3, 'b': 4, 'c': 5}
    

    2. 注释

    ​ 不开头,6个双引号,上三下三

    def func(user,password):
        """
        密码加密
        :param a:   用户名                    注释内容
        :param b:  密码
        :return:  加密的密码
        """
    func()
    

    查看注释

    print(func.__doc__) _ _

    3. 名称空间

    • 内置空间:放置内置函数的空间,如print(),inpurt().len()
    • 全局空间:当前.py文件组要开辟的空间,放在全局空间
    • 局部空间:.py文件中顶头书写,函数中开辟的空间就是局部空间

    加载顺序: 内置空间 >全局空间 >局部空间

    取值顺序:局部空间 >全局空间>内存空间

    作用于:

    全局作用域:内置空间+全局空间

    局部作用域:局部空间

    def func():
        print("1")
        def f1():
            print(2)
        return f1()
    func()
    

    不管在什么位置,只要是函数名+(),就是在调用此函数,函数调用执行后,函数体中开辟的空间就自动销毁

    4. 函数嵌套

    def func():
        a = 1
        def foo():
            b = 2
            print(b)
            print(a)
            def f1():
                print(b)
            return f1()
        return foo()
    print(func())
    #结果:
    2 1 2 None
    

    def a():
        a = 1
        c()
        print(c)
    def b():
        b = 2
        print(b)
    def c():
        c = 3
        print(a)	#	而且不能去同级别函数中寻找,只能去上一级或者更上级寻找
    def run():
        a()
    run()
    结果:
    <function a at 0x000000DF3DBFA950>  变量名不加括号是内存地址
    <function c at 0x000000DF3DBFAA60>
    

    ![

    ](assets/1563371186324.png)

    5. global + 变量 声明修改全局变量的值

    a = 10
    def func():
        global a    #修改全局变量 a
        a += 1      #修改全局变量 a=11
        print(a)   #第二个打印  11
    print(a)       #第一个打印  10
    func()
    print(a)   #函数结束,但全局变量的a 改变了
    结果:
    10 11 11
    

    在函数中,局部空间里的变量可以使用全局变量的值,但是不能修改,如果要修改全局变量的值,则需要添加 global + 变量名

    6. nonlobal + 变量 不能修改全局变量,只能修改局部变量里的值,逐级修改

    • global : 修改全局空间的变量对应的值
      nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,只修改离它最近的一层,最近的一层没有变量继		续向上找,直到找到最外层函数
      
    a = 10
    def func():
        def a():
            a = 20  #下级的修改了,此处不变
            def f1():
                a = 30   #a 被修改了
                def foo():
                    nonlocal a   #要修改局部变量的a的值
                    a += 1       # 将a 改为 31
                    print(a)   # 31
                foo()
                print(a) # 31     #a 已经改变了
            f1()
            print(a)
        a()
    func()
    print(a)    #全局空间的a 没有发生任何改变
    # 结果: 31 31 20 10
    
  • 相关阅读:
    汉字编码问题
    C语言创建UTF8编码文本文件
    Know more about shared pool subpool
    SCN Headroom与时光倒流到1988年的Oracle数据库
    Know more about Enqueue Deadlock Detection
    11g新特性:RDBMS Component TRACE
    了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT
    了解11g OCM
    Bulk Collect/FORALL的性能测试
    【推荐】DBA必须了解的11g中的一些变化
  • 原文地址:https://www.cnblogs.com/lvweihe/p/11275964.html
Copyright © 2011-2022 走看看