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
    
  • 相关阅读:
    什么是webview
    juqery.fn.extend和jquery.extend
    LeetCode
    5. Longest Palindromic Substring
    42. Trapping Rain Water
    11. Container With Most Water
    621. Task Scheduler
    49. Group Anagrams
    739. Daily Temperatures
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/lvweihe/p/11275964.html
Copyright © 2011-2022 走看看