当前位置: 首页 > 编程日记 > 正文

python高级-模块(14)

一、python中的模块

有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include <math.h>引入math.h这个头文件,否则是无法正常进行调用的。

那么在Python中,如果要引用一些其他的函数,该怎么处理呢?

在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。

说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块

模块的概念:

  • 每一个以扩展名py结尾的python源代码文件都是一个模块
  • 模块名同样也是一个标识符,需要符合标识符的命名规范
  • 在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具
  • 模块就好比工具包,要想使用这个工具包中的工具,就需要先导入这个模块

二、import

在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。

import导入

import 模块名1,模块名2 #不推荐

说明:在导入模块时,每个导入应该独占一行(推荐)

import 模块1
import 模块2

导入之后

通过模块名使用模块提供的工具---全局变量、函数、类

只用as指定模块的别名

如果模块的名字太长,可以使用as指定模块的别名,以方便在代码中的使用

import 模块名1 as 模块别名

注意:模块别名应该符合托峰值命名规范

为什么要加上模块名呢?

因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名

三、from … import

from...import导入

  • 如果想从某一模块中导入部分工具,就可以使用from...import的方式
  • import模块名是一次性把模块中所有的工具全部导入,并且通过模块名/别名访问
#从模块中导入某一个工具
from 模块名 import 工具名#可以通过as为工具指定别名

导入之后

  • 不需要通过模块名. 的方式使用模块提供的工具
  • 可以直接使用模块提供的工具  --- 全局变量、函数、类

注意:

  • 如果两个模块,存在同名的函数,name后导入模块的函数会覆盖先导入的函数
  • 开发时import代码应该统一写在代码的顶部,更容易及时发现冲突
  • 一定大仙冲突,可以使用as关键字,给其中一个工具起一个别名

from...import *

#从模块中导入所有工具
from 模块名 import *

注意:

这种法师不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查

案例:

demo.py(自定义的模块)

#全局变量
title = "模块1"#函数
def say_hello():print("我是%s"%title)#
class Dog(object):pass#
class Cat(object):pass

test.py中使用demo.py模块

#导入模块中的所有工具,同时为模块指定别名为myTest
import demo as myTest
#导入模块中所有工具,不推荐,工具同名不好排查
#from...import * 
#from...import导入模块中的部分工具(Dog类)
from demo import Dog
#为导入工具Cat类指定别名Test_Cat,防止与其他模块中工具重名
from demo import Cat as Test_CatmyTest.say_hello()
dog=Dog()
cat=Test_Cat()

四、python模块导入的搜索路径

  • 程序的主目录
  • PTYHONPATH目录(如果已经进行了设置)
  • 标准连接库目录(一般在/usr/local/lib/python2.X/)
  • 任何的.pth文件的内容(如果存在的话).新功能,允许用户把有效果的目录添加到模块搜索路径中去 .pth后缀的文本文件中一行一行的地列出目录。
  • 这四个组建组合起来就变成了sys.path了,
  • 当python import模块的时候,就通过sys.path里面的目录列表下面去查找。
  • sys.path是python的搜索模块的路径集,是一个list。
  • 查看sys.path方法:
import sys
print(sys.path)
['C:\\Users\\Se7eN_HOU\\Desktop\\Tools\\sublimetext3\\Sublime Text Build 3176 x86', 
'C:\\Program Files\\Python37\\python37.zip',
'C:\\Program Files\\Python37\\DLLs',
'C:\\Program Files\\Python37\\lib',
'C:\\Program Files\\Python37',
'C:\\Users\\Se7eN_HOU\\AppData\\Roaming\\Python\\Python37\\site-packages',
'C:\\Program Files\\Python37\\lib\\site-packages']

程序执行时导入模块路径

import sys
#因为sys.path是一个列表,所以可以在后面追加一个自定的模块路径
sys.path.append("/home/Se7eN_HOU")
#通过insert可以将路径插到前面
sys.path.insert(0,"Home/Se7eN")
print(sys.path)

运行结果为:

['Home/Se7eN', 
'C:\\Users\\Se7eN_HOU\\Desktop\\Tools\\sublimetext3\\Sublime Text Build 3176 x86',
'C:\\Program Files\\Python37\\python37.zip', 'C:\\Program Files\\Python37\\DLLs',
'C:\\Program Files\\Python37\\lib', 'C:\\Program Files\\Python37',
'C:\\Users\\Se7eN_HOU\\AppData\\Roaming\\Python\\Python37\\site-packages',
'C:\\Program Files\\Python37\\lib\\site-packages',
'/home/Se7eN_HOU']

五、模块制作

1、定义自己的模块

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。

比如有这样一个文件test.py,在test.py中定义了函数add

def  add(a,b):return a+b

2、调用自己的模块

那么在demo.py文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入

import test
result = test.add(1,2)
print(result)

运行结果为:3

3、测试模块

在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如:test.py文件

def add(a,b):return a+b#用来测试
ret = add(11,22)
print("in test.py 测试11+22 = %d"%ret)

如果此时,在demo.py文件中引入了此文件的话,想想看,测试的那段代码是否也会执行呢!

import test
result = test.add(1,2)
print(result)

运行结果为:

in test.py 测试11+22 = 33
3

至此,可发现test.py中的测试代码,应该是单独执行test.py文件时才应该执行的,不应该是其他的文件中引用而执行。为了解决这个问题,python在执行一个文件时有个变量__name__

test.py文件中:

def add(a,b):return a+b#用来测试
#ret = add(11,22)
#print("in test.py 测试11+22 = %d"%ret)
print("in test.py,__name__ is %s"%__name__)

运行结果为:

in test.py,__name__ is __main__

在demo.py文件中导入test.py模块运行为

import test
result = test.add(1,2)
print(result)

运行结果为:

in test.py,__name__ is test
3

可以根据__name__变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码

test.py模块中代码改为:

def add(a,b):return a+bif __name__ == "__main__":ret = add(11,22)print("in test.py 测试11+22 = %d"%ret)

在test.py中运行结果为:

in test.py 测试11+22 = 33

在demo.py中导入test.py模块

import test
result = test.add(1,2)
print(result)

运行结果为:3

这样我们在开中测试的代码,就不会在其他模块中出现了。

六、模块中的_ _all_ _

1、没有_ _all_ _

test.py模块

class Test(object):def test(self):print("---Test类中的test方法---")def test1():print("---test1方法---")def test2():print("---test2方法---")

在demo.py中导入test.py模块

from test import *
a = Test()
a.test()
test1()
test2() 

运行结果为:

---Test类中的test方法---
---test1方法---
---test2方法---

2、模块中有_ _all_ _

test.py模块

__all__ = ["Test","test1"]
class Test(object):def test(self):print("---Test类中的test方法---")def test1():print("---test1方法---")def test2():print("---test2方法---")

demo.py模块

from test import *
a = Test()
a.test()
test1()
test2() 

运行结果为:

---Test类中的test方法---Traceback (most recent call last):---test1方法---File "C:\Users\Se7eN_HOU\Desktop\Tools\sublimetext3\Sublime Text Build 3176 x86\demo.py", line 5, in <module>test2() 
NameError: name 'test2' is not defined

如果一个文件中有__all__变量,那么也就意味着只有这个变量中的元素,才会被from xxx import *时导入

七、系统sys模块介绍

sys是python自带模块,常用的函数有:

  • sys.argv: 实现从程序外部向程序传递参数。

  • sys.exit([arg]): 程序中间的退出,arg=0为正常退出。

  • sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。

  • sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。(见设置系统默认编码 )

  • sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回'mbcs',mac下返回'utf-8'.

  • sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

  • sys.platform: 获取当前系统平台。

1、sys.argv[]

sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键。因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。

下面我们通过一个极简单的test.py程序的运行结果来说明它的用法。

1 #test.py
2 
3 import sys
4 a=sys.argv[0]
5 print(a)

将test.py保存在c盘的根目录下。

在程序中找到 ‘运行’->点击->输入"cmd"->回车键   进入控制台命令窗口(如下图),先输入cd c:\   (作用是将命令路径改到c盘根目录),然后输入test.py运行我们刚刚写的程序:

得到的结果是C:\test.py,这就是0指代码(即此.py程序)本身的意思。

然后我们将代码中0改为1 :

a=sys.argv[1]

保存后,再从控制台窗口运行,这次我们加上一个参数,输入:test.py what

1 #test.py
2 import sys
3
4 a=sys.argv[1]
5 print(a)

运行结果是:

得到的结果就是我们输入的参数what,看到这里你是不是开始明白了呢。

那我们再把代码修改一下:

a=sys.argv[2:]

保存后,再从控制台窗台运行程序,这次多加几个参数,以空格隔开:

test.py a b c d e f

得到的结果为[‘b’, ’c’, ’d’, ’e’, ’f’]

应该大彻大悟了吧。Sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

2、sys.path已经在上面讲过了

3、sys.exit()

程序中间的退出, arg=0为正常退出
一般情况下执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)当然也可以用字符串参数,表示错误不成功的报错信息。

import sysdef exitfunc(value):print (value)sys.exit(0)print("hello")try:sys.exit(90)
except SystemExit as value:exitfunc(value)   print("come?")

运行结果:

hello
90

程序首先打印hello,在执行exit(90),抛异常把90传给values,values在传进函数中执行,打印90程序退出。后面的”come?”因为已经退出所以不会被打印. 而此时如果把exitfunc函数里面的sys.exit(0)去掉,那么程序会继续执行到输出”come?”。

 4、sys.modules 

sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法.

import sysprint(sys.modules.keys())
print("**************************************************************************")
print(sys.modules.values())
print("**************************************************************************")
print(sys.modules["os"])

运行结果为:

dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'nt', 'winreg', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'ntpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins'])
**************************************************************************
dict_values([<module 'sys' (built-in)>, <module 'builtins' (built-in)>, <module '_frozen_importlib' (frozen)>, <module '_imp' (built-in)>, <module '_thread' (built-in)>, <module '_warnings' (built-in)>, <module '_weakref' (built-in)>, <module 'zipimport' (built-in)>, <module '_frozen_importlib_external' (frozen)>, <module 'io' (built-in)>, <module 'marshal' (built-in)>, <module 'nt' (built-in)>, <module 'winreg' (built-in)>, <module 'encodings' from 'C:\\Program Files\\Python37\\lib\\encodings\\__init__.py'>, <module 'codecs' from 'C:\\Program Files\\Python37\\lib\\codecs.py'>, <module '_codecs' (built-in)>, <module 'encodings.aliases' from 'C:\\Program Files\\Python37\\lib\\encodings\\aliases.py'>, <module 'encodings.utf_8' from 'C:\\Program Files\\Python37\\lib\\encodings\\utf_8.py'>, <module '_signal' (built-in)>, <module '__main__' from 'C:\\Users\\Se7eN_HOU\\Desktop\\demo.py'>, <module 'encodings.latin_1' from 'C:\\Program Files\\Python37\\lib\\encodings\\latin_1.py'>, <module 'io' from 'C:\\Program Files\\Python37\\lib\\io.py'>, <module 'abc' from 'C:\\Program Files\\Python37\\lib\\abc.py'>, <module '_abc' (built-in)>, <module 'site' from 'C:\\Program Files\\Python37\\lib\\site.py'>, <module 'os' from 'C:\\Program Files\\Python37\\lib\\os.py'>, <module 'stat' from 'C:\\Program Files\\Python37\\lib\\stat.py'>, <module '_stat' (built-in)>, <module 'ntpath' from 'C:\\Program Files\\Python37\\lib\\ntpath.py'>, <module 'genericpath' from 'C:\\Program Files\\Python37\\lib\\genericpath.py'>, <module 'ntpath' from 'C:\\Program Files\\Python37\\lib\\ntpath.py'>, <module '_collections_abc' from 'C:\\Program Files\\Python37\\lib\\_collections_abc.py'>, <module '_sitebuiltins' from 'C:\\Program Files\\Python37\\lib\\_sitebuiltins.py'>])
**************************************************************************
<module 'os' from 'C:\\Program Files\\Python37\\lib\\os.py'>

5、sys.stdin, sys.stdout, sys.stderr 

stdin,stdout,stderr在Python中都是文件属性对象, 他们在python启动时自动与shell环境中的标准输入, 输出, 出错相关. 而python程序在shell中的I/O重定向是有shell来提供的,与python本身没有关系.python程序内部将stdin, stdout, stderr读写操作重定向到一个内部对象.

#import sys
print("Hi, %s!' %input('Please enter your name: "))
#运行结果:Please enter your name: er
#Hi, er!#等同于:
import sys
print('Please enter your name:')
name=sys.stdin.readline()[:-1]
print('Hi, %s!' %name)#标准输出
print('Hello World!\n')
#等同于:
import sys
sys.stdout.write('Hello world!\n')

转载于:https://www.cnblogs.com/Se7eN-HOU/p/10710272.html

相关文章:

RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

上一篇已经讲了Rabbitmq如何在Windows平台安装&#xff0c;不懂请移步&#xff1a;RabbitMQ学习系列一&#xff1a;windows下安装RabbitMQ服务 一、理论&#xff1a; .net环境下&#xff0c;C#代码调用RabbitMQ消息队列&#xff0c;本文用easynetq开源的.net Rabbitmq api来实…

一步步学会使用ASP.NET 4 WEB应用程序中使用URL Routing(翻译)

创建路由 路由就是将URL路径映射到具体的物理文件。若要将路由添加到网站中&#xff0c;请使用 RouteCollection.MapPageRoute 方法将它们添加到RouteTable类的静态Routes属性。 将用于添加路由的方法添加到 Global.asax 文件中 如果网站还没有 Global.asax 文件&#xff0c;…

Properties持久的属性集

Properties 属性集合继承了Hashtable 属性包括属性名和属性值&#xff08;键值对keyvalue&#xff09; 作用 可以存储多个键值&#xff0c;与map相似可以把键值对存储到文件中可以把文件中的键值对读取到Properties对象中 构造方法&#xff1a; Properties() 创建一个无默认…

让你二十年后仍是人才

1.不管坐什么位置&#xff0c;都要保持学习的习惯出社会工作十年到十五年左右&#xff0c;会有一种「上下卡住」的闭塞感与无力感。因为&#xff0c;这个阶段的上班族虽然拥有一定的资历与经验&#xff0c;工作也得心应手&#xff0c;但上面有比自己更资深的前辈压着&#xff0…

Django ORM操作

Django ORM操作 一般操作 看专业的官网文档&#xff0c;做专业的程序员&#xff01; 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条件相匹配的对象&#xff0c;返回结果有且只有一个&#xff0c;如果符合筛选…

ChineseCalendar类[转]

///<summary>///Title: ChineseCalendar类 ///Description: 中文日期工具类 ///author 万灵杰[作者] ///version 1.0.0.0 ///date 2009年7月30日 ///modify ///date ///</summary>publicclassChineseCalendar { privatestaticrea…

程序员的自我救赎---13.1:职场招聘与面试心得

《前言》 《目录》 &#xff08;一&#xff09; Winner2.0 框架基础分析 &#xff08;二&#xff09;PLSQL报表系统 &#xff08;三&#xff09;SSO单点登录 &#xff08;四&#xff09; 短信中心 &#xff08;五&#xff09;钱包系统 &#xff08;六&#xff09;GPU支付中心 &…

网络编程 UDP通信的过程 TCP通信过程 多线程文件上传

网络概述 协议 在网络之间传出数据时需要按照指定的标准来传输&#xff0c;标准中规定了数据的格式、大小、传输的方式、传输速率。形成统一规范—>按照规范开发的代码—>协议&#xff08;应用层、传输层、网络层、链路层&#xff09; InetAddress类 用来分装网络地址…

set debug mode for flex builder

1. 要具备debug功能&#xff0c;我们必须要首先安装Flash Player Debug 版本。windows版本2. 安装好debug版本后&#xff0c;我们还需要添加日志的配置文件mm.cfg。该配置文件存放的目录如下&#xff1a;Macintosh OS X MacH D:Library:Application Support:macromedia:mm.cfgM…

XML 解析XML文档 XML约束

XML 什么是XML Extensible Markup Language&#xff08;可扩展的标记语言&#xff09;他是一个语言&#xff0c;有自己的语法&#xff0c;和Java以及其他的编程无关“标记” 在文件中包含类似于张三 &#xff0c;这种用尖括号括起来的叫标记&#xff0c;使用来标记数据的。标…

Host Only、NAT和Bridge三种网络连接

Host Only、NAT和Bridge三种网络连接 在安装好了Linux镜像之后&#xff0c;如何连接物理机和虚拟机呢&#xff1f;这就需要网络连接&#xff0c;网络连接有三种&#xff1a;HostOnly、NAT、Bridge&#xff0c;它们都可用于Guest虚拟机和Host物理机之间的网络通信。 一、三者的不…

OSPF 提升 一 ----基础

ospf ccnp内容 一 link-state protocols IGP 开放式的最短路径优先协议 公有协议支持中到大型的网络 spf算法 链路状态协议1.传送的LSA link status advertisement 链路状态通告 包换拓扑信息具体包括&#xff1a;网段的前缀 掩码 连接的路由器的…

C#实现网页截图功能

//需要添加System.Drawing及System.Windows.Forms引用 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Windows.Forms; namespace 网页截图 { class Program { [S…

微软发布全新多核心操作系统原型:Barrelfish

Windows 7完成之后&#xff0c;很多人开始把目光投向微软的下一代服务器和客户端操作系统Windows 8&#xff0c;不过今天微软放出了一套全新操作系统的原型&#xff0c;开发代号“Barrelfish”。该系统由微软剑桥研究院和苏黎世理工学院联合全新开发&#xff0c;专为现在和未来…

Docker应用:Kubernetes(容器集群)

Docker应用&#xff1a;Kubernetes&#xff08;容器集群&#xff09; 原文:Docker应用&#xff1a;Kubernetes&#xff08;容器集群&#xff09;阅读目录&#xff1a; Docker应用&#xff1a;Hello WorldDocker应用&#xff1a;Docker-compose&#xff08;容器编排&#xff09;…

通道应用——抠头发

通道应用——抠头发 原图&#xff1a; 效果图&#xff1a; 步骤&#xff1a;1、打开原图的“通道面板”&#xff0c;选择颜色对比分明的绿色通道&#xff0c;并新建一个绿色通道副本&#xff1b;2、选择“图像”-“调整”-“色阶”&#xff0c;调节色阶使得头发颜色更分明些&am…

2017 ACM/ICPC 南宁赛区小结 By JSB @ Reconquista

Statistics TYPE: Onsite ContestNAME: 2017 - ICPC - Asia NanningPLAT: pc^2TIME: 2017/11/26 09:00-14:00LOCA: Guangxi UniversityTEAM: Reconquista[shb,lsmll,jsb]RANK: 8/227 3.52%SOLVE: 8/13PENALTY: 451 ◦ A - 1 ◦ E - 123 (2) ◦ F - 8 ◦ H - 55 ◦ I - 97 (1) ◦…

用户管理系统控制台版连接数据库

建User表 CREATE TABLE user (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) DEFAULT NULL,pwd VARCHAR(20) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEINNODB AUTO_INCREMENT5 DEFAULT CHARSETutf8User对象&#xff08;javaBean&#xff09; public class User {priva…

微信小程序组件 日历

js文件 use strict;let choose_year null,choose_month null;const conf {data: {hasEmptyGrid: false,showPicker: false},onLoad() {const date new Date();const cur_year date.getFullYear();const cur_month date.getMonth() 1;const weeks_ch [ 日, 一, 二, 三, …

node编写定时任务,for循环只执行一遍的解决办法

在用node编写定时任务时候&#xff0c;发现for循环只执行i0这一次&#xff0c;就不接着循环执行了&#xff0c;下面贴上代码&#xff1a; exports.task async function(ctx){ let { app } ctx, resultArr1 [],//查询的数据库数据 resultArr2 [];//查询的数据库…

oledb读不到dbf文件内容

最近在处理一批VFP的数据库&#xff0c;使用OleDB方式读取一直很正常&#xff0c;前两天突然碰到一张表怎么也读不出数据来&#xff0c;害我瞎忙了一整天&#xff0c;在研究了DBF文件结构后发现记录前的0x20位置存储的是0x2A。 一查才知道是删除标记&#xff0c;我倒&#xff0…

好用的截图工具

好用的截图工具...简单好用而且不大转载于:https://blog.51cto.com/dd123/208983

“AS3.0高级动画编程”学习:第二章转向行为(上)

因为这一章的内容基本上都是涉及向量的&#xff0c;先来一个2D向量类&#xff1a;Vector2D.as (再次强烈建议不熟悉向量运算的童鞋&#xff0c;先回去恶补一下高等数学-07章空间解释几何与向量代数.pdf) package {import flash.display.Graphics;public class Vector2D {privat…

用Azure VM + Azure Database for MySQL搭建Web服务

仍然是一篇动手实验&#xff0c;实验演示如何在Azure的虚拟机内部署一个Web服务器&#xff0c;并且使用Azure Mysql PaaS作为本应用的数据库。此实验的目的一方面是为了演示Azure IaaS层和PaaS服务配合使用的常规操作&#xff0c;另一方面是为之后的文章打基础&#xff0c;后续…

C3P0_and_pro.properties配置文档代码

C3P0-config.xml配置文件 <c3p0-config> <!-- 默认配置&#xff0c;如果没有指定则使用这个配置 --> <default-config><property name"driverClass">com.mysql.jdbc.Driver</property><property name"jdbcUrl">jdbc:…

电视信号——行场同步

电视信号分NTSC制和PAL制两种制式, NTSC制每秒刷新60次, 而PAL制每秒刷新50次。 水平消隐&#xff1a;电子枪从左到右画出象素&#xff0c;它每次只能画一条扫描线&#xff0c;画下一条之前要先回到左边并做好画下一条扫描线的准备&#xff0c;这之间有一段时间叫做水平消隐&am…

QWidget一生,从创建到销毁事件流

版权声明&#xff1a;若无来源注明&#xff0c;Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址&#xff1a;本文标题&#xff1a;QWidget一生&#xff0c;从创建到销毁事件流 本文地址&#xff1a;http://techieliang.com/2017/11/319/ 代码较多&#xff…

事物_软件分层

事务 事务是&#xff1a;在数据库指业务处理的”一个业务“对应数据库中的多个步骤的操作。例如银行转账。 面对的问题&#xff1a;程序接受请求后&#xff0c;会至少发送两条SQL语句&#xff0c;两条语句之间会有时间的间隔&#xff0c;如果间隔时间期间Mysql服务器发生意外&a…

雷林鹏分享:jQuery EasyUI 数据网格 - 创建属性网格

jQuery EasyUI 数据网格 - 创建属性网格 属性网格(property grid)带有一个内置的 expand(展开)/collapse(合并) 按钮&#xff0c;可以简单地为行分组。您可以简单地创建一个可编辑属性的分层(hierarchical)列表。 设置 HTML url"propertygrid_data.json" showGroup&q…

as3.0中如何阻止事件冒泡?

as3.0中的事件冒泡机制有时候会很烦人&#xff0c;比如一个Sprite(方便下文描述就命名为Container吧)把另一外Sprite(称为Child吧)做为子元素套进来以后&#xff0c;如果两个Sprite都注册了Mouse_Down事件&#xff0c;要想在Child上点击鼠标时系统只响应Child的Mouse_Down事件&…