• 函数


    函数

    函数是对功能的封装

      语法:

        def 函数名(形参列表):

          函数体(代码块,return)

      调用

        函数名(实参列表)

    返回值

    1.return:在函数执行的时候,如果遇到return.直接返回

    2.如果函数什么都不写,不写return.得到的是None.

    3.在函数中写return 值.返回一个值.

    4.在函数中可以返回多个返回值,return 值1, 值2,  值3......, 接收的是元组.

    参数

    函数执行的时候给函数传递消息.

    *形参:函数声明的位置的变量

    *实参:函数调用的时候给的具体的值

    传参:把实参交给形参的过程

    #单行注释
    '''多行注释'''
    # 函数注释
    def func(a, b):
        """
        这个函数是用来计算a和b的和
        :param a: 第一个数据
        :param b: 第二个数据
        :return: 返回的是两个数的和
        """
        return a + b
    
    print(func.__doc__) # document文档
    

      

     1.实参:

       1.位置参数,按照形参的参数位置,给形参传值

       2.关键字参数,按照形参的名字给形参传值

       3.混合参数.即用位置参数,也用关键参数

     2.形参:

       1.位置参数,按照形参的参数位置,给形参传值

       2.默认值参数  先位置后默认值

       3.动态传参 

        1).*args 位置参数动态传参

    def chi(*li):
        print(li)
    chi('米饭', '面条', '粥')
    chi('馒头', '盖浇饭')
    chi('馒头')               #返回的是一个元组
    输出结果:
    ('米饭', '面条', '粥')
    ('馒头', '盖浇饭')
    ('馒头',)

        2).**kwargs 关键字参数动态传参

    def chi1(**food):
        print(food)
    chi1(good_food = '米饭', drink = '可乐')        #返回的是一个字典
    输出结果:
    {'good_food': '米饭', 'drink': '可乐'}
    

      位置参数动态传参和关键字参数动态传参一起使用的顺序: 

        顺序: 位置, *args, 默认值, **kwargs
    def fun(a, *args, c="哈哈",  **kwargs):
        print(a, args, c, kwargs)
    fun(1, 2, 3, 4,5, 6)
    输出结果:
    1 (2, 3, 4, 5, 6) 哈哈 {}

    def func(*args, **kwargs):    #无敌传参
    pass
     聚合:形参的位置*,**:聚合   聚合:把接收到的参数组合成一个元组

      打散:  实参的位置*,**: 打散   打散:把序列按顺序打散

      字典的打散和聚合需要两个**

    def fun(*args):
        print(args)
    lst = [1, 4, 7]
    fun(lst)                        #直接输入列表,列表整体作为一个参数传入函数
    fun(lst[0], lst[1], lst[2])     #输入列表的每一个元素,需要索引输入
    fun(*lst)   # 可以使用*把一个列表按顺序打散
    s = "臣妾做不到"
    fun(*s)     # 字符串串也可以打散, (可迭代对象)
    输出结果:
    ([1, 4, 7],)
    (1, 4, 7)
    (1, 4, 7)
    ('臣', '妾', '做', '不', '到')
    

     

    def fun(*args, **kwargs):       #聚合
        print(args)
        print(kwargs)
    list1 = [1, 2, 3, 4]
    tuple1 = (1, 2, 3, 4)
    list2 = ['alex', 'wusir', 1]
    dic = {'name': 'alex', 'age': 18}
    fun(*list1, *tuple1, *list2, **dic)     #打散
    输出结果:
    (1, 2, 3, 4, 1, 2, 3, 4, 'alex', 'wusir', 1)
    {'name': 'alex', 'age': 18}

    命名空间:

      1.内置名称空间

      2.全局名称空间

      3.局部名称空间

      作用域:

        1.全局作用域:内置名称空间+全局名称空间

        2.局部作用域: 局部(函数被调用)

        globals() 查看全局中的内容

        locals() 查看当前作用域中的内容

    a = 110     # 全局
    def fn():   #全局
        b = 20  # 局部
        def gn():   # 局部
            print(globals())  # 可以查看全局作用域中的内容
            print(locals())  # 查看当前作用域中的内容
        gn()
    fn()
    输出结果:
    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0327DF50>, 
    '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>,
    '__file__': 'C:/Users/Desktop/python.py', '__cached__': None, 'a': 110, 'fn': <function fn at 0x032507C8>} {}

      

     函数嵌套:函数可以互相嵌套

        global :在局部访问全局中的内容

    def func():
        global a  # 1. 可以把全局中的内容引入到函数内部 , 2. 如果全局中没有这个内容,就在全局创建一个变量
        a = 20      #将20赋值给a,这个a是全局中的a,此时全局中的a为20
        a += 10     # a = a+10   此时a=30
        print(a)    #a=30
    func()
    print(a)
    输出结果:
    30
    30

        nonlocal:在局部寻找外层函数中离它最近的那个变量

    a = 10
    def outer():
        a = 1
        def inner(): # 在inner中改变a的值
            nonlocal a # 寻找外层函数中离他最近的那个变量
            print(a)    #在outer()函数中找到a,此时a=1
            a = 20       #将20赋值给a 
            print(a)        #此时a=20
        inner()
    outer()
    输出结果:
    1
    20
    

      

    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
    

      

      

  • 相关阅读:
    【Nodejs】cheerio简单示例
    【复习】请求转发与请求重定向的区别:
    常用的 default.properties 文件 + 常用的 struts-default.xml 文件 + 常用的 struts-plugin.xml 文件 + 常用的 struts.xml 文件 + 常用的 struts.properties文件 + 常用的 web.xml 文件
    log4j WARN 的解决办法
    Caused by: 元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*)"。
    Myeclipse2017无法修改项目的Web Context Root问题
    springMVC的注解@RequestParam与@PathVariable的区别
    easyUI的控件
    easyui datagrid json 格式
    java泛型中<?>和<T>有什么区别?
  • 原文地址:https://www.cnblogs.com/Virous1887/p/9442865.html
Copyright © 2020-2023  润新知