Python零碎(一)
Python中的__name__和__main__含义详解
在写Python代码和看Python代码时,我们常常可以看到这样的代码:
def main():
...... if __name == "__main__":
main();
其中的函数名main,也可以是其他任意的,你所设置的名字。
这里,就出现了,我们此处所要解释的
__name__和__main__
__name__:
如果是放在Modules模块中,就表示是模块的名字;
如果是放在Classs类中,就表示类的名字;
__main__:
模块第一次被导出(import)后,系统会自动为其创建一个域名空间(namespace);
(模块,都是有自己的名字的)此处的脚本的主模块的名字,始终都叫做__main__。
代码示例:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
【整理】Python中的__name__和__main__含义详解
http://www.crifan.com/python_detailed_explain_about___name___and___main__ Version: 2012-11-17
Author: Crifan
Contact: http://www.crifan.com/contact_me/
""" def square(x):
return x * x print "test: square(42) ==",square(42);
对应的,运行结果也是很正常的:
test: square(42) == 1764
但是呢,往往我们所见到的,和我们以后自己也会遇到的,自己写的,有条理的,可复用的做法,那肯定是
那对应的square等函数,专门放到一个文件中,然后被别人调用,此时,就是这样的:
对应的模块文件是mymath.py,里面有我们实现的函数square:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
【整理】Python中的__name__和__main__含义详解
http://www.crifan.com/python_detailed_explain_about___name___and___main__ Version: 2012-11-17
Author: Crifan
Contact: http://www.crifan.com/contact_me/
""" def square(x):
return x * x print "test: square(42) ==",square(42);
然后别的python文件__name___and___main__.py中,导入此mymath模块,然后使用其square函数:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
【整理】Python中的__name__和__main__含义详解
http://www.crifan.com/python_detailed_explain_about___name___and___main__ Version: 2012-11-17
Author: Crifan
Contact: http://www.crifan.com/contact_me/
""" import mymath; print "In caller, test for mymath: square(12)=",mymath.square(12);
然后运行结果是:
test: square(42) == 1764
In caller, test for mymath: square(12)= 144
此处,我们看到了,也同时出现了,原本用于mymath.py中去测试square函数的打印结果:
test: square(42) == 1764
而这样的内容,很明显,是作为我模块的调用者,不希望看到的。也不关心的。
此时,我们所希望的是:
作为模块mymath.py本身,希望有自己的相关的调试的代码,用于调试自己模块函数,演示如何使用等等代码;
但是又不希望在被别的,本模块的调用者,所执行到,所看到;
此时,就可以用上述的__main__来实现了:
把mymath.py改为:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
【整理】Python中的__name__和__main__含义详解
http://www.crifan.com/python_detailed_explain_about___name___and___main__ Version: 2012-11-17
Author: Crifan
Contact: http://www.crifan.com/contact_me/
""" def square(x):
return x * x if __name__ == "__main__":
print "test: square(42) ==",square(42);
此时:
1. 作为mymath.py本身,自己运行时,可以运行到此处的代码,调试,验证自己的函数square执行的是否正确:
test: square(42) == 1764
2.同时,作为mymath.py的调用者__name___and___main__.py,在import mymath的时候,也不会看到对应的代码执行的结果了:
In caller, test for mymath: square(12)= 144
其中的__main__,就是:
作为模块mymath.py本身:
作为脚本自己去运行的话,对应的模块名,就是上面所解释的,始终叫做__main__
关于这点,上述代码已经验证过了。因为mymath.py中的__name__,就是对应的,内置的变量,通过判断,的确是__main__,然后才会去执行到对应的模块的测试代码的。
如果被当做一个模块被别人调用的时候,对应的模块mymath.py的模块名,就是mymath;
关于这点,我们可以来验证一下,把__name___and___main__.py改为:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
【整理】Python中的__name__和__main__含义详解
http://www.crifan.com/python_detailed_explain_about___name___and___main__ Version: 2012-11-17
Author: Crifan
Contact: http://www.crifan.com/contact_me/
""" import mymath; print "In caller, test for mymath: square(12)=",mymath.square(12);
print "As module be imported, mymath module name=",mymath.__name__;
再去运行,就可以看到输出的结果是mymath了:
In caller, test for mymath: square(12)= 144
As module be imported, mymath module name= mymath
=========================================
python 调用Qt Creator创建的ui文件:
from PyQt4 import QtGui,QtCore,uic # pyqt4版本
app=QtGui.QApplication(sys.argv)
qtCreatorFile='~~\demo\login.ui' #***.ui文件所在具体路径
loginui=uic.loadUi(qtCreatorFile) #通过ui文件路径调用ui文件
loginui.show() #显示控件
#该种引用方式属于直接调用和显示已经制作完毕的窗体控件,无法再对控件属性做进一步操作和修改。若要更改控件属性,需要将ui文件转换成代码文件,并将代码中控件属性变量修改为全局变量使得外部可以访问
PYQT5 GUI开发窗口类型QApplication的调用流程:
app = QtWidgets.QApplication(sys.argv) # 首先必须实例化QApplication类,作为GUI主程序入口 aw = MainWindows() # 实例化QtWidgets.QMainWindow类,创建自带menu的窗体类型QMainWindow
aw.setWindowTitle("QMainWindow demo") # 设置窗口标题
aw.show() # 显示窗体
sys.exit(app.exec_()) #当来自操作系统的分发事件指派调用窗口时,应用程序开启主循环(mainloop)过程,当窗口创建完成,需要结束主循环过程,这时候呼叫sys.exit()方法来,结束主循环过程退出,并且释放内存。为什么用app.exec_()而不是app.exec()?因为exec是python系统默认关键字,为了以示区别,所以写成exec_
Python零碎(一)的更多相关文章
- python零碎知识点一
dir(object),列出对象所有可以用的的方法(参数可以为任意对象,例如class,func等) >>>dir('str') ['__add__', '__class__', ' ...
- [转]Python零碎知识(2):强大的zip
一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky') 2 >>> age=(2001,2003 ...
- python零碎知识点
0.规范化 使用Ctrl+Alt+L可以将代码排列格式更加规范化 1.浮点数 1.23x109就是1.23e9或者12.3e8:0.000012可以写成1.2e-5 2.字符串 >>> ...
- 初学python - 零碎的知识点
* 标识符命名规则 数字,字母,下划线组成,数字不能开头区分大小写 * 注释 单行:#:多行:‘ ‘ ‘ ,“”“: * 进制标识 b:二进制 o:八进制 d:十进制x:十六进制 转换:format( ...
- python --- 零碎
1.匿名输出: lambda x : print(x))(100) #冒号前输入量 ,冒号后是输出量结果:100 2.导入调用其他python文件: test1.py #第一个python文件 def ...
- Python 零碎信息-基础 02
1. range xrange 的差别 1.1 range 返回列表对象. 1.2 xrange 返回xrange对象 不需要返回列表里面的值, 节省内存. >>> range(1 ...
- Python 零碎信息-基础 01
1. """ 可以插入多行文字. print """ abC 123' 456''" #单引号, 双引号, 也没有关系 " ...
- Python学习(26):Python函数式编程
转自 http://www.cnblogs.com/BeginMan/p/3509985.html 前言 <core python programming 2>说: Python不大可能 ...
- 第四篇:python基础之杂货铺
在这一篇中我们将对上几篇的Python零碎的知识进行补充,即字符串的格式化输出,以及深浅拷贝,接下来我们将对这两种进行一一介绍. 一.字符串格式化输出 关于字符串的格式化输出,我们需要了解为什么需要字 ...
随机推荐
- Linux命令-权限管理命令:chmod
特别注意:在linux中,目录通常是有r和x两个权限的.删除文件的前题是要对文件所在的目录有w的权限才可以. cd /tmp 切换到tmp目录下面 touch chengshi.list 在当前目录中 ...
- 温度测量【RTD】
原理 温度是表征物体冷热程度的物理量,它可以通过物体随温度变化的某些特性(如电阻.电压变化等特性)来间接测量,通过研究发现,金属铂(Pt) 的阻值跟温度的变化成正比,并且具有很好的重现性和稳定性,利用 ...
- MySQL多线程同步-Transfer使用测试
由淘宝核心系统研发—数据库组开发的MySQL-Transfer,用于解决MySQL主从同步延迟的问题,从MySQL单线程到多线程的工作模式.可以观看@丁奇的相关资料: MySQL多线程同步-Trans ...
- atitit.集合的filt操作细分 filter总结
atitit.集合的filt操作细分 filter总结 1. Css sltr 1 2. 基本选择器(根据id,class,元素名) 2 3. 层次选择器 3 4. 过滤选择器 3 5. First, ...
- MongoDB Query 的几个方法
Query.All("name", "a", "b");//通过多个元素来匹配数组Query.And(Query.EQ("name ...
- 让低版本IE也能正常运行HTML5+CSS3网站的3种解决方案
现在我们可以选择浏览器非常多,所以浏览器的环境也是种类繁多,同一个浏览器也是包含各种不同的版本,不同的版本之间的渲染方法也存在差异,,它们支持的 HTML5.CSS3 特性恐怕也不尽相同.这种情况于是 ...
- OpenLDAP 使用记录
导出数据: slapcat -l export.ldif
- C语言 · 数组查找及替换
算法训练 数组查找及替换 时间限制:1.0s 内存限制:512.0MB 问题描述 给定某整数数组和某一整数b.要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序. ...
- [Eth]网络查看命令:route
最近在调试网络,出现问题,两个网口分别接外网内网,结果不同 http://www.cnblogs.com/peida/archive/2013/03/05/2943698.html
- Unix网络编程中的五种I/O模型_转
转自:Unix网络编程中的的五种I/O模型 下面主要是把unp第六章介绍的五种I/O模型. 1. 阻塞I/O模型 例如UDP函数recvfrom的内核到应用层.应用层到内核的调用过程是这样的:首先把描 ...