【四旋翼飞行器】76小时吃透四轴算法!史上最强软硬结合实战项目,👉戳此立抢👈

如何让你的Python代码竟优雅又地道

马哥Linux运维 2019-02-03 12:35 次阅读

如果说优雅也有缺点的话,那就是你需要艰巨的工作才能得到它,需要良好的教育才能欣赏它。

—— Edsger Wybe Dijkstra

Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic。一般说地道(idiomatic)的python代码,就是指这份代码很pythonic。Python的语法和标准库设计,处处契合着pythonic的思想。而且Python社区十分注重编码风格一的一致性,他们极力推行和处处实践着pythonic。所以经常能看到基于某份代码P vs NP (pythonic vs non-pythonic)的讨论。pythonic的代码简练,明确,优雅,绝大部分时候执行效率高。阅读pythonic的代码能体会到“代码是写给人看的,只是顺便让机器能运行”畅快。

然而什么是pythonic,就像什么是地道的汉语一样,切实存在但标准模糊。import this可以看到Tim Peters提出的Python之禅,它提供了指导思想。许多初学者都看过它,深深赞同它的理念,但是实践起来又无从下手。PEP 8给出的不过是编码规范,对于实践pythonic还远远不够。如果你正被如何写出pythonic的代码而困扰,或许这份笔记能给你帮助。

Raymond Hettinger是Python核心开发者,本文提到的许多特性都是他开发的。同时他也是Python社区热忱的布道师,不遗余力地传授pythonic之道。这篇文章是网友Jeff Paine整理的他在2013年美国的PyCon的演讲的笔记。

如何让你的Python代码竟优雅又地道

术语澄清:本文所说的集合全都指collection,而不是set。

以下是正文。

本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片)。

示例代码和引用的语录都来自Raymond的演讲。这是我按我的理解整理出来的,希望你们理解起来跟我一样顺畅!

遍历一个范围内的数字

foriin[0,1,2,3,4,5]:

printi ** 2

foriinrange(6):

printi ** 2

更好的方法

foriinxrange(6):

printi ** 2

xrange会返回一个迭代器,用来一次一个值地遍历一个范围。这种方式会比range更省内存。xrange在Python 3中已经改名为range。

遍历一个集合

colors = ['red','green','blue','yellow']

foriinrange(len(colors)):

print colors[i]

更好的方法

forcolor incolors:

print color

反向遍历

colors = ['red','green','blue','yellow']

foriinrange(len(colors)-1, -1, -1):

print colors[i]

更好的方法

forcolor inreversed(colors):

print color

遍历一个集合及其下标

colors = ['red','green','blue','yellow']

foriinrange(len(colors)):

printi,'--->',colors[i]

更好的方法

fori,color inenumerate(colors):

printi,'--->',color

这种写法效率高,优雅,而且帮你省去亲自创建和自增下标。

当你发现你在操作集合的下标时,你很有可能在做错事。

遍历两个集合

names = ['raymond','rachel','matthew']

colors = ['red','green','blue','yellow']

n = min(len(names),len(colors))

foriinrange(n):

print names[i],'--->',colors[i]

forname,color inzip(names,colors):

print name,'--->',color

更好的方法

forname,color inizip(names,colors):

print name,'--->',color

zip在内存中生成一个新的列表,需要更多的内存。izip比zip效率更高。

注意:在Python 3中,izip改名为zip,并替换了原来的zip成为内置函数。

有序地遍历

colors = ['red','green','blue','yellow']

# 正序

forcolor insorted(colors):

print colors

# 倒序

forcolor insorted(colors,reverse=True):

print colors

自定义排序顺序

colors = ['red','green','blue','yellow']

def compare_length(c1,c2):

iflen(c1) < len(c2): return -1

iflen(c1) > len(c2): return1

return0

print sorted(colors,cmp=compare_length)

更好的方法

print sorted(colors, key=len)

第一种方法效率低而且写起来很不爽。另外,Python 3已经不支持比较函数了。

调用一个函数直到遇到标记值

blocks = []

whileTrue:

block = f.read(32)

ifblock == '':

break

blocks.append(block)

更好的方法

blocks = []

forblock initer(partial(f.read,32),''):

blocks.append(block)

iter接受两个参数。第一个是你反复调用的函数,第二个是标记值。

译注:这个例子里不太能看出来方法二的优势,甚至觉得partial让代码可读性更差了。方法二的优势在于iter的返回值是个迭代器,迭代器能用在各种地方,set,sorted,min,max,heapq,sum……

在循环内识别多个退出点

def find(seq,target):

found = False

fori,value inenumerate(seq):

ifvalue == target:

found = True

break

ifnotfound:

return -1

returni

更好的方法

def find(seq,target):

fori,value inenumerate(seq):

ifvalue == target:

break

else:

return -1

returni

for执行完所有的循环后就会执行else。

译注:刚了解for-else语法时会困惑,什么情况下会执行到else里。有两种方法去理解else。传统的方法是把for看作if,当for后面的条件为False时执行else。其实条件为False时,就是for循环没被break出去,把所有循环都跑完的时候。所以另一种方法就是把else记成nobreak,当for没有被break,那么循环结束时会进入到else。

遍历字典的key

d = {'matthew': 'blue','rachel': 'green','raymond': 'red'}

forkind:

printk

forkind.keys():

ifk.startswith('r'):

deld[k]

什么时候应该使用第二种而不是第一种方法?当你需要修改字典的时候。

如果你在迭代一个东西的时候修改它,那就是在冒天下之大不韪,接下来发生什么都活该。

d.keys()把字典里所有的key都复制到一个列表里。然后你就可以修改字典了。

注意:如果在Python 3里迭代一个字典你得显示地写:list(d.keys()),因为d.keys()返回的是一个“字典视图”(一个提供字典key的动态视图的迭代器)。详情请看文档。

遍历一个字典的key和value

# 并不快,每次必须要重新哈希并做一次查找

forkind:

printk,'--->',d[k]

# 产生一个很大的列表

fork,vind.items():

printk,'--->',v

更好的方法

fork,vind.iteritems():

printk,'--->',v

iteritems()更好是因为它返回了一个迭代器。

注意:Python 3已经没有iteritems()了,items()的行为和iteritems()很接近。详情请看文档。

用key-value对构建字典

names = ['raymond','rachel','matthew']

colors = ['red','green','blue']

d = dict(izip(names,colors))

# {'matthew': 'blue', 'rachel': 'green', 'raymond': 'red'}

Python 3: d = dict(zip(names, colors))

用字典计数

colors = ['red','green','red','blue','green','red']

# 简单,基本的计数方法。适合初学者起步时学习。

d = {}

forcolor incolors:

ifcolor notind:

d[color] = 0

d[color] += 1

# {'blue': 1, 'green': 2, 'red': 3}

更好的方法

d = {}

forcolor incolors:

d[color] = d.get(color,0) + 1

# 稍微潮点的方法,但有些坑需要注意,适合熟练的老手。

d = defaultdict(int)

forcolor incolors:

d[color] += 1

用字典分组 — 第I部分和第II部分

names = ['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

# 在这个例子,我们按name的长度分组

d = {}

forname innames:

key = len(name)

ifkey notind:

d[key] = []

d[key].append(name)

# {5: ['roger', 'betty'], 6: ['rachel', 'judith'], 7: ['raymond', 'matthew', 'melissa', 'charlie']}

d = {}

forname innames:

key = len(name)

d.setdefault(key,[]).append(name)

更好的方法

d = defaultdict(list)

forname innames:

key = len(name)

d[key].append(name)

字典的popitem()是原子的吗?

d = {'matthew': 'blue','rachel': 'green','raymond': 'red'}

whiled:

key,value = d.popitem()

print key,'-->',value

popitem是原子的,所以多线程的时候没必要用包着它。

连接字典

defaults = {'color': 'red','user': 'guest'}

parser = argparse.ArgumentParser()

parser.add_argument('-u','--user')

parser.add_argument('-c','--color')

namespace = parser.parse_args([])

command_line_args = {k: vfork,vinvars(namespace).items()ifv}

# 下面是通常的作法,默认使用第一个字典,接着用环境变量覆盖它,最后用命令行参数覆盖它。

# 然而不幸的是,这种方法拷贝数据太疯狂。

d = defaults.copy()

d.update(os.environ)

d.update(command_line_args)

更好的方法

d = ChainMap(command_line_args, os.environ, defaults)

ChainMap在Python 3中加入。高效而优雅。

提高可读性

位置参数和下标很漂亮

但关键字和名称更好

第一种方法对计算机来说很便利

第二种方法和人类思考方式一致

用关键字参数提高函数调用的可读性

twitter_search('@obama', False, 20, True)

更好的方法

twitter_search('@obama', retweets=False, numtweets=20, popular=True)

第二种方法稍微(微秒级)慢一点,但为了代码的可读性和开发时间,值得。

用namedtuple提高多个返回值的可读性

# 老的testmod返回值

doctest.testmod()

# (0, 4)

# 测试结果是好是坏?你看不出来,因为返回值不清晰。

更好的方法

# 新的testmod返回值, 一个namedtuple

doctest.testmod()

# TestResults(failed=0, attempted=4)

namedtuple是tuple的子类,所以仍适用正常的元组操作,但它更友好。

创建一个nametuple

TestResults = namedTuple('TestResults', ['failed', 'attempted'])

unpack序列

p = 'Raymond','Hettinger',0x30,'python@example.com'

# 其它语言的常用方法/习惯

fname = p[0]

lname = p[1]

age = p[2]

email = p[3]

更好的方法

fname, lname, age, email = p

第二种方法用了unpack元组,更快,可读性更好。

更新多个变量的状态

def fibonacci(n):

x = 0

y = 1

foriinrange(n):

printx

t = y

y = x + y

x = t

更好的方法

def fibonacci(n):

x,y = 0,1

foriinrange(n):

printx

x,y = y,x + y

第一种方法的问题

x和y是状态,状态应该在一次操作中更新,分几行的话状态会互相对不上,这经常是bug的源头。

操作有顺序要求

太底层太细节

第二种方法抽象层级更高,没有操作顺序出错的风险而且更效率更高。

同时状态更新

tmp_x = x + dx *t

tmp_y = y + dy *t

tmp_dx = influence(m,x,y,dx,dy,partial='x')

tmp_dy = influence(m,x,y,dx,dy,partial='y')

x = tmp_x

y = tmp_y

dx = tmp_dx

dy = tmp_dy

更好的方法

x,y,dx,dy = (x + dx *t,

y + dy *t,

influence(m,x,y,dx,dy,partial='x'),

influence(m,x,y,dx,dy,partial='y'))

效率

优化的基本原则

除非必要,别无故移动数据

稍微注意一下用线性的操作取代O(n**2)的操作

总的来说,不要无故移动数据

连接字符串

names = ['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

s = names[0]

forname innames[1:]:

s += ', ' + name

prints

更好的方法

print ', '.join(names)

更新序列

names = ['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

del names[0]

# 下面的代码标志着你用错了数据结构

names.pop(0)

names.insert(0,'mark')

更好的方法

names = deque(['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie'])

# 用deque更有效率

del names[0]

names.popleft()

names.appendleft('mark')

装饰器和上下文管理

用于把业务和管理的逻辑分开

分解代码和提高代码重用性的干净优雅的好工具

起个好名字很关键

记住蜘蛛侠的格言:能力越大,责任越大

使用装饰器分离出管理逻辑

# 混着业务和管理逻辑,无法重用

def web_lookup(url,saved={}):

ifurl insaved:

returnsaved[url]

page = urllib.urlopen(url).read()

saved[url] = page

returnpage

更好的方法

@cache

def web_lookup(url):

returnurllib.urlopen(url).read()

注意:Python 3.2开始加入了functools.lru_cache解决这个问题。

分离临时上下文

# 保存旧的,创建新的

old_context = getcontext().copy()

getcontext().prec = 50

print Decimal(355) / Decimal(113)

setcontext(old_context)

更好的方法

with localcontext(Context(prec=50)):

print Decimal(355) / Decimal(113)

译注:示例代码在使用标准库decimal,这个库已经实现好了localcontext。

如何打开关闭文件

f = open('data.txt')

try:

data = f.read()

finally:

f.close()

更好的方法

with open('data.txt')asf:

data = f.read()

如何使用锁

# 创建锁

lock = threading.Lock()

# 使用锁的老方法

lock.acquire()

try:

print'Critical section 1'

print'Critical section 2'

finally:

lock.release()

更好的方法

# 使用锁的新方法

with lock:

print'Critical section 1'

print'Critical section 2'

分离出临时的上下文

try:

os.remove('somefile.tmp')

except OSError:

pass

更好的方法

with ignored(OSError):

os.remove('somefile.tmp')

ignored是Python 3.4加入的, 文档。

注意:ignored 实际上在标准库叫suppress(译注:contextlib.supress).

试试创建你自己的ignored上下文管理器。

@contextmanager

def ignored(*exceptions):

try:

yield

except exceptions:

pass

把它放在你的工具目录,你也可以忽略异常

译注:contextmanager在标准库contextlib中,通过装饰生成器函数,省去用__enter__和__exit__写上下文管理器。详情请看文档。

分离临时上下文

# 临时把标准输出重定向到一个文件,然后再恢复正常

with open('help.txt','w')asf:

oldstdout = sys.stdout

sys.stdout = f

try:

help(pow)

finally:

sys.stdout = oldstdout

更好的写法

with open('help.txt','w')asf:

with redirect_stdout(f):

help(pow)

redirect_stdout在Python 3.4加入(译注:contextlib.redirect_stdout), bug反馈。

实现你自己的redirect_stdout上下文管理器。

@contextmanager

def redirect_stdout(fileobj):

oldstdout = sys.stdout

sys.stdout = fileobj

try:

yield fieldobj

finally:

sys.stdout = oldstdout

简洁的单句表达

两个冲突的原则:

一行不要有太多逻辑

不要把单一的想法拆分成多个部分

Raymond的原则:

一行代码的逻辑等价于一句自然语言

列表解析和生成器

result = []

foriinrange(10):

s = i ** 2

result.append(s)

print sum(result)

更好的方法

print sum(i**2 for i in xrange(10))

第一种方法说的是你在做什么,第二种方法说的是你想要什么。

原文标题:让你的 Python 代码优雅又地道

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

FPGA与上位机UDP连接通信

使用Verilog写的FPGA代码用UDP与上位机通信,上位机代码使用Python填写。...
发表于 02-22 07:30 11次 阅读
FPGA与上位机UDP连接通信

快速提升Python开发和配置效率的5个小技巧分享

在以前,作为一个刚开始使用Python的开发者,我时常为布设一个有效的开发环境感到困扰。找到一套自己....
的头像 马哥Linux运维 发表于 02-21 17:05 166次 阅读
快速提升Python开发和配置效率的5个小技巧分享

cplusplus部分在那里?

到目前为止,我的集合中仅有的具有以下结构的MCC生成的.h文件是FVR.H:所有其他的都没有关闭IFDEF部分(上面代码示例...
发表于 02-21 14:03 15次 阅读
cplusplus部分在那里?

代码错误消息

您好,我已经附加了七段显示的代码,但是当它被合成检查时,+运算符出现了问题? 有人可以帮忙吗? 非常感谢 以上来自于谷歌...
发表于 02-21 11:09 26次 阅读
代码错误消息

深度学习可能需要比Python更灵活更易于用的新编程语言

尽管工程师们普遍定位 Python 是简单、优雅的编程语言,但它并非毫无缺点,比如人们一直吐槽它的执....
的头像 电子发烧友网工程师 发表于 02-21 10:23 205次 阅读
深度学习可能需要比Python更灵活更易于用的新编程语言

盘点史上最全的Python算法集

本文是一些机器人算法(特别是自动导航算法)的Python代码合集。其主要特点有以下三点:选择了在实践....
的头像 电子发烧友网工程师 发表于 02-21 10:04 538次 阅读
盘点史上最全的Python算法集

易语言大漠插件DM中文版资料合集免费下载

本文档的主要内容详细介绍的是易语言大漠插件DM中文版应用程序资料合集免费下载。
发表于 02-21 08:00 3次 阅读
易语言大漠插件DM中文版资料合集免费下载

一名Python开发工程师的职业规划

Python 是一种面向对象的解释型计算机程序设计语言,在设计中注重代码的可读性,同时也是一种功能强....
的头像 工程师人生 发表于 02-20 14:46 137次 阅读
一名Python开发工程师的职业规划

数据库教程之成绩管理系统的开发实例资料说明

本文档的详细介绍的是数据库教程之成绩管理系统的开发实例资料说明主要内容包括了:1 系统设计的一般过程....
发表于 02-20 14:05 23次 阅读
数据库教程之成绩管理系统的开发实例资料说明

Java教程之零点起飞学Java的异常处理资料说明

Java语言提供了异常机制来处理程序运行过程中可能发生的各种非正常事件。通过异常处理机制,大大提高了....
发表于 02-20 10:41 13次 阅读
Java教程之零点起飞学Java的异常处理资料说明

分享编程的七宗罪,也许对你会有所启发

我不知道为什么,身边总有一些人,使用很短 / 随机的名称来给变量命名。当你的项目只有 10-20 行....
的头像 新智元 发表于 02-20 09:05 197次 阅读
分享编程的七宗罪,也许对你会有所启发

Jupyter notebook是一款学习和科研的神奇

在代码中存在很多可以复用的代码片,比如说每次程序开头都需要import的一大堆包和一些常用的数据操作....
的头像 将门创投 发表于 02-19 09:32 161次 阅读
Jupyter notebook是一款学习和科研的神奇

通过Python将故宫的建筑物图片,转化为手绘图

把图像看成二维离散函数,灰度梯度其实就是这个二维离散函数的求导,用差分代替微分,求取图像的灰度梯度。....
的头像 电子发烧友网工程师 发表于 02-19 09:26 1534次 阅读
通过Python将故宫的建筑物图片,转化为手绘图

Verilog HDL作为现在最流行的FPGA开发语言 是入门的基础

Verilog HDL作为现在最流行的FPGA开发语言,当然是入门基础。
发表于 02-18 14:47 121次 阅读
Verilog HDL作为现在最流行的FPGA开发语言 是入门的基础

Python打造最强表白程序

在抓取这个网站的情话时,如果你利用普通的爬取思路,即利用 request 进行请求,你会发现网页获取....
的头像 电子发烧友网工程师 发表于 02-18 09:47 269次 阅读
Python打造最强表白程序

如何快速入门Python爬虫的?

抛开数据,可能你会觉得这张图在排版布局、色彩搭配、字体文字等方面还挺好看的。这些呢,就跟爬虫没什么关....
的头像 电子发烧友网工程师 发表于 02-18 09:38 236次 阅读
如何快速入门Python爬虫的?

TensorFlow 2.0最佳实践及主要变化

由于能够自由地穿插 Python 和 TensorFlow 代码,您能够充分利用 Python 的表....
的头像 电子发烧友网工程师 发表于 02-18 09:34 202次 阅读
TensorFlow 2.0最佳实践及主要变化

“公开代码”再次成为焦点,这次你站在哪一边?

实际上,GPT2就是一个自动文本生成器,但鉴于其训练数据量直接影响模型的性能,也使GPT2成为一个更....
的头像 新智元 发表于 02-18 09:09 332次 阅读
“公开代码”再次成为焦点,这次你站在哪一边?

全向轮三轮小车运动控制的代码资料合集免费下载

本文档的主要内容详细介绍的是全向轮三轮小车运动控制的代码资料合集免费下载。
发表于 02-18 08:00 23次 阅读
全向轮三轮小车运动控制的代码资料合集免费下载

【PYNQ-Z2试用体验】Jupyter Notebook体验

前言上一篇文章中,我们通过网线连接开发板,以ssh的方式成功登录了linux系统。通过资料发现系统安装了交互式的Python,接下来...
发表于 02-17 19:37 136次 阅读
【PYNQ-Z2试用体验】Jupyter Notebook体验

mysql8.0中的无锁重做日志源码介绍

InnoDB 和大部分的存储引擎一样, 都是采用WAL 的方式进行写入数据,所有的数据都先写入到re....
的头像 电子发烧友网工程师 发表于 02-17 10:52 384次 阅读
mysql8.0中的无锁重做日志源码介绍

深度分析C语言和其他高级语言的区别

提到C语言,我们知道c语言和其他高级语言的最大的区别就是C语言是要操作内存的!
的头像 玩转单片机 发表于 02-17 09:53 310次 阅读
深度分析C语言和其他高级语言的区别

OpenCV的Mat数据格式及其遍历的程序资料说明

在opencv早期的版本中,图像通过一个叫做IplImage的结构(structure)存储在内存中....
的头像 C语言专家集中营 发表于 02-17 09:42 265次 阅读
OpenCV的Mat数据格式及其遍历的程序资料说明

用python做一个三阶拼图

程序的功能很简单,还是之前我们用到的pygame和随机数的知识,整个流程非常的清晰,但是我们需要注意....
的头像 电子发烧友网工程师 发表于 02-16 10:37 318次 阅读
用python做一个三阶拼图

为什么选择Python?谈谈如何学习Python

每种语言都有它自己的优点和缺点,以及最适用的场景。Python 最常用的三个场景是数据处理、编写 W....
的头像 电子发烧友网工程师 发表于 02-16 10:26 370次 阅读
为什么选择Python?谈谈如何学习Python

Python登上“最强王者”中国程序猿是“全场MVP”

国内基于 Python 创业成功的案例不在少数,豆瓣,知乎,果壳,全栈都是 Python,大家对 P....
的头像 电子发烧友网工程师 发表于 02-16 10:23 291次 阅读
Python登上“最强王者”中国程序猿是“全场MVP”

TIOBE编程语言社区发布了最新的2月编程语言排行榜

除此之外,Groovy 在一次进入语言排行榜前20,它第一次进入语言排行榜前20是在2016年末,因....
的头像 电子发烧友网工程师 发表于 02-16 10:12 350次 阅读
TIOBE编程语言社区发布了最新的2月编程语言排行榜

仔细研究用于机器学习和数据科学的十大Python工具

毫无疑问,Python是最流行的语言之一,其成功的原因之一是它为科学计算提供了广泛的报道。 在这里,....
的头像 人工智能 发表于 02-15 15:03 335次 阅读
仔细研究用于机器学习和数据科学的十大Python工具

黑客是怎么用python的?检如何判断目标环境是否部署防火墙?

在步骤1中我们定义了我们的HTML文档,其中表单名称为“waf”。因此在第三行代码中,我们需要告诉m....
的头像 马哥Linux运维 发表于 02-15 14:26 266次 阅读
黑客是怎么用python的?检如何判断目标环境是否部署防火墙?

Python爬虫库-BeautifulSoup的使用

可以看到 children 的类型为 .contents 和 .children 属性仅包含tag的....
的头像 马哥Linux运维 发表于 02-15 14:22 256次 阅读
Python爬虫库-BeautifulSoup的使用

Python的套路都在这里了!7个案例15分钟让你了解

而我要推荐的计算机语言,答案已在标题中被出卖:Python!Python是一门十分容易上手,但是又被....
的头像 马哥Linux运维 发表于 02-15 14:14 403次 阅读
Python的套路都在这里了!7个案例15分钟让你了解

如何用Python实现极大似然估计?

从上面的结论可以看出,作100次伯努利实验,出现positive、1及head的数目是53个,相应的....
的头像 马哥Linux运维 发表于 02-15 14:07 253次 阅读
如何用Python实现极大似然估计?

一种新的Linux系统后门已经开始肆虐

Check Point 表示 SpeakUp 可以在六种不同的 Linux 发行版甚至 macOS ....
的头像 Linux爱好者 发表于 02-15 13:59 206次 阅读
一种新的Linux系统后门已经开始肆虐

使用python进行语音识别的终极指南

亚马逊的 Alexa 的巨大成功已经证明:在不远的将来,实现一定程度上的语音支持将成为日常科技的基本....
的头像 马哥Linux运维 发表于 02-15 13:42 235次 阅读
使用python进行语音识别的终极指南

请问谁知道类似代码检查工具吗

发现一个很好用,但是是试用版,crystall revs for c,谁知道类似的工具啊?...
发表于 02-15 02:14 62次 阅读
请问谁知道类似代码检查工具吗

数据库教程之异常处理的详细资料说明

在实际的应用程序设计中,不可避免地会出现程序错误和异常。因此,异常处理是每一种程序设计语言都必须包含....
发表于 02-14 17:11 30次 阅读
数据库教程之异常处理的详细资料说明

如何提高PHP网站安全性详细技巧资料说明

技巧1:使用合适的错误报告 一般在开发过程中,很多程序员总是忘了制作程序错误报告,这是极大的错误,....
发表于 02-14 15:42 18次 阅读
如何提高PHP网站安全性详细技巧资料说明

FEM模拟中的python异常

您好,我在Linux RedHat5_10下使用EMPRo2013_07运行大型FEM模拟时收到以下Python错误消息有没有人得到类似的东西? ...
发表于 02-14 15:14 28次 阅读
FEM模拟中的python异常

求scons和python软件分享

那位大佬有这两款软件,求分享!邮箱:
发表于 02-14 03:07 41次 阅读
求scons和python软件分享

请问__attribute__ ((interrupt(USCI_A0_VECTOR)))代码的作用是什么?

官方例程中会出现这样的代码,请问__attribute__ ((interrupt(USCI_A0_VECTOR)))与__even_in_range(UCA0IV,4)的...
发表于 02-14 00:35 181次 阅读
请问__attribute__ ((interrupt(USCI_A0_VECTOR)))代码的作用是什么?

几种架构中代码压缩技术的实现进行比较分析

对于嵌入式软件而言,代码尺寸是越小越好。压缩代码以适应受到成本或空间限制的存储子系统已经成为嵌入式系....
的头像 玩转单片机 发表于 02-13 16:28 299次 阅读
几种架构中代码压缩技术的实现进行比较分析

MicroPython自动浇水实验

    实验目的:     学习在PC机系统中扩展简单I/O 接口的方法     学习TurnipBit拼插...
发表于 02-13 13:11 220次 阅读
MicroPython自动浇水实验

用Python分析过 36年春晚节目数据,发现了一些趣事

导演是春晚的总负责人,好比厨师,厨师决定了春晚大餐好不好吃。36 年间,有很多导演负责过春晚,比如近....
的头像 新智元 发表于 02-13 11:03 465次 阅读
用Python分析过 36年春晚节目数据,发现了一些趣事

自然语言处理工具python调用hanlp中文实体识别

Hanlp作为一款重要的中文分词工具,在GitHub的用户量已经非常之高,应该可以看得出来大家对于hanlp这款分词工具还是很认可的。...
发表于 02-13 10:26 389次 阅读
自然语言处理工具python调用hanlp中文实体识别

讨论8种在Python环境下进行简单线性回归计算的算法

对于大多数数据科学家而言,线性回归方法是他们进行统计学建模和预测分析任务的起点。但我们不可夸大线性模....
的头像 马哥Linux运维 发表于 02-13 10:23 794次 阅读
讨论8种在Python环境下进行简单线性回归计算的算法

Go语言其实有很多优良特性,很多时候都可以代替Python

但 Go 要想撼动编程界的常青树 Java 二十多年的地位无疑难度颇大。据 HackerRank 数....
的头像 新智元 发表于 02-13 10:01 454次 阅读
Go语言其实有很多优良特性,很多时候都可以代替Python

光学相位编码测距的多普勒校正和检测方法及系统

相位编码激光雷达的多普勒校正包括一个表示相位编码信号的相位序列的编码,以及确定信号的第一傅立叶变换。....
发表于 02-12 08:00 42次 阅读
光学相位编码测距的多普勒校正和检测方法及系统

Python自动化运维技术与最佳实践PDF可复制版电子书免费下载

市面上介绍互动的、面向对象的Python编程语言的书有很多,其强大而又灵活的特性,使其成为很多企图通....
发表于 02-12 08:00 52次 阅读
Python自动化运维技术与最佳实践PDF可复制版电子书免费下载

用来创建神经网络的两种样式之间的利弊权衡

使用 Keras 构建模型就像 “把乐高积木拼在一起” 一样简单。为什么这样说呢?我们后面将介绍其中....
的头像 TensorFlow 发表于 02-11 16:58 293次 阅读
用来创建神经网络的两种样式之间的利弊权衡

进行编码、测试和调试三个阶段时如何减少bug

这十年来我做过小的嵌入式系统,大的电信系统以及基于web的系统。使用过C ++,Ruby,Java和....
的头像 嵌入式ARM 发表于 02-11 16:52 211次 阅读
进行编码、测试和调试三个阶段时如何减少bug

用Python做几个表情包

今天制作表情包用到的技术还是之前提到的Turtle库,可以从之前的文章除了画佩奇我们还要玩点更高级的....
的头像 电子发烧友网工程师 发表于 02-11 11:13 285次 阅读
用Python做几个表情包

详解了将三万行代码从Flow移植到TypeScript的全过程

最新发布的Babel 7已经开始支持TypeScript了,这引起了我的注意。这个发布意味着采用Ty....
的头像 电子发烧友网工程师 发表于 02-11 11:05 317次 阅读
详解了将三万行代码从Flow移植到TypeScript的全过程

用Python做一款翻译软件

sign 参数是根据翻译的内容而在前台生成的,如果发送的请求中,query 内容和 sign 不匹配....
的头像 电子发烧友网工程师 发表于 02-11 10:42 381次 阅读
用Python做一款翻译软件

RDA5807系列参考代码的详细资料免费下载

本文档的主要内容详细介绍的是RDA5807系列参考代码的详细资料免费下载。1、此代码为RDA FM系....
发表于 02-11 08:00 18次 阅读
RDA5807系列参考代码的详细资料免费下载