zoukankan      html  css  js  c++  java
  • 函数三

    接着上一次说到的*args和**kwargs的混合使用,这次我们来讲讲它们分别的应用场景:

    *的应用场景:(*后面都是打散)

    def sum2(*args):  #args=(1,2,3)
        res=0
        for num in args:
            res+=num
        return res
    print(sum2(1,2,3,4.5,6))
    
    电脑输出:
    21

    **的应用场景:(**是引入字典,输出的是字典形式)

    def auth(name,pwd,**kwargs):
        print(name)
        print(pwd)
        print(kwargs)
    auth(name='egon',pwd='123',group='group1')
    电脑输出:
    egon
    123
    {'group':'group1'}

    今天的内容:

    一:函数嵌套;在函数内定义其他函数

    def func1():
        print('from func1')
        def func2():
            print('from func2')
        print(func2)
        func2()    
    func1()
    电脑输出:
    from func1
    <function func1.<locals>.func2 at 0x105a99620>
    from func2

    注意:首先电脑输出的第二东西叫做内存地址;

    我们先来看看这个首先我们输出的是def func1函数下面的第一条指令也就是print(‘from func1’)

    其次我们再输出def func2函数下面的指令,但func2不加括号意思是打印上一个指令的函数内存地址

    最后我们打印出‘from func2’

    我们再来一个:你们猜猜结果是什么?

    def f1()
        print('f1')
        def f2():
            print('f2')
            def f3():
                print('f3')
            f3()
        f2()
    f1()

    答案: 

    f1
    f2
    f3

    二,名称空间与作用域

    1、名称空间:存放名字与值绑定关系的地方

    x=111111111

    我们先存放1,1专门有地方存。然后,我们再存放x和存放1的地址,绑定关系。

    2、名称空间分为三类:

    1、内置名称空间

    存放python解释器自带的名字,内置的名字在打开python解释器时失效,解释器关闭则失效。

    比如:

    print

    for

    input

    这些有作用的词

    2、全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者删除失效

    (定头写的都是全局,缩紧的都是局部的)

    x=1

    def func():

       pass

    if 10>3:

      y=333

    while True:

       a=333

    3.局部名称空间

    存放函数内定义的名字(函数的参数以及函数内的名字都存放在局部名称空间)

    在函数调用时临时生效,不调用就失效。

    def func(x):

    4、加载顺序:内置名称空间---》全局名称空间-----》局部名称空间

       查找名字:局部名称——》全局名称空间——》内置名称空间

    5作用域:发挥作用的范围

        全局作用域:包含的是内置名称空间与全局名称空间的名字。

    特点:

    1.在任何位置都能够访问到

    2.该范围内的名字会伴随程序的整个生命周期

        局部作用域:包含的是局部名称空间的名字

    特点:

    1.只有在函数内使用

    2.调用函数时生效,调用结束失效

    三:函数对象:

    1、可以被引用

    f=func

    2、func可以当作参数传给x

    def func():
        print('from func')
    def bar():
        print(x)
        x()
    bar(func)

    电脑输出:

    <function func at 0x1018dde18>
    from func

    3、func还可以当作返回值

    def fun():
        print('from func')
    def bar(x):
        return x 
    res=bar(func)
    print(res)
    res()
    
    
    电脑输出;
    <function fun at 0x1072b6e18>
    from func

    4、可以当中容器类型的元素

    def auth():
        print('登录。。。')
    def register():
        print('注册。。。')
    def search():
        print('查看。。。')
    def interactive():
        print('互动。。。')
    l=[auth,reigster,search,interactive]
    print(l)

    注意:要用列表形式

    四;闭包函数:

    定义在函数内部的函数,并且该函数包含对外部函数作用域中名字的引用。
    闭:指的是定义在函数内部的函数
    作用域关系。在函数定义阶段就规定死了,与调用位置无关
    def outter():
        x=2
        def inner():
            print('from inner',x)
        
         return inner
    f=outter()
    print(f)
    x=1111111111.   (这里x不会干扰到上面的x,因为函数在定义阶段就规定死了)
    f()

    了解:

    为函数体传值的方式

    方式一:

    import requests
        def get(url):
             response=requests.get(url)
            if response.status_code== 200:
                print(response.text)
    
    get('https://www.baidu.com')

    方式二:

    import requests
    import time
    
     def outter(url): #url='https://www.baidu.com'
    
         # url='https://www.baidu.com'
         def get():
             response=requests.get(url)
             if response.status_code == 200:
                 print(response.text)
    
         return get
    
    
    
     baidu=outter('https://www.baidu.com')
     python=outter('https://www.python.org')
    
     baidu()
  • 相关阅读:
    Myeclipse 10.7 android(安卓) 开发环境搭建
    matplotlib
    tophat cufflinks cuffcompare cuffmerge 的使用
    shell 随机从文件中抽取若干行
    liftover的使用/用法
    命令行运行R语言脚本(代码)
    R: NULL, NA, and NaN
    SOME USEFUL MACHINE LEARNING LIBRARIES.
    Flutter实战:手把手教你写Flutter Plugin
    Flutter学习笔记(五)
  • 原文地址:https://www.cnblogs.com/wuchenyu/p/8665758.html
Copyright © 2011-2022 走看看