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

浅谈Python中模块

工具脚本就是通过sys.argv读取使用参数 最后,注意到这两行代码 if __name__=='__main__': test() 当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量...__name__置为__main__,而如果在其他地方导入该hello模块时,__name__则为其他地方,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外代码,最常见就是运行测试...name__就是特殊变量,hello模块定义文档注释也可以用特殊变量__doc__访问,我们自己变量一般不要用这种变量名; 类似_xxx和__xxx这样函数或变量就是非公开(private),不应该被直接引用...换句话说,仅仅是声明而已,要访问还是能访问,private函数或变量应该被别人引用,那它们有什么用呢?...private函数隐藏起来了,这样,调用greeting()函数不用关心内部private函数细节,这也是一种非常有用代码封装和抽象方法,即: 外部不需要引用函数全部定义成private,只有外部需要引用函数才定义为

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

腾讯大佬 Python 编码规范

__ == '__main__': # 开启游戏服务 start() Linux 平台上,一个 python 源码文件应该以下部分组成。...Windows 平台上,编码格式声明必须位于 python 文件第一行。Linux 平台上,编码格式声明通常位于 python 文件第二行,第一行是 python 解释器路径声明。 #!...# ===================================== if __name__ == '__main__': server.run() 空行 编码格式声明...、模块导入、常量和全局变量声明、顶级定义和执行代码之间空两行 顶级定义之间空两行,方法定义之间空一行 在函数或方法内部,可以在必要地方空一行以增强节奏感,但应避免连续空行 空格 在二元运算符两边各空一格...如果文档字符串内容不能在一行内写完,首行须以句号、 问号或惊叹号结尾,接一空行,结束三重双引号必须独占一行。 导入模块 导入总应该放在文件顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。

1.5K10

导入Python模块执行了所有代码,你不知道__name__变量是什么意思吗?

让我们先使用一段代码示例来探索导入和脚本工作方式。假设这些代码位于名为foo.py文件中。...python foo.py Python解释器会使用下面的代码为__name__变量赋值,也就是说,__name__变量值是"__main__"。...B 10.0 after __name__ guard 如果当前Python脚本按着主程序方式执行(使用python命令),那么__name__变量值就是"__main__"。...module 如果一个Python脚本,同时即可以作为主程序执行,也可以作为模块被导入,这就要求在模块被导入时不执行作为主程序执行时代码,所以如果是在主程序中执行代码,应该使用__main__变量进行判断...关于__name__一些疑问 有的同学问,在脚本文件中可以有多个__name__校验代码吗?

1.3K20

Python - 面向对象(三)公共变量,受保护变量,私有变量

_protected) if __name__ == "__main__": p1 = protectedson() p1.test() print("子类实例对象调用类属性...__private) def __test(self): print("私有方法") if __name__ == "__main__": p1 = privates...类内部调用私有变量: 私有变量 类对象 - 外部调用私有变量 私有变量 私有方法 知识点 在变量和方法前加两个下划线 即可变成private类型变量or方法 __ 子类无法访问父类私有变量、方法...外部真的不能访问吗?其实是可以访问,python解释器对外会把 变成 _类名__私有变量 ,无论是实例对象还是类对象,都能通过 ...._类名__私有变量 来调用私有变量,算是一种间接调用 __私有变量 总结 无论是受保护型变量还是私有变量,其实在外部还是能访问,所以并不能真正控制属性访问权限; 带着疑问 那我们如何才能控制属性访问权限呢

1.5K20

Python面向对象小白入门手把手级别教程

1.类(对象)定义和使用一个class类定义大致如下:1.首行是class 开头,然后类名字+:号结尾2.类内部定义各种函数和变量;3.函数内就封装各种功能。...例子:def public_method(self): print("这是一个公有方法")私有方法以双下划线__开始方法被视为私有方法。只能在其类定义内部被访问,从外部不能直接访问。...__private_method() 调用失败")为了防止报错阻挡其他打印,这里依然用到了try代码。...它们不能从类外部直接访问,只能在类内部使用。私有属性通常用于类内部逻辑,不希望外部访问。例子:class MyClass: def __init__(self): self....__private_attribute = "这是一个私有属性" 受保护属性:以单个下划线_开头属性被视为受保护。这是一种约定,用于指示属性不应该在类外部使用,尽管实际上它们可以被访问。

33020

闭包终结解惑

注意,当13行调用了show函数时, show函数内部closure函数并没有调用,只是做了定义并返回给了fun变量, 在15行执行时才进行了调用。...我们都知道在函数内部定义局部变量, 当函数执行完后就应该释放了, 而15行执行时正确输出了str变量值, 说明局部变量str变量并未释放。...这就是闭包带来效果,如果把show函数看成是外部函数, closure函数看成是内部函数, 则这个内部函数即为闭包函数。所以闭包可以理解成定义在一个函数内部函数。...world" def closure(): print(str) return closure if __name__ == '__main__': fun...那如果仍要使用外部函数中变量呢? 解决办法是用nonlocal关键字声明变量

23910

Python中命名空间、作用域以及lo

,底层基础决定上层建筑嘛,基础打牢一些,对今后编程还是会有些帮助。     ...函数定义了本地作用域,函数除了打包代码外,函数还为程序增加了一个额外命名空间层:在默认情况下,一个函数所有变量名都与函数命名空间相关联,这就意味着:一个def内定义变量名能够被def内代码使用,不能在函数外部引用这样变量名...模块定义是全局作用域。本地作用域与全局作用域有如下关系: .    内嵌模块是全局作用域。每个模块都是一个全局作用域,对于外部全局变量就变成了模块属性 .   ...赋值变量名除非声明为全局变量,否则均为本地变量。在默认情况下,使用函数定义内部变量名是位于本地作用域内。...如果想给一个在函数内部位于模块文件顶层变量嘛赋值(也就是说想在函数内部给全局变量名赋值)就需要在函数内部使用global语句声明,否则按照LEGB原则,函数内部会认为它是本地变量

97121

Python|Google Python样式指南(3)

3.8.5和内联注释 最需要写注释是代码中那些技巧性部分.如果你在下次代码审查时候必须解释一下,那么应该马上写注释.对于复杂操作,应该在其操作开始前写上注释.对于不是一目了然代码,应在其行尾添加注释...,位于模块注释和文档字符串之后,模块全局变量和常量之前.导入应该按照从最通用到最不通用顺序分组: Python将来导入语句。...3.17 Main 在Python中, pydoc以及单元测试要求模块必须是可导入.代码应该在执行主程序前总是检查 if __name__ == '__main__' , 这样当模块被导入时主程序就不会被执行...__ == '__main__': app.run(main) 否则,请使用: def main(): ... if __name__ == '__main__': main()...Yes:def func(a: int = 0) -> int: ...No:def func(a:int=0) -> int: ... 3.19.5键入变量 如果内部变量类型很难或无法推断,则可以通过两种方式指定其类型

80732

python中闭包

闭包 绑定外部变量函数 返回一个绑定外部变量内部函数 嵌套函数 内部函数用到了外部变量 外部函数返回内部函数 def pow_x(x):     def echo(value):         ...x=2         return value ** x     return echo if __name__=='__main__':     lst = (pow_x(2), pow_x(3)..., pow_x(4))     for p in lst:         print p(2) 内部变量不能"改变"外部变量 内部函数用到了外部变量为list,则可以从外部内部改变值,并且即使外部没有引用也不会回收...__ == '__main__':     lst2 = pow_y([1, 1])     print "closure powy", lst2(2)     print "closure powy"..., lst2(3)     print "closure powy", lst2(4) 一个关于闭包应用  #!

72720

由一个例子到python名字空间

---- 名字空间(Namespace) 比如我们定义一个"变量" In [14]: a NameError: name 'a' is not defined 所以,这里更准确叫法应该是名字。...分类 python里面有很多名字空间,每个地方都有自己名字空间,互不干扰,不同空间中两个相同名字变量之间没有任何联系一般有4种: LEGB四种 locals: 函数内部名字空间,一般包括函数局部变量以及形式参数...内部函数只可以读取外部函数变量,而不能做修改,其实本质还是因为赋值涉及到了新建locals()名字。...这个例子其实也给了我们一个启发,我们知道内部函数无法直接修改外部函数变量值,如例2,如果借助list的话, 就可以了吧!比如把想要修改变量塞到一个list里面,然后在内部函数里面做改变!...看到这里,对作用域理解应该有一点点了吧。 延伸 与闭包不同 我们都知道闭包是把外部函数值放到func.func_closure里面,为什么不像上面的例子一样直接放到函数名字空间呢?

36910

06. Python模块

import os if __name__ == '__main__': """ 返回当前工作目录 """ """ Return a unicode string representing...在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。而在Python中,是通过_前缀来实现。...类似__xxx__这样变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义文档注释也可以用特殊变量__doc__访问,我们自己变量一般不要用这种变量名...类似_xxx和__xxx这样函数或变量就是非公开(private),表示这个函数是“内部实现细节”或“私有”,不应该被直接引用或调用。...如: import my_module as mm # 定义变量名为mm if __name__ == '__main__': # 这里通过重定义变量名mm访问模块功能 print

8810

读写文本文件

最后我们使用finally代码来关闭打开文件,释放掉程序中获取外部资源,由于finally代码不论程序正常还是异常都会执行到(甚至是调用了sys模块exit函数退出Python环境,finally...都会被执行,因为exit函数实质上是引发了SystemExit异常),因此我们通常把finally称为“总是执行代码”,它最适合用来做释放外部资源操作。...if __name__ == '__main__': main() 除了使用文件对象read方法读取文件之外,还可以使用for-in循环逐行读取或者用readlines方法将文件按行读取到一个列表容器中...注意如果需要对文件内容进行追加式写入,应该将模式设置为'a'。如果要写入文件不存在会自动创建文件而不是引发异常。...if __name__ == '__main__': main()

1K30

小议Python模块和包

对于每个模块都有所谓内部外部之分,从这种角度来看,模块很像一种类,模块内部代码属于模块私有成员,由模块控制,对外暴露接口给外部使用。...模块会被作为一个实例,为其内部提供一个全局名字空间,在一次session中,无论模块源文件是否发生变化,已经初始化后实例都不会发生变化。先创建一个module.py文件,放入下面代码。...所以这里牵扯到Python热更新问题了,标准库提供了importlib.reload方法解决这个问题,但是这个方案缺点在于它并不会递归修改成员引用(当你模块成员被其它变量引用时,引用成员并不会发生变化...在module模块添加: print(__name__) 运行本模块,此时__name__返回是__main__,而直接导入module时会返回模块自身名字。...'test'] 这样其它成员便被隐藏了,和类私有成员一样,这不是真正意义权限设置,你还是有办法可以看到。

60340

【Python100天学习笔记】Day6 Python中函数和模块使用

函数参数 函数是绝大多数编程语言中都支持一个代码构建,但是Python中函数与其他语言中函数还是有很多不太相同地方,其中一个显著区别就是Python对函数参数处理。...解释器直接执行模块名字才是__main__ if __name__ == '__main__': print('call foo()') foo() print('call...在上面的foo函数中我们定义了变量b,这是一个定义在函数中局部变量(local variable),属于局部作用域,在foo函数外部并不能访问到它;但对于foo函数内部bar函数来说,变量b属于嵌套作用域...在实际开发中,我们应该尽量减少对全局变量使用,因为全局变量作用域和影响过于广泛,可能会发生意料之外修改和使用,除此之外全局变量比局部变量拥有更长生命周期,可能导致对象占用内存长时间无法被垃圾回收...减少全局变量使用就意味着我们应该尽量让变量作用域在函数内部,但是如果我们希望将一个局部变量生命周期延长,使其在定义它函数调用结束后依然可以使用它值,这时候就需要使用闭包,这个我们在后续内容中进行讲解

42010
领券