zoukankan      html  css  js  c++  java
  • 函数

    函数:将一些代码进行封装,减少重复代码

    结构:

    def 函数名():

      函数体(代码块)

    函数名+()         调用函数

    函数的执行过程:

    1.先定义 不会执行

    2.调用 会执行定义好的语句

    3.定义好的语句

    return   

    函数的返回值

    不写return返回的是None

    写了renturn不写值,返回的也是None

    多个元素返回值都是元祖,可以返回任意数据

    函数中当执行到return的时候就结束了,return以下代码全都不执行,并且终止函数

    return的值返回给了调用者,想要查看的话直接打印调用者就可以

    参数

    定义的参数是形参   

    调用的参数是实参

    从实参到行参的过程叫传参

    形参和实参的数量要一一对应

    def func(addr,age)          #形参   addr是一个变量名 
        print(...)
        print(...)
    func('北京',18)                #实参,和形参的变量名一一对应

    实参划分:

    位置参数       func('北京',18)                       和形参位置的顺序一一对应

    关键字参数   func(addr='北京',age=18)      对关键字赋值,按照关键字进行传参,可以颠倒顺序

    混合参数       func('北京',age=18)               顺序:位置参数要在关键字参数的前面

    形参划分:

    位置参数    def func(addr,age)                 和实参位置一一对应

    默认参数    def func(age=18)                   相当于实参的关键字参数,按照关键字进行传参

    混合参数    def func(addr,age=18)           顺序:位置参数在默认参数前面

    动态参数

    动态位置参数: *args

    def func(*args)          聚合打包  获取到数据的是元祖的形式

    def func(a,b,*args):
      print(a,b,args)
    func(1,2,3,4,5,6,7)
    
    
    结果:
    1 2 (3, 4, 5, 6, 7)
    
    
    #当位置参数和动态位置参数一起使用时,要注意位置参数在动态位置参数的前面,不然没有值传参给位置参数,全部打包在*args里

    打散:

    def func(a,b,*args):
        print(a,b,*args)            #打散打印args
    func(1,2,3,4,5,6,7)
    
    
    结果:
    1 2 3 4 5 6 7
    
    #打印的时候写 *args  是将本来打包的数据打散之后再打印
    def func(*args):
        print(args) 
    func(*[1,2,3,4,5])     #将列表打散之后再传参给*args
    
    结果:
    (1, 2, 3, 4, 5)

    动态关键字参数: **kwargs     

    def func(*args)  获取到数据的是字典的形式
    def func(**kwargs):
        print(kwargs) 
    func(a=1,b=2,c=3)
    
    结果:
    {'a': 1, 'b': 2, 'c': 3}

    在写参数的时候也要注意顺序: 关键字参数>动态关键字参数

    打散:

    def func(**kwargs):
        print(*kwargs)        #打散字典的键再打印,只写一个*就可以,写print(**kwargs)会报错
    func(a=1,b=2,c=3) 
    
    结果:
    a b c
    def func(**kwargs):
        print(kwargs)
    func(**{'a':1,'b':2,'c':3})    #将字典打散传参
    
    结果:
    {'a': 1, 'b': 2, 'c': 3}

    如果将上述几种参数一起使用的话,要遵守一定的顺序:

    位置参数>动态位置参数>默认参数>动态默认参数

    将动态位置参数和动态默认参数放在一起的话,就会形成万能的函数定义结构,也是最经常用到的:

    def func(*args,**kwargs) 

    函数的注释:

    def func(*args,**kwargs):

    打出'''   然后回车 就可以给函数添加注释

    def func(*args,**kwargs):
        '''
        
        :param args: ...
        :param kwargs: ...
        :return: ...
        '''

    print(func.__doc__) 查看函数的注释


    函数的名称空间

    内置空间

    全局空间

    局部空间

    找值顺序:局部空间--全局空间--内置空间

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


    作用域名称空间:

    内置空间+全局空间 == 全局空间

    局部空间

    python关键字是存在内置空间的

    py文件中顶头写的内容存在全局空间

    函数内写的变量存在局部空间 局部空间数据不能共享,是独立的

    函数的嵌套:

    def func():
        print(1)
    def func1():
        print(2)
        func()
    func1()           # 函数名+()不管在哪都是调用     调用的时候先定义后调用
    
    结果:
    2
    1
    def func():
        print(1):
        def func2():
            print(2)
        func2()
    func()          #一层一层的找,同级也遵守从上到下的执行顺序

    globals 查看全局作用域内容

    locals 查看局部作用域内容 在哪个位置就查看哪个局部

    global

    a = 10
    def func():
        global a     #声明要修改全局变量a的值
        a = 10
        print(a)
    func()
    print(a)

    结果:
    10
    10
    a = 10
    def func():
        global b      #全局内没有变量b,会直接创建一个b,赋值为10
        b = 10
        print(a)
    func()
    print(a)
    
    结果:
    10
    10

    nonlocal

    n = 1
    def func():
        n = 10
        def func1():
            nonlocal n     #修改上一层的变量值,上一层没有就继续找再上一层,找到最外层局部,不可以使用全局变量
            n = 100
            print(n)
        func1()
    func()
    print(n)
    
    结果:
    100
    1

    和global不一样的是,当nonlocal要修改的变量在局部变量当中找不到时,会直接报错

    补充知识:

    三元运算符:
    return x if x > y else y

    如果x>y条件成立,返回x,不然就返回y

  • 相关阅读:
    实验-继承&super.doc
    Python库
    Github高级搜索
    代码报错记录
    编程问题解决
    百科
    【Android】添加依赖包
    【Android】导航栏(加图片icon)和不同页面的实现(viewpager+tablayout)
    【Android】Android Studio真机调试的问题统整
    【AD】自己画板的备忘
  • 原文地址:https://www.cnblogs.com/sandy-123/p/10251208.html
Copyright © 2011-2022 走看看