首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python炫技操作:模块重载五种方法

重载模块方法一 如果你使用 python2(记得前面 foo 文件夹下加一个 __init__.py),一个 reload 方法可以直接使用 >>> from foo import bar successful...重载模块方法四 如果你对包加载器有所了解(详细可以翻阅我以前写文章:https://iswbm.com/84.html) 还可以使用下面的方法 >>> from foo import bar successful...'] >>> >>> import foo.bar successful to be imported 有没有发现在前面的例子里我使用都是 from foo import bar,在这个例子里,却使用...import foo.bar,这是为什么呢?...这是因为如果你使用 from foo import bar 这种方式,想使用移除 sys.modules 来重载模块这种方法是失效。 这应该算是一个小坑,不知道的人,会掉入坑爬不出来。

44730
您找到你想要的搜索结果了吗?
是的
没有找到

Python更牛语言?看我用元类(metaclass)花式创建Python

Python定义再简单不过了。不过你想过动态定义一个Python?What?动态定义,是动态解析Python代码?不,这仍然是静态定义。...Python从Smalltalk语言中借用了一个非常特殊类概念。 大多数语言中,类只是描述如何产生对象代码段。...但是,与Python大多数事情一样,它为您提供了一种手动进行操作方法。 还记得type函数?该函数可以让你知道对象类型。...假设已经一个Foo类,该类中有若干个属性,都是小写,如bar等。现在要求将Foo类中所有的属性名都改成大写。要实现这个需求,当然可以一个一个地修改Foo属性名,不过这简直太愚蠢了。...Python2,需要设置__metaclass__变量,不过Python3,使用元类方式有所改变,需要在MyClass(metaclass=...)中使用metaclass指定元类函数,代码如下

78220

Python程序员最常犯10个错误,你中招了吗?

比如上面的代码,有人可能期望反复调用foo()时返回'baz',以为每次调用foo()时,bar值都为[],即一个空列表。...常见错误9:不熟悉Python2Python3之间差异 先来看看foo.py文件代码: import sys def bar(i): if i == 1: raise KeyError...下面是处理代码,Python2Python3运行结果一致: import sys def bar(i): if i == 1: raise KeyError(1)...为什么呢?因为当Python解释器关闭时,该模块全局变量值都会被置为None。因此,在上述示例调用__del__函数时,foo值已经为None。...应用上述方法,修改mod.py文件如下: import foo import atexit def cleanup(handle): foo.cleanup(handle) class Bar

98510

捕获异常然后再抛出另一个异常正确姿势

raise ValueError(e) 不知道大家有没有注意到这样抛出异常方式一个很严重问题,那就是 重新抛出另一个异常时候,捕获上一个异常 traceback 信息丢失了(python2...Python 2 那么 Python 2 下如果我们不想丢失捕获异常 traceback 信息的话,应该 怎样重新抛出异常呢?...)/元组/None traceback: traceback 对象/None 下面我们来看看上面的方法是否可以应对多层异常捕获然后再抛出情况: : $ cat a.py import sys def...Python 3 Python 3 下默认会附加上捕获上个异常 trackback 信息(保存在异常实例 __traceback__ 属性): : $ cat a.py def div():...上面 else 之所以用 exec 去定义 reraise 函数是因为 raise tp, value, tb Python 3 下会报语法错误,所以用 exec 来 绕过 Python 3 下语法错误检查

1.2K20

Python中下划线5种含义

单下划线和双下划线Python变量和方法名称中都各有其含义一些含义仅仅是依照约定,被视作是对程序员提示 - 而有一些含义是由Python解释器严格执行。...如果你想知道“Python变量和方法名称单下划线和双下划线含义什么?”,我会尽我所能在这里为你解答。..._bar = 23 如果你实例化此类,并尝试访问__init__构造函数定义foo和_bar属性,会发生什么情况?...__baz = 'overridden' 现在,你认为foo,_bar和__baz值会出现在这个ExtendedTest类实例上?...你也可以拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值。 同样,这个含义只是“依照约定”,并不会在Python解释器触发特殊行为。

1.5K70

我终于把Python中下划线含义弄清楚了(憋了很久了)

单下划线和双下划线Python变量和方法名称具有含义。其中某些含义仅是约定俗成内容,旨在作为对程序员提示-某些含义是由Python解释器实施。..._bar = 23 如果你实例化这个类并试图访问它构造函数定义foo和_bar属性,会发生什么?让我们来看看: >>> t = Test() >>> t.foo 11 >>> t....让我们看看这个列表,并查找原始变量名foo、_bar和_ bazi—时保证会发现一些有趣变化。 self.foo属性列表foo变量显示为未修改foo。 self....还可以解包表达式中使用单个下划线。同样,这只是“按照约定”意思,Python解释器没有触发任何特殊行为。单个下划线只是一个有效变量名。...下划线命名模式 这是我本文中介绍五个下划线模式Python含义简要概述。

9.9K21

掌握 Python 中下划线 5 个潜规则

单下划线和双下划线 Python变量和方法名称中都各有其含义一些含义仅仅是依照约定,被视作是对程序员提示 - 而有一些含义是由Python解释器严格执行。...单前导下划线 _var 当涉及到变量和方法名称时,单个下划线前缀一个约定俗成含义。它是对程序员一个提示:意味着Python社区一致认为它应该是什么意思,但程序行为不受影响。..._bar = 23 如果你实例化此类,并尝试访问__init__构造函数定义foo和_bar属性,会发生什么情况?...__baz = 'overridden' 现在,你认为foo,_bar和__baz值会出现在这个ExtendedTest类实例上?...你也可以拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值。同样,这个含义只是“依照约定”,并不会在Python解释器触发特殊行为。

50320

Python 5 种不同下划线含义你都知道

单下划线和双下划线 Python变量和方法名称中都各有其含义一些含义仅仅是依照约定,被视作是对程序员提示 - 而有一些含义是由Python解释器严格执行。...单前导下划线 _var 当涉及到变量和方法名称时,单个下划线前缀一个约定俗成含义。它是对程序员一个提示:意味着Python社区一致认为它应该是什么意思,但程序行为不受影响。..._bar = 23 如果你实例化此类,并尝试访问__init__构造函数定义foo和_bar属性,会发生什么情况?...__baz = 'overridden' 现在,你认为foo,_bar和__baz值会出现在这个ExtendedTest类实例上?...你也可以拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值。同样,这个含义只是“依照约定”,并不会在Python解释器触发特殊行为。

84831

Python入门之Python单例模式和元类

单例模式要点三个,一个是某个类只能有一个实例,二是它必须自行创建这个实例,三是它必须自行向整个系统提供这个实例。   Python,我们可以使用多种方法来实现单例模式:     1. ...= MyClass()   将上面的代码保存在文件test1.py,然后这样使用: from .test1 import my_class_obj my _class_obj.foo() 2....可能开发混淆     使用单例对象(尤其类库定义对象)时,开发人员必须记住自己不能使用new关键字实例化对象。..., 'echo_bar')) #True my_foo = FooChild() my_foo.echo_bar() #True 你可以看到,Python,类也是对象,你可以动态创建类...class Foo(Bar): pass      Python做了如下操作:     Foo中有__metaclass__这个属性

89480

看完这篇,python面试稳了!(上)

obj.方式去访问里面的名字,这本身就是一种封装 第二层面:类把某些属性和方法隐藏起来(或者说定义成私有的),只内部使用、外部无法访问,或者留下少量接口(函数)供外部访问。...指的是基类同一个方法不同派生类中有着不同功能 二.python面向对象继承什么特点 继承概念实现方式主要有2类:实现继承、接口继承。...foo() >>>bar() 12 说明:barfoo函数代码块定义。...我们称barfoo内部函数。bar局部作用域中可以直接访问foo局部作用域中定义m、n变量。简单说,这种内部函数可以使用外部函数变量行为,就叫闭包。 四.什么是装饰器?...含义:装饰器本质就是函数,为其他函数添加附加功能 原则:不修改被修饰函数代码,不修改被修饰函数调用方式 应用场景:无参装饰器在用户登录 认证中常见,参装饰器flask路由系统见到过 import

39030

解决python3关于import疑难杂症

作用体现: from foo import bar # 将模块foo函数/变量bar导入到当前模块命名空间, 可以直接访问bar import foo # 导入模块foo同时保留它自己命名空间...简介 Pythonimport常用操作为: import somemodule # 导入整个模块 from somemodule import somefunction # 从模块中导入单个函数...# 方法三: from mypackage import module_foo import mypackage.module_foo 对于python2而言,方法一和方法二都是相对导入,效果一样,...方法二:sys.path添加查找路径 前面的报错是找不到bar_package模块名,因为直接运行的话sys.path第一个路径就是module_3.py路径,自然找不到它上层bar_package...需要注意是,如果你使用是如下这种写法还是可能出现问题: """module_3.py """ import sys sys.path.append("../") from bar_package import

1.5K30

Python正则表达式(一)

Python正则表达式 假设有一个字符串s,程序,需要检查'123'是否为这个字符串一部分,这种需求可以用下面的代码实现。...>>> s = 'foo123bar' >>> '123' in s True 如果你不仅想知道'123'是否字符串s,还想知道它在字符串什么位置,可以使用字符串.find()或者.index(...比如,判断字符串是否像'123'这样有数字组成字符串,例如'foo123bar'、'foo456bar'、'234baz'、和'qux678'`,再用上面的方法,就会太麻烦了,这就要正则表达式出场了...熟悉模块使用方法可能会知道,还能这样做: from re import search search(...)...正则表达式元字符 正则表达式一些特定字符,它们被称为元字符,每个元字符,代表了正则表达式某个特殊含义,能够满足正则匹配搜索引擎查询之需。

49210

Google 内部 Python 代码风格指南

Python2必须继承于object,可能会隐藏像是操作符重载之类副作用.对于子类而言,属性可能有些迷惑性. 2.13.4 建议 通常会有简单而且轻量级访问和设定方法新代码里使用属性来访问或设定数据...import Python3已经可用了(译者:目前Python2已经不受支持了),尽管不是每个项目都准备好使用Python3,所有的代码应该兼容Python3并且可能情况下在Python3环境下测试...其他from __future__import语句,看喜好使用.我们建议不包含unicode_literals因为其并无明显优势,这是由于隐式默认编码转换导致其Python2.7内很多地方被引入了...对于Python2兼容代码,用Text,一些很罕见情况下,str可能可用.当在不同Python版本之间返回值类型不同时候通常是为了照顾兼容性.避免使用unicode,因为Python3不存在....对于Python2兼容,处理文本数据(Pythonstr或unicode,Python3str)代码,使用Text.对于只有Python3代码,优先使用str. from typing import

1.1K10

谷歌Python代码风格指南,翻译版来了!

Python2必须继承于object,可能会隐藏像是操作符重载之类副作用.对于子类而言,属性可能有些迷惑性. 2.13.4 建议 通常会有简单而且轻量级访问和设定方法新代码里使用属性来访问或设定数据...import Python3已经可用了(译者:目前Python2已经不受支持了),尽管不是每个项目都准备好使用Python3,所有的代码应该兼容Python3并且可能情况下在Python3环境下测试...其他from __future__import语句,看喜好使用.我们建议不包含unicode_literals因为其并无明显优势,这是由于隐式默认编码转换导致其Python2.7内很多地方,...对于Python2兼容代码,用Text,一些很罕见情况下,str可能可用.当在不同Python版本之间返回值类型不同时候通常是为了照顾兼容性.避免使用unicode,因为Python3不存在....对于Python2兼容,处理文本数据(Pythonstr或unicode,Python3str)代码,使用Text.对于只有Python3代码,优先使用str. from typing import

1.4K20

Google Python 编码规范指南(建议收藏)

描述应该包括所需类型和含义. 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数), 应该详细列出*foo和**bar....仅仅是从逻辑上关闭文件和sockets, 那么它们仍然可能会被其共享程序无意中进行读或者写操作. 只有当它们真正被关闭, 对于它们尝试进行读或者写操作将会抛出异常, 并使得问题快速显现出来....导入应该按照从最通用到最不通用顺序分组: 标准库导入 第三方库导入 应用程序指定导入 每种分组, 应该根据每个模块完整包路径按字典序排序, 忽略大小写. import foo from foo import...bar from foo.bar import baz from foo.bar import Quux from Foob import ar 语句 通常每个语句应该独占一行 不过, 如果测试结果与测试语句一行放得下...except ValueError: baz(foo) try: bar(foo) except ValueError: baz(foo) 访问控制 Python, 对于琐碎又不太重要访问函数

4.1K41

Google Python代码风格指南

Python2必须继承于object,可能会隐藏像是操作符重载之类副作用.对于子类而言,属性可能有些迷惑性. 2.13.4 建议 通常会有简单而且轻量级访问和设定方法新代码里使用属性来访问或设定数据...import Python3已经可用了(译者:目前Python2已经不受支持了),尽管不是每个项目都准备好使用Python3,所有的代码应该兼容Python3并且可能情况下在Python3环境下测试...其他from __future__import语句,看喜好使用.我们建议不包含unicode_literals因为其并无明显优势,这是由于隐式默认编码转换导致其Python2.7内很多地方被引入了...对于Python2兼容代码,用Text,一些很罕见情况下,str可能可用.当在不同Python版本之间返回值类型不同时候通常是为了照顾兼容性.避免使用unicode,因为Python3不存在....对于Python2兼容,处理文本数据(Pythonstr或unicode,Python3str)代码,使用Text.对于只有Python3代码,优先使用str. from typing import

1.2K20

Python 代码风格指南谷歌版

Python2必须继承于object,可能会隐藏像是操作符重载之类副作用.对于子类而言,属性可能有些迷惑性. 2.13.4 建议 通常会有简单而且轻量级访问和设定方法新代码里使用属性来访问或设定数据...import Python3已经可用了(译者:目前Python2已经不受支持了),尽管不是每个项目都准备好使用Python3,所有的代码应该兼容Python3并且可能情况下在Python3环境下测试...其他from __future__import语句,看喜好使用.我们建议不包含unicode_literals因为其并无明显优势,这是由于隐式默认编码转换导致其Python2.7内很多地方,...对于Python2兼容代码,用Text,一些很罕见情况下,str可能可用.当在不同Python版本之间返回值类型不同时候通常是为了照顾兼容性.避免使用unicode,因为Python3不存在....对于Python2兼容,处理文本数据(Pythonstr或unicode,Python3str)代码,使用Text.对于只有Python3代码,优先使用str. from typing import

1.2K30

Google 内部 Python 代码风格指南(译)

Python2必须继承于object,可能会隐藏像是操作符重载之类副作用.对于子类而言,属性可能有些迷惑性. 2.13.4 建议 通常会有简单而且轻量级访问和设定方法新代码里使用属性来访问或设定数据...import Python3已经可用了(译者:目前Python2已经不受支持了),尽管不是每个项目都准备好使用Python3,所有的代码应该兼容Python3并且可能情况下在Python3环境下测试...其他from __future__import语句,看喜好使用.我们建议不包含unicode_literals因为其并无明显优势,这是由于隐式默认编码转换导致其Python2.7内很多地方被引入了...对于Python2兼容代码,用Text,一些很罕见情况下,str可能可用.当在不同Python版本之间返回值类型不同时候通常是为了照顾兼容性.避免使用unicode,因为Python3不存在....对于Python2兼容,处理文本数据(Pythonstr或unicode,Python3str)代码,使用Text.对于只有Python3代码,优先使用str. from typing import

1.7K10

Python 代码风格指南谷歌版

Python2必须继承于object,可能会隐藏像是操作符重载之类副作用.对于子类而言,属性可能有些迷惑性. 2.13.4 建议 通常会有简单而且轻量级访问和设定方法新代码里使用属性来访问或设定数据...import Python3已经可用了(译者:目前Python2已经不受支持了),尽管不是每个项目都准备好使用Python3,所有的代码应该兼容Python3并且可能情况下在Python3环境下测试...其他from __future__import语句,看喜好使用.我们建议不包含unicode_literals因为其并无明显优势,这是由于隐式默认编码转换导致其Python2.7内很多地方,...对于Python2兼容代码,用Text,一些很罕见情况下,str可能可用.当在不同Python版本之间返回值类型不同时候通常是为了照顾兼容性.避免使用unicode,因为Python3不存在....对于Python2兼容,处理文本数据(Pythonstr或unicode,Python3str)代码,使用Text.对于只有Python3代码,优先使用str. from typing import

1.2K20
领券