-
如下所示:a,b,c,d = input()很简单的代码,如果输入为1 -1 -2 3结果会报错,原因在于input函数会将你的输入作为python脚本运行,那么输入就变成了1-1 -2 3,即0 -2 3结果当然是错误的了,解决办法就是将输入用引号括起来,将其作为字符串输入。即"1 -1 -2 3"这样结果就是a=1,b=-1,c=-2,d=3补充知识:Python环境下的Sublime Text3无法使用input()函数【注】:下述操作过程是结合多种网络方法,然后自己实践的结果。写在这里,主要目的是加深记忆,也希望能帮助后来者吐舌头在Sublime Text3中写好Python程序,按Ctrl+B运行程序,在控制台中输入内容,回车,程序没有响应。最后求助网络,找到了解决办法。一、安装插件SublimeREPL1、按Ctrl+Shift+P,打开命令框。输入Install Package,回车,等待几秒钟,会弹窗提示“安装成功”。2、按Ctrl+Shift+P,打开命令框,输入Install,选择“Package Control: Install Package”,然后在新出现的命令框中输入SublimeREPL,回车二、运行程序依次点击Tools—SublimeREPL—Python—Python - RUN current file,打开一个名为“*REPL*[python]”的文件,它是可交互的,在里面输入内容,回车即可。三、设置运行快捷键依次点击Preferences—Key Buildings,输入以下内容,然后保存,设置按键F5为运行程序快捷键123456789[ { "keys": ["f5"], "caption": "SublimeREPL:Python", "command": "run_existing_window_command", "args": { "id": "repl_python_run", "file": "config/Python/Main.sublime-menu" } },]
-
开发工具Python版本:3.6.4相关模块:pygame模块;以及一些Python自带的模块关注公众号:Python学习指南,回复“拼图”即可获取源码环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。原理介绍游戏简介:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状。游戏目标为通过移动非空白块将随机摆放获得的图像恢复成原图像的模样,且规定移动操作仅存在于非空白块移动到空白块。例如下图所示:逐步实现:Step1:游戏初始界面既然是游戏,总得有个初始界面吧?OK,我们先写一个游戏初始界面:效果是这样子的:根据玩家自身水平,可以选择不同难度的拼图游戏。Step2:定义移动操作定义移动操作的目的是为了移动拼图(好像是废话T_T),具体实现起来十分简单:Step3:游戏主界面OK,有了前面的铺垫,我们可以开始实现我们的游戏主界面了。首先,我们需要打乱拼图, 但是随机打乱很可能导致拼图无解,因此我们通过随机移动拼图来实现打乱拼图的效果 ,这也是我们先定义拼图的移动操作的主要原因:游戏主界面初始化:最后实现主界面的显示刷新以及事件响应等功能:Step4:游戏结束界面当玩家完成拼图后,需要显示游戏结束界面,和游戏初始界面类似,实现起来都比较简单:OK,大功告成!!!
-
import openpyxl from openpyxl import Workbook wb=openpyxl.load_workbook("话务量_20201201.xlsx") ws = wb.active print(ws) a=ws.max_row b=ws.max_column for i in range(1,a): print()#换行显示 for j in range(1,b): a=ws.cell(row = i,column = j) print('%-10s'%a.value," ",end="\t")#value值居然是str的 ws['B195'] ='=SUM(B1:B194)' wb.save("话务量_20201201.xlsx") print(ws['B195'].value)运行结果:openpyxl库操控excel表格的使用简便,数据处理功能不是很方便。
-
在找寻材料的时候,会看到一些暂时用不到但是内容不错的网页,就这样关闭未免浪费掉了,下次也不一定能再次搜索到。有些小伙伴会提出可以保存网页链接,但这种基本的做法并不能在网页打不开后还能看到内容。我们完全可以用爬虫获取这方面的数据,不过操作过程中会遇到一些阻拦,今天小编就教大家用sleep间隔进行python反爬虫,这样就可以得到我们想到的数据啦。步骤要利用headers拉动请求,模拟成浏览器去访问网站,跳过最简单的反爬虫机制。获取网页内容,保存在一个字符串content中。构造正则表达式,从content中匹配关键词pattern获取下载链接。需要注意的是,网页中的关键词出现了两遍(如下图),所以我们要利用set()函数清除重复元素。第三步是遍历set之后的结果,下载链接。设置time.sleep(t),无sleep间隔的话,网站认定这种行为是攻击,所以我们隔一段时间下载一个,反反爬虫。具体代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748import urllib.request# url requestimport re # regular expressionimport os # dirsimport time'''url 下载网址pattern 正则化的匹配关键词Directory 下载目录def BatchDownload(url,pattern,Directory): # 拉动请求,模拟成浏览器去访问网站->跳过反爬虫机制 headers = {'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'} opener = urllib.request.build_opener() opener.addheaders = [headers] # 获取网页内容 content = opener.open(url).read().decode('utf8') # 构造正则表达式,从content中匹配关键词pattern raw_hrefs = re.findall(pattern, content, 0) # set函数消除重复元素 hset = set(raw_hrefs) # 下载链接 for href in hset: # 之所以if else 是为了区别只有一个链接的特别情况 if(len(hset)>1): link = url + href[0] filename = os.path.join(Directory, href[0]) print("正在下载",filename) urllib.request.urlretrieve(link, filename) print("成功下载!") else: link = url +href filename = os.path.join(Directory, href) # 无sleep间隔,网站认定这种行为是攻击,反反爬虫 time.sleep(1) #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/',# '(Storm-Data-Export-Format.docx)',# 'E:\stormevents\csvfiles') # '(Storm-Data-Export-Format.pdf)',# '(StormEvents_details-ftp_v1.0_d(\d*)_c(\d*).csv.gz)',# '(StormEvents_fatalities-ftp_v1.0_d(\d*)_c(\d*).csv.gz)',# '(StormEvents_locations-ftp_v1.0_d(\d*)_c(\d*).csv.gz)',#BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/legacy/',# '(ugc_areas.csv)',# 'E:\stormevents\csvfiles\legacy')结果展示为了让大家能够清楚的知道整个反爬过程,这里小编把思路和代码都罗列了出来。其中可以time.sleep(t)解除网站对于爬虫的阻拦问题,着重标记了出来
-
直接使用word文档已经难不倒大家了,有没有想过用python构建一个word文档写点文章呢?当然这个文章的框架需要我们用代码一点点的建立,在过程上有一点繁琐,一下子看不懂的小伙伴可以把它拆分成几个部分来看。下面就在python3处理word文档的代码给大家带来讲解,还会有一些设置文章格式的技巧。一个Word文档,主要由下面这些内容元素构成,每个元素都有对应的方法处理:标题:add_heading()段落:add_paragraph()文本:add_run(),其返回对象支持设置文本属性图片:add_picture()表格:add_table()、add_row()、add_col()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556import pathlib from docx import Documentfrom docx.shared import Inches, Ptfrom docx.oxml.ns import qn path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/003word')out_path = path.joinpath('003word_create.docx')img_path = path.joinpath('dance.jpg')document = Document()document.add_heading('Python1024_自动生成标题', 0)document.add_heading('基本:文本', level=1)p = document.add_paragraph('测试文本\n测试内容\n')p.add_run('粗体部分内容\n').bold = Truep.add_run('斜体部分\n').italic = Truep.add_run('下划线部分\n').underline = Truep.add_run('字体设置\n').font.size = Pt(24)# 测试第三方字体x = p.add_run('三方字体测试\n')x.font.name = 'Source Han Sans CN' # 思源字体x.element.rPr.rFonts.set(qn('w:eastAsia'), 'Source Han Sans CN')# 段落和引用document.add_heading('标题一:段落', level=1)document.add_paragraph('引用块', style='Intense Quote')document.add_heading('标题1.1、无序列表', level=2)opts = ['选项1','选项2', '选项3']# 无需列表for opt in opts: document.add_paragraph(opt, style='List Bullet')document.add_heading('标题1.2、有序列表', level=2)# 有序列表 document.add_paragraph(opt, style='List Number')document.add_heading('标题二:图片', level=1)document.add_picture(str(img_path), width=Inches(5))document.add_page_break()document.add_heading('标题三:表格', level=1)records = ( (1, '电风扇', '无叶风扇'), (2, '吹风机', '离子风机'), (3, 'Macbook pro', 'Apple macbook pro 15寸'))# 表格table = document.add_table(rows=1, cols=3)# 表头hdr_cells = table.rows[0].cellshdr_cells[0].text = '数量'hdr_cells[1].text = 'ID'hdr_cells[2].text = '描述信息'# 表格数据for qty, cid, desc in records: row_cells = table.add_row().cells row_cells[0].text = str(qty) row_cells[1].text = cid row_cells[2].text = desc# 保存文档document.save(out_path)设置段落样式,如下:1document.add_paragraph('这是一个样式为 ListBullet 的段落', style='ListBullet')或12paragraph = document.add_paragraph('这是一个样式为 ListBullet 的段落')paragraph.style = 'List Bullet'设置段落间距分为 段前 和 段后 ,设置值用 Pt 单位是 磅 ,如下:12paragraph_format.space_before = Pt(18)paragraph_format.space_after = Pt(12)设置段落行距 当行距为 最小值 和 固定值 时,设置值单位为 磅 ,需要用 Pt ;当行距为 多倍行距 时,设置值为数值,如下:123456789101112131415161718192021from docx.shared import Length #SINGLE => 单倍行距(默认) #ONE_POINT_FIVE => 1.5倍行距 #DOUBLE2 => 倍行距 #AT_LEAST => 最小值 #EXACTLY => 固定值 #MULTIPLE => 多倍行距 paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY #固定值 paragraph_format.line_spacing = Pt(18) # 固定值18磅 paragraph.line_spacing_rule = WD_LINE_SPACING.MULTIPLE #多倍行距 paragraph_format.line_spacing = 1.75 # 1.75倍行间距
-
关于树莓派,想必从事嵌入式开发的开发者都有听过,树莓派原名为Raspberry Pi,也就是它的英文读法,树莓派诞生于英国,由“Raspberry Pi 基金会”这个慈善组织注册开发。埃•厄普顿就是该项目的头目。在2012年的3月,英国剑桥大学埃本•阿普顿(Eben Epton)正式发售世界上最小的台式机,又称卡片式电脑,外形只有信用卡大小,却具有电脑的所有基本功能,这就是Raspberry Pi电脑板,中文译名”树莓派”!树莓派作为一个轻便迷你的小终端很受大众的喜爱!!!树莓派的特点与常见的51单片机和STM32等这类的嵌入式微控制器相比,不仅可以完成相同的IO引脚控制之外,还能运行有相应的操作系统,可以完成更复杂的任务管理与调度,能够支持更上层应用的开发,为了开发者提供了更广阔的应用空间。比如开发语言的选择不仅仅只限于C语言,连接底层硬件与上层应用,可以实现物联网的云控制和云管理,也可以忽略树莓派的IO控制,使用树莓派搭建小型的网络服务器,做一些小型的测试开发和服务。与一般的PC计算机平台相比,树莓派可以提供的IO引脚,能够直接控制其他底层硬件的功能,这是一般PC计算机做不到的,当然,树莓派体积小,成本低,照常可以完成一些PC任务与应用。树莓派自带的摄像头拍摄夜空是有先例的,起码可以做到延时摄影。对于实时拍摄没有研究,但是仍然有必要测试。树莓派自带的摄像头是500万像素,价格在26-29欧元(人民币200+左右)实时还是事后采集记录结果?树莓派上的摄像机,是使用一个 raspivid 命令操作的。 抛开这个命令的其他参数,其输出数据有2种方式:将数据保存成文件,储存在SD卡上,以便事后读取;将数据按照字节流的形式,直接输出到STDOUT标准输出中,可以实时获取。选择哪种方式,首先要考虑我们能否具有足够的采集数据的能力。raspivid 命令可以调节相机模块的输出比特率。输出是以 H264 编码输出的,比特率一般默认是17Mbps,但是这个数字可以调小。 如果按照17Mbps算,就是一秒钟2.12兆字节。 我们记录数据或者获取数据的速度不能低于这个值,否则长时间录像可能造成树莓派的缓存充满,导致树莓派崩溃。树莓派的网卡是使用了其USB总线,传送速度是100Mb/s或者12.5MB/s。 实际上后文的实验表明,目前能达到的传送速度只有 3MB/s(TCP) 或者 6MB/s(UDP) 。如果使用SD卡存储,这个记录速度也是可以达到的,但是,SD卡有写入寿命,这是要考虑的。 例如,对于32GB的卡,即使我们能利用全部存储空间,以2MB/s的速度录像,也只能记录4.55小时。如何通过网络实时传送数据?raspivid 命令的 -o 选项,就是用来指定输出文件的。 在Linux系统中,输出到文件并不等于写入到磁盘(这里是SD卡)。 我们仍然可能使用 RAMDisk 这种技术,让输出只是暂时存储在内存中,并稍后读取,然后删除之。 但是,树莓派的可用内存可能只有 280MB ,这最多只能记录差不多2分钟的视频。如果我们有文件形式的摄像记录,那么就似乎可以使用文件传输的协议,例如 sftp, scp 等等登录到树莓派下载文件了。 然而这是不对的。这些协议在传输中使用了加密。树莓派在向我们的电脑进行数据传送的时候,如果用这些协议,就必须先对发送的数据进行加密。 在互联网上,加密是很好的设计。但是在树莓派和电脑之间只用一根网线连接的时候,就不是了。 树莓派的运算能力是很有限的,使用加密只会让传送速度变慢,所以,不要使用加密!我们使用最原始而简单的方法:使用 netcat命令 ,在笔记本电脑这一端监听数据输入。 在树莓派这一端,我们让 raspivid 获取一定周期(比如10分钟,也许可以更长)的录像, 将结果设定为直接输出,然后利用Linux的管道机制,直接送进 netcat 发送。配置由树莓派和笔记本构成的网络树莓派和笔记本电脑之间的连接,使用普通网线即可, 因为笔记本和树莓派上的网卡都能自动适应网线,设定正确的模式(正常来说要使用交叉网线)。重要的一步是,笔记本电脑和树莓派连接后构成的网络中,需要手动为两个设备设定IP地址。 对于笔记本电脑的设定,就比较简单了。 我们将笔记本电脑和树莓派相连的网卡上,将电脑的 IP地址设定为xxx.xxx.x.xxx , 子网掩码为255.255.255.0 , 网关不要填 ``。配置树莓派的方法是,先将树莓派断电,然后取出所用的SD卡,用读卡器插回电脑。 在SD卡的boot分区中,有个cmdline.txt,这是树莓派开机时所用到的一些参数。打开这个文件,会发现里面只有一行。这一行中用空格分开了很多设定参数。 我们在这一行的结尾,不添加空行,直接加上空格,然后写上: ip=xxx.xxx.x.xxx当然如果这一行里面已经有了ip=的参数,应该直接修改它。这样的结果就是,树莓派开机之后,会自己选择这个IP地址作为自己的地址。实现在笔记本上监听输入netcat命令,在每收到一个文件的EOF(End Of File,表明文件已经到结尾),就会退出。 我们为了让接收能够连续进行,需要用脚本连续运行这个命令。 这样就会为每个新接收到的视频,在笔记本电脑这一端建立一个文件用来存储。12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152# -*- coding: utf-8 -*- import osimport signalimport subprocessimport sysimport uuid # 获取程序运行的本地目录,和用来存储接收结果的recv文件夹目录 BASEPATH = os.path.realpath(os.path.dirname(sys.argv[0]))RECV = os.path.join(BASEPATH, 'recv') # 如果接收目录不存在,就自动新建 print " *** Received files are put into: %s" % RECVif not os.path.isdir(RECV): os.system('mkdir -p %s' % RECV) # 下面的部分用来记录正在等待接收的文件。这个文件会以一个UUID.tmp的格式命名。# 在接收成功后,就会被重命名为UUID。(UUID是一个特定格式的唯一字符串,不会重复)。# 如果在接收过程中按下Ctrl+C,就会发送一个终止命令给程序,这样程序会退出,# 并删除没有接收完整的那个文件。 working = Falsefullname = False def sigint_handler(signum, frame): global fullname, working print "\n" print " *** SIGINT detected. End the program." if working and fullname != False: print " *** Unfinished recording deleted." os.system('rm -f %s.tmp' % fullname) exit()signal.signal(signal.SIGINT, sigint_handler) # 使用一个死循环来不断运行netcat(nc)命令。 n = 1while True: recname = str(uuid.uuid1()) print " [%8d] Listening for file [%s]. Use Ctrl+C to stop this script." % (n, recname) fullname = os.path.join(RECV, recname) working = True # 标记接收开始 # 使用 nc -lp 10401 命令接收数据,表明端口为10401。 subprocess.call('nc -lp 10401 > %s.tmp' % fullname, shell=True) os.system('mv %s.tmp %s' % (fullname, fullname)) working = False # 标记接收完毕 n += 1上文所述的脚本,在笔记本上运行之后,就会在本地开启10401端口,等待树莓派上传送的文件。 传送的会直接写入一个由UUID(全局唯一ID)标识的文件中,可以供以后处理。在树莓派上摄像并发送摄像结果在树莓派上命令拍摄的方法是:$ raspivid -o - -b 16000000 -t 100000 | nc xxx.xxx.x.xxx 10401这条指令的意义如下:-o - ,使用-o设定输出,-表示直接输出到标准输出中,不写入文件。-b 16000000 ,设定输出比特率为16000000 bit/s。这大约是2兆字节每秒。-t 100000 ,设定录像时间为100000毫秒,亦即100秒。| nc xxx.xxx.x.xxx 10401 ,使用管道|将结果导入到nc中,nc是发送模式,目标是xxx.xxx.x.xxx计算机上的10401端口。
-
左边有个插件管理,搜了下文档,没有相关的说明。上边那个。。。那里可以用上传文件的方式安装,那是不是可以找到tkinter的包传上去呢?怎么拓展python的依赖包呢?
-
#直接赋给一个变量,然后再像一般函数那样调用 c=lambda x,y,z:x*y*z print(c(2,3,4)) #lambda函数后直接传参 print((lambda x:x**2)(3)) #lambda函数作为参数传递给其他函数 squares = map(lambda x:x**2,range(5)) print(list(squares)) a=[('b',3),('a',2),('d',4),('c',1)] print(sorted(a,key=lambda x:x[0])) #嵌套使用将lambda函数嵌套到普通函数 from functools import reduce print(reduce(lambda a,b:'{},{}'.format(a,b),[1,2,3,4,5,6,7,8,9])) def increment(n): return lambda x:x+n f=increment(4) print(f(2)) #求两个数组的和 a = [1,2,3,4] b = [5,6,8] print(list(map(lambda x,y:x+y, a,b))) #求字符串每个单词的长度 sentence = "Hello world!" words = sentence.replace(',','').replace('.','').replace('!','').split() lengths = map(lambda x:len(x),words) print(list(lengths))总结了一下lambda函数的用法:
-
Java里面多态使用的是接口实现的,让程序变得灵魂。python 没有接口,但是也能实现多态def say_hello(obj): # 只要obj 对象有name属性,就能使用 print("hello "+obj.name)class B: def __init__(self,name): self.name=nameb=B('ddd')say_hello(b)
-
class A: def test2(self): print('这是实例方法') @classmethod def test3(cls): print('这是类方法') @staticmethod def test4(): print('静态方法')调用过程a=A()a.test2() 实例方法 = A.test2(a) 实例方法调用A.test3() 类方法 = a.test3() 类方法的调用a.test4() = A.test4() 静态方法
-
华为答题赢好礼,扫码参加附题型题库1.下列哪个语句在Python中是非法的?A.x = y = z = 1B.x, y = yC.x = (y = z + 1)D.x += y答案:C2.关于Python内存管理,下列哪个说法是错误A.变量不必事先声明B.可以使用del释放资源C.变量无须先创建和赋值而直接使用D.变量无须指定类型答案:C3.下面哪个不是Python的合法的标识符A.name32B.__name__C.nameD.40NAME答案:D4.Python不支持的数据类型有A.listB.charC.intD.float答案:B5.以下不能创建一个字典的语句是A.dict1 = {}B.dict3 = {[1,2,3]: “uestc”}C.dict4 = {(1,2,3): “uestc”}D.dict2 = { 3 : 5 }答案:B6.Python语言语句块的标记是A.逗号B.缩进C.分号D.以上都不是答案:B7.“xy”+“z”*2的结果是?A.xyz2B.xyzxyzC.xyxyzzD.xyzz答案:D8.关于python类 说法错误的是A.类的实例方法必须创建对象前才可以调用B.类的实例方法必须创建对象后才可以调用C.类的类方法可以用对象和类名来调用D.类的静态属性可以用类名和对象来调用答案:B9.下列对异常说法正确的是A.程序中抛出异常不一定终止程序B.程序中抛出异常终止程序C.拼写错误会导致程序终止D.缩进错误会导致程序终止答案:A10.导入模块的方式错误的是A.import moB.import m from moC.from mo import *D.import mo as m答案:B11.以下关于模块说法错误的是A.一个xx.py就是一个模块B.模块文件的扩展名不一定是 .pyC.任何一个普通的xx.py文件可以作为模块导入D.运行时会从制定的目录搜索导入的模块,如果没有,会报错异常答案:B12.以下叙述正确的是A.continue语句的作用是结束整个循环的执行B.只能在循环体内使用break语句C.在循环体内使用break语句或continue语句的作用相同D.从多层循环嵌套中退出时,只能使用goto语句答案:B13.关于 Python 语言的注释,以下选项中描述错误的是A.Python 语言的单行注释以#开头B.Python 语言的单行注释以单引号 ’ 开头C.Python 语言的多行注释以 ’ ‘’(三个单引号)开头和结尾D.Python 语言有两种注释方式:单行注释和多行注释答案:B14.print 100 - 25 * 3 % 4 应该输出什么?A.1B.25C.0D.97答案:D15.以下选项中不是 Python 对文件的写操作方法的是A.writelinesB.writeC.write 和 seekD.writetext答案:D16.关于Python语言的浮点数类型,以下选项中描述错误的是A.Python语言要求所有浮点数必须带有小数部分B.小数部分不可以为0C.浮点数类型表示带有小数的类型D.浮点数类型与数学中实数的概念一致答案:B17.【多选】定义类如下: class Hello():pass下面说明错误的是A. 该类实例中包含__dir__()方法B.该类实例中包含__hash__()方法C.该类实例中只包含__dir__(),不包含__hash__()D.该类没有定义任何方法,所以该实例中没有包含任何方法答案:CD18.【多选】定义类如下: class hello(): def showInfo(sef): print(self.x)下面描述正确的是A.该类不可以实例化B.该类可以实例化C. 在pycharm 工具中会出现语法错误,说self没有定义D.该类可以实例化,并且能正常通过对象调用showInfo()答案:AC19.【多选】Python是一种解释型脚本语言,可以应用于以下领域:A.Web 和 Internet开发B.人工智能C.科学计算和统计D.房地产开发答案:ABC20.【多选】安装好Python之后,可以有三种方式运行,通过命令行窗口进入,执行Python文件,集成开发环境,下列属于运行方式的是():A.浏览器中运行B.交互式解释器C.命令行脚本D.Pycharm答案:BCD
-
python 对属性的封装和java对属性的封装 还是有些区别。使用的都是伪封装,使用实例对象,可以直接操作属性。约定大于配置,防君子不妨小人。class A: __init__(self,name): self.__name=name self._name=name self.name=name 后两种可以直接使用实例对象操作。第一种可以使用实例对象._A__name 调用。
-
下表中规划了每个浮点类型的存储大小和范围:类型大小范围(无符号)范围(有符号)用途float4 type(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值double8 type (-1.797 693 134 862 315 7 E+308,-2.225073858507 2014E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值decimal对decimal(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值那么MySQL中这三种都是浮点类型 它们彼此的区别又是什么呢 ??float 浮点类型用于表示==单精度浮点==数值,double浮点类型用于表示==双精度浮点==数值一个bytes(字节) 占8位 float单精度 存储浮点类型的话 就是 ==4x8=32位的长度== , 所以float单精度浮点数在内存中占 4 个字节,并且用 32 位二进制进行描述那么 double双精度 存储浮点类型就是 ==8x8 =64位的长度==, 所以double双精度浮点数在内存中占 8 个字节,并且用 64 位二进制进行描述 float单精度小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位double双精度小数部分能精确到小数点后的15位,加上小数点前的一位 有效位数为16位。最后就区别出了小数点后边位数的长度,越长越精确!double 和 float 彼此的区别:在内存中占有的字节数不同, 单精度内存占4个字节, 双精度内存占8个字节有效数字位数不同(尾数) 单精度小数点后有效位数7位, 双精度小数点后有效位数16位数值取值范围不同 根据IEEE标准来计算!在程序中处理速度不同,一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快double 和 float 彼此的优缺点:float单精度优点: float单精度在一些处理器上比double双精度更快而且只占用double双精度一半的空间缺点: 但是当值很大或很小的时候,它将变得不精确。double双精度优点: double 跟 float比较, 必然是 double 精度高,尾数可以有 16 位,而 float 尾数精度只有 7 位缺点: double 双精度是消耗内存的,并且是 float 单精度的两倍! ,double 的运算速度比 float 慢得多, 因为double 尾数比float 的尾数多, 所以计算起来必然是有开销的!如何选择double 和 float 的使用场景!首先: 能用单精度时不要用双精度 以省内存,加快运算速度!float: 当然你需要小数部分并且对精度的要求不高时,选择float单精度浮点型比较好!double: 因为小数位精度高的缘故,所以双精度用来进行高速数学计算、科学计算、卫星定位计算等处理器上双精度型实际上比单精度的快, 所以: 当你需要保持多次反复迭代的计算精确性时,或在操作值很大的数字时,双精度型是最好的选择。double和float:float 表示的小数点位数少,double能表示的小数点位数多,更加精确! 就这么简单double和float 后面的长度m,d代表的是什么?double(m,d) 和float(m,d) 这里的m,d代表的是什么呢 ? 很多小伙伴也是不清不楚的! 我还是来继续解释一下吧其实跟前面整数int(n)一样,这些类型也带有附加参数:一个显示宽度m和一个小数点后面带的个数d比如: 语句 float(7,3) 规定显示的值不会超过 7 位数字,小数点后面带有 3 位数字 、double也是同理在MySQL中,在定义表字段的时候, unsigned和 zerofill 修饰符也可以被 float、double和 decimal数据类型使用, 并且效果与 int数据类型相同在MySQL 语句中, 实际定义表字段的时候,float(M,D) unsigned 中的M代表可以使用的数字位数,D则代表小数点后的小数位数, unsigned 代表不允许使用负数!double(M,D) unsigned 中的M代表可以使用的数字位数,D则代表小数点后的小数位数==注意:== M>=D!decimal类型1.介绍decimal在存储同样范围的值时,通常比decimal使用更少的空间,float使用4个字节存储,double使用8个字节 ,而 decimal依赖于M和D的值,所以decimal使用更少的空间在实际的企业级开发中,经常遇到需要存储金额(3888.00元)的字段,这时候就需要用到数据类型decimal。在MySQL数据库中,decimal的使用语法是:decimal(M,D),其中,M 的范围是165,D 的范围是030,而且D不能大于M。2.最大值数据类型为decimal的字段,可以存储的最大值/范围是多少?例如:decimal(5,2),则该字段可以存储-999.99~999.99,最大值为999.99。也就是说D表示的是小数部分长度,(M-D)表示的是整数部分长度。3.存储decimal类型的数据存储形式是,将每9位十进制数存储为4个字节(官方解释:Values for DECIMAL columns are stored using a binary format that packs nine decimal digits into 4 bytes)。那有可能设置的位数不是9的倍数,官方还给了如下表格对照:Leftover DigitsNumber of types001-213-425-637-841、字段decimal(18,9),18-9=9,这样整数部分和小数部分都是9,那两边分别占用4个字节;2、字段decimal(20,6),20-6=14,其中小数部分为6,就对应上表中的3个字节,而整数部分为14,14-9=5,就是4个字节再加上表中的3个字节案例:mysql> drop table temp2; Query OK, 0 rows affected (0.15 sec) mysql> create table temp2(id float(10,2),id2 double(10,2),id3 decimal(10,2)); Query OK, 0 rows affected (0.18 sec) mysql> insert into temp2 values(1234567.21, 1234567.21,1234567.21),(9876543.21, -> 9876543.12, 9876543.12); Query OK, 2 rows affected (0.06 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from temp2; +------------+------------+------------+ | id | id2 | id3 | +------------+------------+------------+ | 1234567.25 | 1234567.21 | 1234567.21 | | 9876543.00 | 9876543.12 | 9876543.12 | +------------+------------+------------+ 2 rows in set (0.01 sec) mysql> desc temp2; +-------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------+------+-----+---------+-------+ | id | float(10,2) | YES | | NULL | | | id2 | double(10,2) | YES | | NULL | | | id3 | decimal(10,2) | YES | | NULL | | +-------+---------------+------+-----+---------+-------+ 3 rows in set (0.01 sec)案例2:mysql> drop table temp2; Query OK, 0 rows affected (0.16 sec) mysql> create table temp2(id double,id2 double); Query OK, 0 rows affected (0.09 sec) mysql> insert into temp2 values(1.235,1,235); ERROR 1136 (21S01): Column count doesn't match value count at row 1 mysql> insert into temp2 values(1.235,1.235); Query OK, 1 row affected (0.03 sec) mysql> mysql> select * from temp2; +-------+-------+ | id | id2 | +-------+-------+ | 1.235 | 1.235 | +-------+-------+ 1 row in set (0.00 sec) mysql> insert into temp2 values(3.3,4.4); Query OK, 1 row affected (0.09 sec) mysql> select * from temp2; +-------+-------+ | id | id2 | +-------+-------+ | 1.235 | 1.235 | | 3.3 | 4.4 | +-------+-------+ 2 rows in set (0.00 sec) mysql> select id-id2 from temp2; +---------------------+ | id-id2 | +---------------------+ | 0 | | -1.1000000000000005 | +---------------------+ 2 rows in set (0.00 sec) mysql> alter table temp2 modify id decimal(10,5); Query OK, 2 rows affected (0.28 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> alter table temp2 modify id2 decimal(10,5); Query OK, 2 rows affected (0.15 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from temp2; +---------+---------+ | id | id2 | +---------+---------+ | 1.23500 | 1.23500 | | 3.30000 | 4.40000 | +---------+---------+ 2 rows in set (0.00 sec) mysql> select id-id2 from temp2; +----------+ | id-id2 | +----------+ | 0.00000 | | -1.10000 | +----------+ 2 rows in set (0.00 sec)
-
HDZ研习社23期:学Python不走弯路——工程师速成路线2020年11月26日 19:00点击这里,立即报名:直播报名链接韦世东,《Python3 反爬虫原理与绕过实战》、《Python3 网络爬虫宝典》作者、2019 华为云云享专家、掘金社区优秀作者、夜幕团队成员。Python 是众多语言中入门相对容易且发展方向非常丰富的语言,那么如何才能准确避开弯路和岔口,在有限的时间内学到更多的知识呢?Python 的职业方向如此多,你应该如何选择合适自己的方向呢?Python 工程师工资水平如何?跟其他语言的工程师相比有优势吗?相信你一定有很多关于 Python 的疑问,那我们一起聊一聊,Python 的学习和职业方向选择之法。1、为什么是 Python2、Python 职业生态一览3、Python 学习路线的规划1、邀请好友报名直播,直接领取好礼。报名之后,点击【分享有礼】完成邀请。(1)邀请8位好友报名,可赢取HDZ三合一数据线1个。(2)邀请16位好友报名,可赢取HDZ笔记本1个。(3)邀请24位好友报名,可赢取颈枕1个。中奖结果公布啦!!!序号ID奖品1hw82250923 数据线2hw93471895 数据线3user_beifeng 数据线4csdn_zeke 数据线5hw99235574 笔记本6maoning2019 笔记本7gc7500 颈枕8hlb567 颈枕9hw01398348 颈枕10hw08026912 颈枕11hw11763996 颈枕12hw32145648 颈枕13hw55200480 颈枕14hw78895736 颈枕15hw97968341 颈枕16tanboss3232 颈枕17yaoxiuying颈枕18Yvan1010 颈枕请以上中奖用户于12月4日前,添加小助手微信号:Huawei-HDZ,发送您的用户登录截图,以及联系方式和邮寄地址逾期视为放弃领奖资格哦!! 如何邀请好友?1.点击本页面上方“立即报名”按钮 > 2.登录/注册华为云账号 > 3.填写信息完成活动报名 > 4.报名成功弹窗中点击分享有礼(或进入我的直播中点击分享有礼按钮) > 5.按照引导将活动分享至你的好友,并引导ta完成本活动报名。- 活动规则1)您邀请的好友必须完成狂欢日直播活动的报名,否则不视为邀请成功。2)不可邀请自己的其他任意账号参与活动,否则取消活动资格。3)请确保您邀请的用户为真实有效的用户,如发现存在恶意注册、恶意邀请等行为(“恶意”是指为获取奖励资格而异常注册账号等破坏活动公平性的行为),我们将取消相关人员获奖资格。4)请务必使用个人账号参与活动(IAM、企业账号等账号参与无效)5)所有奖项获奖用户,请于获奖后3日内完成实名认证,否则视为放弃奖励!!!最终邀请好友的数量将从高到低排列,前20位将领取到奖品(前提符合每个阶段邀请数量)。 2、论坛提问赢取HDZ笔记本套盒直播前在本帖中留下感兴趣的问题,讲师会在直播的答疑环节,抽取3个问题,被选中的幸运用户可获得HDZ笔记本套盒。 3、直播结束后论坛互动颈枕抱回家直播结束后可继续在帖子内提问并发表心得体会。直播结束后将对帖子内互动的所有人进行抽奖。从中选出3个优质的互动和3个积极互动。优质互动奖品为颈枕、积极互动奖品为HDZ三合一数据线。积极互动奖抽取规则:在本帖所有盖楼的用户中抽取获奖楼层,获奖楼层=总数层*中奖百分比,中奖百分比为30%、60%、90%的为互动幸运奖,中奖结果采取四舍五入的形式。每位用户中奖次数只有一次,优质互动奖和积极互动奖不可兼得。中奖结果公布啦!!!积极互动奖品:34*0.3=10.234*0.6=20.434*0.9=30.6根据四舍五入,中奖楼层分别为10楼、20楼、31楼优质互动奖:问道、CharlesE、AAAI请以上中奖用户于12月10日之前,添加小助手微信号:Huawei-HDZ发送联系方式和邮寄地址,逾期视为放弃领奖资格直播期间,参与互动,还有机械键盘等多重好礼拿哦,大家千万不要错过哦~韦老师的ppt更新啦,大家快来看吧!!!HDZ社区—携手全球开发者 共建开放、创新、多元的开发者社区组织 HDZ是Huawei Developer Zone的英文缩写,是华为开发者生态面向全球开发者建立开放、创新、多元的开发者社区组织。 致力于帮助开发者学习提升、互动交流、挖掘机会,推动ICT、互联网等产业生态的建立和发展。 对云计算、IoT、人工智能、5G、区块链、鲲鹏、昇腾、软件开发与运维、开源等各技术领域感兴趣的开发者、软件工程师、创业者、运营人、产品人、大学生、老师等都可以参与到HDZ。 HDZ秉承开放、创新、多元的社区文化,完全由各地HDZ组织者、志愿者自发组建和领导。华为公司不直接参与HDZ组织建设和领导,只按需对HDZ社区活动提供必要的方向指导、资源支持、活动支撑等,并为各地HDZ组织者提供与全国组织者互动交流的机会。
-
calendar 还支持返回指定月份的日历:1print(calendar.month(2019, 11))结果如下:November 2019Mo Tu We Th Fr Sa Su1 2 34 5 6 7 8 9 1011 12 13 14 15 16 1718 19 20 21 22 23 2425 26 27 28 29 30我们还可以直接获得某月的总天数:1print(calendar.monthlen(2019, 11))结果如下30我们还可以知道指定的日期对应的星期数:1print(calendar.weekday(2019, 11, 7))结果如下:3
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签