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零碎的知识进行补充,即字符串的格式化输出,以及深浅拷贝,接下来我们将对这两种进行一一介绍. 一.字符串格式化输出 关于字符串的格式化输出,我们需要了解为什么需要字 ...
随机推荐
- Maven构建项目时index.jsp文件报错
错误为:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 原 ...
- MySQL —— 如何快速对比数据?
我们在MySql中想要对比下两个不同的实例上的数据并且找出差异,除了主键之外我们还要对比每一个字段,应该怎么做呢? 方案一:写一个程序将两个实例里面的每一行数据都分别取出来对比,但是耗时我们无法估计, ...
- ubuntu13.04如何修改保存屏幕亮度
ubuntu13.04如何修改保存屏幕亮度 入手ubuntu两月有余,最初只是想装个ubuntu学习下linux,然后搞了个win7和ubuntu的双系统,最后干脆将win7干掉了,直接让ubu ...
- sqlserver学习笔记(四)—— 创建table表
1.新建数据库TestDB 2.为TestDB数据库新建表UserInfo 创建名为UserInfo的表,包括以上字段,其中ID为主键并设置标识规范,Nation设置默认值“中国”. 为表格添加一些数 ...
- ACCESS与MSSQL比较:SQL语句关于时间格式使用的注意点
ACCESS与MSSQL比较:SQL语句关于时间字符串的使用:ACCESS数据库使用 # 来控制时间格式字符串:mssql数据库使用单引号 ' 来控制时间格式字符串.例: ACCESS版本:UPDAT ...
- hibernate中对象集合的保存
一.在java web设计中经常使用对象进行操作,在hibernate中对象集合的保存(一对多) 1需要进行如下步骤: 1) 设计数据表关系 2)引入jar包,需要注意引入数据库connector 3 ...
- [Jobdu] 题目1390:矩形覆盖
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入 ...
- Bootstrap的js插件之折叠(collapse)
data-toggle="collapse"--指明该元素具有折叠功能: data-target--设置元素打开折叠后指向的元素链接. .collapse--用来设置元素为折叠内容 ...
- Nmap速查手册
http://drops.wooyun.org/tips/4333 From:http://highon.coffee/docs/nmap/ 0x00:说明 只是一个快速查询手册,理论的东西都没有补充 ...
- JqERY
//下拉菜单样式 /*查找全部select的下拉菜单*/ function getElemsById(cot_val){ return document.getElementById(cot_val) ...