精华内容
下载资源
问答
  • 如果python解释器能在这些情况下警告我,我将不胜感激。在假设您从以下代码(版本1)开始:#!/usr/bin/env python... lots of code ...def foo(version):if version == 1:return "Correct"return "Oops!"... lots more...

    在处理足够大的python文件时,我意外地在全局范围内重新定义了一个函数。如果python解释器能在这些情况下警告我,我将不胜感激。在

    假设您从以下代码(版本1)开始:#!/usr/bin/env python

    ... lots of code ...

    def foo(version):

    if version == 1:

    return "Correct"

    return "Oops!"

    ... lots more code ...

    print foo(1)

    正常工作:

    ^{pr2}$

    然后你想改变一些东西,称之为版本2。您重写了foo函数,但是您要么没有意识到旧函数的存在,要么忘记删除它。你的结局是:#!/usr/bin/env python

    def foo(version):

    if version == 2:

    return "Correct"

    return "Oops!"

    ... lots of code ...

    def foo(version):

    if version == 1:

    return "Correct"

    return "Oops!"

    ... lots more code ...

    print foo(2)

    但效果不太好:Oops!

    我知道python允许这样的代码:def monkey():

    return "patching"

    monkey = "is"

    def monkey():

    return {"really": "fun"}

    但用这种方式使用“def”似乎是一种糟糕的做法。在

    有没有办法让我得到这种行为:#!/usr/bin/env python --def-strict

    def foo():

    pass

    def foo():

    pass

    结果:Traceback (most recent call last):

    File ..., line 3, in

    NameError: name 'foo' is already defined

    展开全文
  • atexit 模块介绍python atexit 模块定义了一个 register 函数,用于在 python 解释器中注册一个退出函数,这个函数解释器正常终止时自动执行,一般用来做一些资源清理操作。 atexit 按注册相反顺序执行这些函数...

    atexit 模块介绍

    python atexit 模块定义了一个 register 函数,用于在 python 解释器中注册一个退出函数,这个函数在解释器正常终止时自动执行,一般用来做一些资源清理的操作。 atexit 按注册的相反顺序执行这些函数; 例如注册A、B、C,在解释器终止时按顺序C,B,A运行。

    Note:如果程序是非正常crash,或者通过os._exit()退出,注册的退出函数将不会被调用。

    官方文档:https://docs.python.org/3.5/library/atexit.html

    注册 退出函数

    atexit.register(func, *args, **kargs)

    将func作为要在终止时执行的函数。任何要传递给func的可选参数必须作为参数传递给register() 。可以多次注册相同的函数和参数。

    当程序退出的时候,按先进后出的顺序调用注册的函数。如果退出函数在执行过程中抛出了异常,atexit会打印异常的信息,并继续执行下一下回调,直到所有退出函数执行完毕,它会重新抛出最后接收到的异常。

    示例

    通过装饰器的方式:

    #!/usr/bin/env python

    from atexit import register

    def main():

    print('Do something.')

    @register

    def _atexit():

    print('Done.')

    if __name__ == '__main__':

    main()

    非装饰器的方式:

    #!/usr/bin/env python

    from atexit import register

    def main():

    #pass

    print('XX')

    def goodbye(name, adjective):

    print('Goodbye, %s, it was %s to meet you.' % (name, adjective))

    register(goodbye, 'Donny', 'nice')

    # or:

    # register(goodbye, adjective='nice', name='Donny')

    if __name__ == '__main__':

    main()

    删除退出函数[一般用不到]

    > atexit.unregister(func)

    >

    从解释器关闭时运行的函数列表中删除func。 调用unregister()后,当解释器关闭时,即使它被注册了多次,func也不会被调用。如果func没有注册过的话,则unregister()什么也不会做。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

    本文标题: 深入理解python中的atexit模块

    本文地址: http://www.cppcns.com/jiaoben/python/181309.html

    展开全文
  • 本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的 和 作为例子,看看 Python 的函数是怎样“无中生有”的:可以看出,我们定义的两个函数都没有写任何的 return 语句,但是在函数调用后,都能取...

    “ Python猫 ” ,一个值得加星标的 公众号

    Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写 return 语句。

    本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的 和 作为例子,看看 Python 的函数是怎样“无中生有”的:

    可以看出,我们定义的两个函数都没有写任何的 return 语句,但是在函数调用后,都能取到一个返回值。

    它们的执行效果跟直接写 return 语句相比,是完全相同的:

    这 4 个例子属于两种类型:一种没有写 return,但是都有隐藏的 return 返回值;一种写了 return,而且实际也有返回值。

    也就是说,后者在语义和行为上表现一致,前者虽然在语义上缺失,但是却有实际的行为和结果;后者的行为是显性的,前者却是隐性的。

    《Python之禅》中有一句“显性胜于隐性(Explicit is better than implicit)”,但是,出于简洁和便利的考虑(Simple is better than complex),实际上 Python 中有很多行为都是隐性的,会把一些在语法层面的事交给解释器去完成。

    上一期的 是隐性的行为,本文前两个例子也是如此。

    使用dis查看字节码,就可以看到其背后的小动作:

    在这个对比图中,可以看出上述 4 个函数的解释器指令一模一样!

    不管有没有写 return,它们都会执行 return 的逻辑,而且默认的返回值就是 None。

    那么,问题来了:Python 的函数为什么能默认返回 None 呢?它是如何实现的呢?

    答案就在解释器中,当 CPython 解释器执行到函数的最后一个代码块时,若发现没有返回值,它就会主动地加上一个 Py_None 值返回(出自:compile.c):

    也就是说,如果定义的函数没有返回值,Python 解释器就会(强行地)默认给我们注入一段返回逻辑!

    对于解释器的这种附赠的服务,大家是觉得很贴心,还是嫌弃它多事呢?

    这样的做法似乎没多少好处,但似乎也没有坏处?

    那么,这就会引出新的问题:Python 为什么要求函数都要有返回值呢?为什么它不像某些语言那样,提供一个 void 关键字,支持定义无返回值的空函数呢?

    关于这个问题,我们将在下一期“Python为什么”系列文章中揭晓。

    如果你觉得这些问题很有启发性,那你应该会喜欢这些文章:

    1、

    2、

    3、

    4、

    5、

    6、

    7、

    8、

    9、

    10、

    11、

    本文属于“Python为什么”系列(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以一个个“为什么”式的问题为切入点,试着展现 Python 的迷人魅力。所有文章将会归档在 Github 上,项目地址:https://github.com/chinesehuazhou/python-whydo

    展开全文
  • 每种编程语言为了表现出色,并且实现卓越性能,都需要有大量编译器级与解释器优化。由于字符串是任何编程语言中不可或缺一个部分,因此,如果有快速操作字符串能力,就可以迅速地提高整体性能。在本文中...

    作者:arpit

    译者:豌豆花下猫(“Python猫”公众号作者)

    声明:本翻译是出于交流学习的目的,基于 CC BY-NC-SA 4.0 授权协议。为便于阅读,内容略有改动。

    每种编程语言为了表现出色,并且实现卓越的性能,都需要有大量编译器级与解释器级的优化。

    由于字符串是任何编程语言中不可或缺的一个部分,因此,如果有快速操作字符串的能力,就可以迅速地提高整体的性能。

    在本文中,我们将深入研究 Python 的内部实现,并了解 Python 如何使用一种名为字符串驻留(String Interning)的技术,实现解释器的高性能。 本文的目的不仅在于介绍 Python 的内部知识,而且还旨在使读者能够轻松地浏览 Python 的源代码;因此,本文中将有很多出自 CPython 的代码片段。

    全文提纲如下:

    4f76629952b42afe7f0aca7b4339ad65.png

    (在 Python猫 公众号回复数字“0215”,下载高清思维导图)

    1、什么是“字符串驻留”?

    字符串驻留是一种编译器/解释器的优化方法,它通过缓存一般性的字符串,从而节省字符串处理任务的空间和时间。

    这种优化方法不会每次都创建一个新的字符串副本,而是仅为每个适当的不可变值保留一个字符串副本,并使用指针引用之。

    每个字符串的唯一拷贝被称为它的intern,并因此而得名 String Interning。Python猫注:String Interning 一般被译为“字符串驻留”或“字符串留用”,在某些语言中可能习惯用 String Pool(字符串常量池)的概念,其实是对同一种机制的不同表述。intern 作为名词时,是“实习生、实习医生”的意思,在此可以理解成“驻留物、驻留值”。

    查找字符串 intern 的方法可能作为公开接口公开,也可能不公开。现代编程语言如 Java、Python、PHP、Ruby、Julia 等等,都支持字符串驻留,以使其编译器和解释器做到高性能。

    1129577945280d3c4c7a4121ebf7cc45.png

    2、为什么要驻留字符串?

    字符串驻留提升了字符串比较的速度。 如果没有驻留,当我们要比较两个字符串是否相等时,它的时间复杂度将上升到 O(n),即需要检查两个字符串中的每个字符,才能判断出它们是否相等。

    但是,如果字符串是固定的,由于相同的字符串将使用同一个对象引用,因此只需检查指针是否相同,就足以判断出两个字符串是否相等,不必再逐一检查每个字符。由于这是一个非常普遍的操作,因此,它被典型地实现为指针相等性校验,仅使用一条完全没有内存引用的机器指令。

    字符串驻留减少了内存占用。 Python 避免内存中充斥多余的字符串对象,通过享元设计模式共享和重用已经定义的对象,从而优化内存占用。

    3、Python的字符串驻留

    像大多数其它现代编程语言一样,Python 也使用字符串驻留来提高性能。在 Python 中,我们可以使用is运算符,检查两个对象是否引用了同一个内存对象。

    因此,如果两个字符串对象引用了相同的内存对象,则is运算符将得出True,否则为False。>>> 'python' is 'python'

    True

    我们可以使用这个特定的运算符,来判断哪些字符串是被驻留的。在 CPython 的,字符串驻留是通过以下函数实现的,声明在 unicodeobject.h 中,定义在 unicodeobject.c 中。PyAPI_FUNC(void) PyUnicode_InternInPlace(PyObject **);

    为了检查一个字符串是否被驻留,CPython 实现了一个名为PyUnicode_CHECK_INTERNED的宏,同样是定义在 unicodeobject.h 中。

    这个宏表明了 Python 在PyASCIIObject结构中维护着一个名为interned的成员变量,它的值表示相应的字符串是否被驻留。#define PyUnicode_CHECK_INTERNED(op) \

    (((PyASCIIObject *)(op))->state.interned)

    4、字符串驻留的原理

    在 CPython 中,字符串的引用被一个名为interned的 Python 字典所存储、访问和管理。 该字典在第一次调用字符串驻留时,被延迟地初始化,并持有全部已驻留字符串对象的引用。

    4.1 如何驻留字符串?

    负责驻留字符串的核心函数是PyUnicode_InternInPlace,它定义在 unicodeobject.c 中,当调用时,它会创建一个准备容纳所有驻留的字符串的字典interned,然后登记入参中的对象,令其键和值都使用相同的对象引用。

    以下函数片段显示了 Python 实现字符串驻留的过程。void

    PyUnicode_InternInPlace(PyObject **p)

    {

    PyObject *s = *p;

    .........

    // Lazily build the dictionary to hold interned Strings

    if (interned == NULL) {

    interned = PyDict_New();

    if (interned == NULL) {

    PyErr_Clear();

    return;

    }

    }

    PyObject *t;

    // Make an entry to the interned dictionary for the

    // given object

    t = PyDict_SetDefault(interned, s, s);

    .........

    // The two references in interned dict (key and value) are

    // not counted by refcnt.

    // unicode_dealloc() and _PyUnicode_ClearInterned() take

    // care of this.

    Py_SET_REFCNT(s, Py_REFCNT(s) - 2);

    // Set the state of the string to be INTERNED

    _PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL;

    }

    4.2 如何清理驻留的字符串?

    清理函数从interned字典中遍历所有的字符串,调整这些对象的引用计数,并把它们标记为NOT_INTERNED,使其被垃圾回收。一旦所有的字符串都被标记为NOT_INTERNED,则interned字典会被清空并删除。

    这个清理函数就是_PyUnicode_ClearInterned,在unicodeobject.c 中定义。void

    _PyUnicode_ClearInterned(PyThreadState *tstate)

    {

    .........

    // Get all the keys to the interned dictionary

    PyObject *keys = PyDict_Keys(interned);

    .........

    // Interned Unicode strings are not forcibly deallocated;

    // rather, we give them their stolen references back

    // and then clear and DECREF the interned dict.

    for (Py_ssize_t i = 0; i < n; i++) {

    PyObject *s = PyList_GET_ITEM(keys, i);

    .........

    switch (PyUnicode_CHECK_INTERNED(s)) {

    case SSTATE_INTERNED_IMMORTAL:

    Py_SET_REFCNT(s, Py_REFCNT(s) + 1);

    break;

    case SSTATE_INTERNED_MORTAL:

    // Restore the two references (key and value) ignored

    // by PyUnicode_InternInPlace().

    Py_SET_REFCNT(s, Py_REFCNT(s) + 2);

    break;

    case SSTATE_NOT_INTERNED:

    /* fall through */

    default:

    Py_UNREACHABLE();

    }

    // marking the string to be NOT_INTERNED

    _PyUnicode_STATE(s).interned = SSTATE_NOT_INTERNED;

    }

    // decreasing the reference to the initialized and

    // access keys object.

    Py_DECREF(keys);

    // clearing the dictionary

    PyDict_Clear(interned);

    // clearing the object interned

    Py_CLEAR(interned);

    }

    5、字符串驻留的实现

    既然了解了字符串驻留及清理的内部原理,我们就可以找出 Python 中所有会被驻留的字符串。

    为了做到这点,我们要做的就是在 CPython 源代码中查找PyUnicode_InternInPlace 函数的调用,并查看其附近的代码。下面是在 Python 中关于字符串驻留的一些有趣的发现。

    5.1 变量、常量与函数名

    CPython 对常量(例如函数名、变量名、字符串字面量等)执行字符串驻留。

    以下代码出自codeobject.c,它表明在创建新的PyCode对象时,解释器将对所有编译期的常量、名称和字面量进行驻留。PyCodeObject *

    PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount,

    int nlocals, int stacksize, int flags,

    PyObject *code, PyObject *consts, PyObject *names,

    PyObject *varnames, PyObject *freevars, PyObject *cellvars,

    PyObject *filename, PyObject *name, int firstlineno,

    PyObject *linetable)

    {

    ........

    if (intern_strings(names) < 0) {

    return NULL;

    }

    if (intern_strings(varnames) < 0) {

    return NULL;

    }

    if (intern_strings(freevars) < 0) {

    return NULL;

    }

    if (intern_strings(cellvars) < 0) {

    return NULL;

    }

    if (intern_string_constants(consts, NULL) < 0) {

    return NULL;

    }

    ........

    }

    5.2 字典的键

    CPython 还会驻留任何字典对象的字符串键。

    当在字典中插入元素时,解释器会对该元素的键作字符串驻留。以下代码出自 dictobject.c,展示了实际的行为。

    有趣的地方:在PyUnicode_InternInPlace函数被调用处有一条注释,它问道,我们是否真的需要对所有字典中的全部键进行驻留?int

    PyDict_SetItemString(PyObject *v, const char *key, PyObject *item)

    {

    PyObject *kv;

    int err;

    kv = PyUnicode_FromString(key);

    if (kv == NULL)

    return -1;

    // Invoking String Interning on the key

    PyUnicode_InternInPlace(&kv); /* XXX Should we really? */

    err = PyDict_SetItem(v, kv, item);

    Py_DECREF(kv);

    return err;

    }

    5.3 任何对象的属性

    Python 中对象的属性可以通过setattr函数显式地设置,也可以作为类成员的一部分而隐式地设置,或者在其数据类型中预定义。

    CPython 会驻留所有这些属性名,以便实现快速查找。 以下是函数PyObject_SetAttr的代码片段,该函数定义在文件object.c中,负责为 Python 对象设置新属性。int

    PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)

    {

    ........

    PyUnicode_InternInPlace(&name);

    ........

    }

    5.4 显式地驻留

    Python 还支持通过sys模块中的intern函数进行显式地字符串驻留。

    当使用任何字符串对象调用此函数时,该字符串对象将被驻留。以下是 sysmodule.c 文件的代码片段,它展示了在sys_intern_impl函数中的字符串驻留过程。static PyObject *

    sys_intern_impl(PyObject *module, PyObject *s)

    {

    ........

    if (PyUnicode_CheckExact(s)) {

    Py_INCREF(s);

    PyUnicode_InternInPlace(&s);

    return s;

    }

    ........

    }

    6、字符串驻留的其它发现

    只有编译期的字符串会被驻留。 在解释时或编译时指定的字符串会被驻留,而动态创建的字符串则不会。Python猫注:这一条规则值得展开思考,我曾经在上面踩过坑……有两个知识点,我相信 99% 的人都不知道:字符串的 join() 方法是动态创建字符串,因此其创建的字符串不会被驻留;常量折叠机制也发生在编译期,因此有时候容易把它跟字符串驻留搞混淆。推荐阅读《join()方法的神奇用处与Intern机制的软肋》

    包含 ASCII 字符和下划线的字符串会被驻留。 在编译期间,当对字符串字面量进行驻留时,CPython 确保仅对匹配正则表达式[a-zA-Z0-9_]*的常量进行驻留,因为它们非常贴近于 Python 的标识符。Python猫注:关于 Python 中标识符的命名规则,在 Python2 版本只有“字母、数字和下划线”,但在 Python 3.x 版本中,已经支持 Unicode 编码。这部分内容推荐阅读《醒醒!Python已经支持中文变量名啦!》

    参考材料

    展开全文
  • 智慧职教2020猪病防治(永州职业技术学院)题目答案更多相关问题【判断题】采用净现值指标比选互斥方案时,判别准则为净现值最大方案为最优方案。A. 对B. 错【单选题】可对吩噻嗪类抗精神病药引起锥外系反应是A. ...
  • 6月份发生相关业务如下: (1)1日,该企业自行研发某项非专利技术,当月研发成功并投入使用,其中研究阶段支出150万【单选题】以下程序拟读取一个姓氏,查找其对应年龄并输出:#include #include #include struct...
  • 文件是一个存储在辅助存储器上数据序列,可以包含任何数据内容,其中包括两种类型:文本文件和二进制文件。文件读写是Python代码调用电脑文件主要功能,能被...)(1)通过解释器内置open()函数打开一个文件,并...
  • ''' 一: 名称空间namespaces 名称空间就是存放名字与值绑定... 特点: 存放是python解释器自带名字,len,print 2. 生命周期: 解释器启动则产生,解释器关闭则销毁 全局名称空间 1. 特点: 存放是全局名字(...
  • 内容概要:一、文件操作二、字符编码解码三、函数介绍一、文件操作文件操作流程:打开文件,得到文件句柄并赋值给一个变量通过句柄对文件进行操作关闭文件基本操作:1 #/usr/bin/env python2 #-*- coding:utf-8 -*-3...
  • 一:名称空间 1:什么是名称空间: ... 生命周期为:在python解释器启动时创建,在解释器关闭时销毁  全局名称空间:除了内置,函数都是在全局名称空间中  生命周期为:在执行文件时,创建全局名称空间,...
  • Python函数(2)

    2019-07-13 21:50:00
    特性:解释器执行程序时,如果遇到函数,随着函数的结束而关闭临时名称空间,但是如果遇到闭包,那么闭包空间不会随着函数的结束而关闭 本质:就是在内存中开辟一个空间,常贮存一下内容,以便以后调用 判断是一个...
  • 1、名称空间 1、名称空间namespace--存放名字地方 ... 内置名称空间:存放内置名字,该名称空间随着解释器启动就产生,解释器关闭则销毁(print、len、input等) >>> max <built-in f
  • 如果您知道什么是上下文管理...在本例中,我在open函数的帮助下打开myfile.txt。try/finally块确保即使发生意外异常,也将关闭myfile.txt。fp=open(r"C:\Users\SharpEl\Desktop\myfile.txt")try:for line in fp:prin...
  • 生命周期:Python解释器启动则产生,Python解释器关闭则销毁 例如:print、input、int … 全局名称空间 全局名称空间:运行顶级代码所产生名字,或者说除函数内定义以及内置外,剩下都是全局名称空间 生命...
  • MATLAB 自动将兼容 Python 数据转换为MATLAB数据。对于没有兼容 MATLAB 类型 Python ...在运行 MATLAB 时关闭 Python 解释器Python 对象保存(序列化)到 MAT 文件中 交互式 Python 帮助(在没...
  • C++调用Python的API总结

    2020-03-30 12:35:01
    文章目录初始化和关闭Python解释器load Python模块直接Load一个Python写好的文件(假设文件名叫pytest.py, 在当前目录下)Load一个已经安装好的Python模块 (假设模块名叫pytest)从pModule模块里load需要调用的函数并...
  • N Randhawa..56如果你知道什么是上下文管理,那么你就不需要了解__enter__和__exit__...在尝试/终于块确保即使发生意外异常myfile.txt将被关闭.fp=open(r"C:\Users\SharpEl\Desktop\myfile.txt")try:for line...
  • open 函数Python通过解释器内置open()函数打开一个文件,并实现该文件与一个变量关联,其语法格式如下: = open([,[,encoding=None]])参数解释::当脚本和文件存放在同一路径下时,可以使用文件名(相对路径);...
  • 失效:Python解释器关闭 全局名称空间: 存放是:文件级别定义名字与值绑定 生效:执行python文件时,将该文件级别定义名字与值绑定关系存放起来 失效:文件执行完毕 局部名称空间: 存放是...
  • 文件是一个存储在辅助存储器上数据序列,可以包含任何数据内容,其中包括两种类型:文本文件和二进制文件。文件读写是Python代码调用电脑文件主要功能,能被...)(1)通过解释器内置open()函数打开一个文件,并...
  • //关闭 Python 脚本解释器 Py_Finalize(); return 0; } ``` Python模块 ``` import numpy as np def add(a,b): return a+b,a-b ``` 报错: import python failed!! Process finished with exit ...
  • mod_python

    2013-08-19 21:20:53
    启动一个cgi脚本很慢,因为每一次的...数据库连接也可以在web服务器初始化的时候建立,并保持连接直到服务器关闭,每当要产生一个新的页面时,一个特殊的函数就会被调用,所有关于请求的数据被传入该函数。这个函数...
  • 广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!... 看来大多数“当前目录”命令都会返回系统的python解释器的目录,而不是模块的目录。 ...
  • # Python day11

    2020-12-29 16:49:15
    Python day11 函数对象 在python中,函数是第一类对象,函数是第一等公民 函数可以当做变量来用,可以赋值,可以被引用 函数嵌套 ...​ 生命周期为python解释器启动则删除,关闭则销毁 2.全局名称空间:存放
  • 【简答题】完成4.2课后作业后并订正后,在此处上传照片【单选题】对于不同类型失语症训练重点,描述错误是【多选题】有关交流效果促进法训练方正确是【填空题】要关闭Python解释器,可使用函数 或快捷键 。...
  • python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解释器强交互的函数。 本文将会频繁地使用该模块的getsizeof()方法,因此,我先简要介绍一下:该方法用于获取一个...
  • # 下载器的类 class downloader: # 构造函数 def __init__(self): # 要下载的数据连接 self.url='http://51reboot.com/blogimg/pc.jpg' # 要开的线程数 self.num=8 # 存储文件的名字,...
  • 名称空间(namespaces)顾名思义即存放名字与对象映射/绑定关系地方,是对栈区划分,在不同空间中可以存放相同名字,从而解决命名冲突问题 ...存活周期:python解释器启动则产生,python解释器关闭则销毁 >
  • 函数进阶

    2018-08-14 15:41:00
    namespace(名称空间) 名称空间就是用来存放名字与值内存地址绑定关系地方(内存空间)名称空间分为三大类 内置名称空间:存放python解释器自带名字 全局名称空间:存放是文件级别名字 局部名称空间:在函数内...
  • 函数嵌套与闭包函数

    2019-09-23 23:42:08
    1,内置名称空间:存放python解释器自带名字,在解释器启动时生效,关闭就失效 2,全局名称空间:存放文件级别名字(没有缩进),在执行文件时候生效,在文件结束或者在文件执行期间被删除时失效 3,局部...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

关闭python解释器的函数

python 订阅