张飞软硬开源基于STM32 BLDC直流无刷电机驱动器开发视频套件,👉戳此立抢👈

如何让你的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开发板培训华为设计经典笔试面试xilinx视频教程altera

  FPGA笔试面试教程1.本课程共包括40个视频内容,全由潘老师主讲2.本课程基于至简设计法思想,明德扬的特
发表于 01-23 00:00 945次 阅读
明德扬FPGA开发板培训华为设计经典笔试面试xilinx视频教程altera

Python爬虫工程师面试时的常见问题

一般面试官的第一个问题八成都是问一下以前做过的项目,所以最好准备两个自己最近写的有些技术
的头像 工程师人生 发表于 04-18 15:36 41次 阅读
Python爬虫工程师面试时的常见问题

源码python文件解析

21小时上手深度学习3-Neural Song
发表于 04-18 15:34 7次 阅读
源码python文件解析

如何利用Python对Ginkgo USB- CAN进行发送和接收数据

Python版本:硬件版本3.5.3 两套Ginkgo USB-CAN 接口:VTG203B 硬件连接: ITEM1    ITEM2 ...
发表于 04-18 12:04 86次 阅读
如何利用Python对Ginkgo USB- CAN进行发送和接收数据

US-100超声波传感器的电气参数和进行测距的代码免费下载

本文档的主要内容详细介绍的设计US-100超声波传感器的电气参数和进行测距的代码免费下载。
发表于 04-17 17:28 28次 阅读
US-100超声波传感器的电气参数和进行测距的代码免费下载

请问这个代码的内容是什么

/* */ #include sbit beep=P2^3; sbit dula=P2^6; sbit wela=P2^7; unsigned char i=100; unsigned char j,k,temp,ke...
发表于 04-17 11:19 139次 阅读
请问这个代码的内容是什么

IBM经典教程中的例子——在进行网页检索时通过多线程进行加速

这里多扯两句: multiprocessing.dummy? mltiprocessing 库的线程....
的头像 马哥Linux运维 发表于 04-16 12:57 162次 阅读
IBM经典教程中的例子——在进行网页检索时通过多线程进行加速

Python爬虫爬取美剧网站

后来发现,其电视剧链接都是在文章里面,然后文章url后面有个数字编号,就像这样的http://cn1....
的头像 马哥Linux运维 发表于 04-16 12:52 167次 阅读
Python爬虫爬取美剧网站

如何使用keil4创建一个合格的单片机项目

作为一个菜鸟,刚开始用keil编译c程序时应该注重代码的学习,而不是代码文件的结构,所有的.c文件、....
发表于 04-15 18:24 22次 阅读
如何使用keil4创建一个合格的单片机项目

使用51单片机进行四路抢答器的程序资料免费下载

对于这在被单片机课程设计折磨的小伙伴们,这或许是一个不错的选择!简单方便,成本低廉首先声明,本设计由....
发表于 04-15 18:24 22次 阅读
使用51单片机进行四路抢答器的程序资料免费下载

Phpstorm本地激活的安装方法详细资料免费下载

本文档的主要内容详细介绍的是Phpstorm本地激活的安装方法详细资料免费下载。
发表于 04-15 17:33 25次 阅读
Phpstorm本地激活的安装方法详细资料免费下载

基于HTTP间谍抓包插件分析有道翻译反爬机制

python实战:利用chrome抓包插件HTTP间谍分析有道翻译反爬机制...
发表于 04-15 11:41 18次 阅读
基于HTTP间谍抓包插件分析有道翻译反爬机制

利用代码和机器学习技术实现健康减肥,你听说过吗?

去年底有个沉寂了快两年的减肥贴在 Reddit 上又火了起来,什么呢?
的头像 机器人大讲堂 发表于 04-15 09:05 250次 阅读
利用代码和机器学习技术实现健康减肥,你听说过吗?

请问如何利用Python对Ginkgo USB- CAN进行发送和接收数据

Python版本:硬件版本3.5.3 两套Ginkgo USB-CAN 接口:VTG203B 硬件连接: ITEM1    ITEM2 ...
发表于 04-13 09:35 40次 阅读
请问如何利用Python对Ginkgo USB- CAN进行发送和接收数据

基于python的verilog模拟是否可行?

我注意到在模拟或HDL生成中使用Python有一些活动。 技术效果如何? 任何有经验的RTL设计师都尝试过这个想法? 以上来...
发表于 04-12 14:59 21次 阅读
基于python的verilog模拟是否可行?

Effective C++中文第三版电子书免费下载

有人说C++程序员可以分成两类,读过Effective C+ +的和没读过的。世界顶级C++大师Sc....
发表于 04-12 08:00 36次 阅读
Effective C++中文第三版电子书免费下载

C语言编程培训教程资料免费下载

本文档的主要内容详细介绍的是C语言编程培训教程资料免费下载包括了:1. 排版,2. 注释,3. 标识....
发表于 04-12 08:00 60次 阅读
C语言编程培训教程资料免费下载

python入门圣经《Python编程:从入门到实践》高清电子书

豆瓣评分 9.1 本书是一本针对所有层次的Python 读者而作的Python 入门书。全书分两部分:第一部分介绍用Python 编程所...
发表于 04-11 18:22 301次 阅读
python入门圣经《Python编程:从入门到实践》高清电子书

python核心编程中文第三版电子书免费下载

 本书是经典畅销图书《Python 核心编程(第二版)》的全新升级版本,总共分为3 部分。第1 部分....
发表于 04-11 16:08 81次 阅读
python核心编程中文第三版电子书免费下载

Python 之父发声,认为 996 工作制是不人道的

我们应该怎么做才能帮助这些程序员?怎样才能引起西方媒体和政府的关注?
的头像 机器人大讲堂 发表于 04-10 11:30 621次 阅读
Python 之父发声,认为 996 工作制是不人道的

蓝牙编码格式简介

以下当前较为常用的几种蓝牙音频传输格式和支持厂商。下面按照编码的码率由低到高列举。
的头像 发烧友学院 发表于 04-09 14:22 227次 阅读
蓝牙编码格式简介

MSU公布了2018视频编码压缩报告的补充部分

在该免费版报告中并未说明使用x265的哪个速度档用作对比。此报告作为“2018MSU编码报告”的补充....
的头像 LiveVideoStack 发表于 04-08 17:21 505次 阅读
MSU公布了2018视频编码压缩报告的补充部分

Bridgetek与Zerynth和Riverdi技术结盟 成为物联网合作伙伴

为了让先进的图形控制芯片在新兴物联网(IoT)领域具有更大的吸引力,Bridgetek与物联网开发专....
发表于 04-08 17:20 175次 阅读
Bridgetek与Zerynth和Riverdi技术结盟 成为物联网合作伙伴

全世界都在推广编程教育 编程教育全球化

最近,据报道,日本文部科学省3月26日公布了全国小学从2020年度起使用的教科书的审定结果,共164....
的头像 电子发烧友网工程师 发表于 04-08 14:12 233次 阅读
全世界都在推广编程教育 编程教育全球化

可以使用此代码直接比较两个签名信号吗?

大家好, 可以使用此代码直接比较两个签名信号吗? 信号depth_mem_scaled:signed(31 downto 0):= to_signed(0,32); - ...
发表于 04-08 13:41 17次 阅读
可以使用此代码直接比较两个签名信号吗?

革命就在这里!欢迎来到TensorFlow 2.0

我们知道升级到新版本是一项艰苦的工作,尤其是当变化如此剧烈时。你是不是已经准备要开始迁移代码库到2.....
的头像 新智元 发表于 04-08 12:09 699次 阅读
革命就在这里!欢迎来到TensorFlow 2.0

超过Java,Python成为世界第一编程语言

超越Java:Python正式登顶世界第一编程语言
发表于 04-08 11:43 51次 阅读
超过Java,Python成为世界第一编程语言

Python基础教程第3版PDF电子书免费下载

本书包括 Python 程序设计的方方面面:首先,从 Python 的安装开始,随后介绍了 Pyth....
发表于 04-08 08:00 88次 阅读
Python基础教程第3版PDF电子书免费下载

请问如何将Python程序交叉编译至Arm运行?

          背景:Ubuntu-Linux操作系统,使用Python和PyQt5编写了一款界面软件,利用Pyins...
发表于 04-07 11:46 245次 阅读
请问如何将Python程序交叉编译至Arm运行?

Python 持续点火,跟进还是观望?

近日,李笑来带着他的 Python 编程书,一路狂收 Star、Fork,火速登顶 GitHub T....
的头像 人工智能头条 发表于 04-05 10:13 562次 阅读
Python 持续点火,跟进还是观望?

关注996的程序员,都来自于哪些单位?

可见,所有公司中,关注996的程序员最多的是来自阿里系的公司,有148人,其次是腾讯、百度、京东等,....
的头像 电子发烧友网工程师 发表于 04-04 17:11 775次 阅读
关注996的程序员,都来自于哪些单位?

Python爬取394452条《都挺好》弹幕数据,发现弹幕比剧还精彩?

发送条数在3条及以内的用户数占比达到了83.73%,他们累计贡献了133331条弹幕,占到弹幕总数的....
的头像 电子发烧友网工程师 发表于 04-04 17:04 494次 阅读
Python爬取394452条《都挺好》弹幕数据,发现弹幕比剧还精彩?

手把手教你使用Python实现机器学习算法

特征提取就是应用某种算法通过某种方式来量化数据的过程。比如,对于图像数据,我们可以采用计算直方图的方....
的头像 电子发烧友网工程师 发表于 04-04 16:49 595次 阅读
手把手教你使用Python实现机器学习算法

G代码详解以及实例的详细资料说明

“形式代码” 的功能在它被执行后会继续维持,而 “一般代码” 仅仅在收到该命令时起作用。定义移动的代....
发表于 04-04 16:40 67次 阅读
G代码详解以及实例的详细资料说明

推想科技发布 AI学者科研平台 ,为更多的医生提供零门槛的 AI科研能力

推想科技方面表示,InferScholar® Center 可提供临床科研全流程的可视化操作,并且预....
的头像 电子发烧友网工程师 发表于 04-04 16:04 860次 阅读
推想科技发布 AI学者科研平台 ,为更多的医生提供零门槛的 AI科研能力

介绍那些不为人知,却又好用到难以置信的R语言功能

几行R代码就可以生成一个可交互的网络应用。比方说如果使用R语言的flexdashboard包, 你只....
的头像 电子发烧友网工程师 发表于 04-04 13:47 203次 阅读
介绍那些不为人知,却又好用到难以置信的R语言功能

应用密码学的资料概述

本文档的主要内容详细介绍的是应用密码学的资料概述包括了:1.密码的由来,2.密码技术发展简介,3.密....
发表于 04-04 08:00 33次 阅读
应用密码学的资料概述

循迹、避障、红外遥控的智能小车C语言代码免费下载

本文档的主要内容详细介绍的是循迹、避障、红外遥控的智能小车C语言代码免费下载。
发表于 04-03 17:21 82次 阅读
循迹、避障、红外遥控的智能小车C语言代码免费下载

为什么项目中的代码需要有Assert断言语句Assert断言的详细资料说明

有经验的工程师都知道,随着软件版本的迭代,或者需求不断变更,我们的代码就会变得越来越“臃肿”。
的头像 嵌入式资讯精选 发表于 03-30 11:04 784次 阅读
为什么项目中的代码需要有Assert断言语句Assert断言的详细资料说明

Python的时间操作处理资料总结

python中处理时间的模块有三个,datetime, time,calendar,融汇贯通三个模块....
的头像 马哥Linux运维 发表于 03-30 10:28 497次 阅读
Python的时间操作处理资料总结

如何使用Python快速搭建FTP服务器

今天的实验目的:使用9行Python代码快速搭建一个FTP服务器!需要使用的第三方库:pyftpdl....
的头像 马哥Linux运维 发表于 03-30 10:23 545次 阅读
如何使用Python快速搭建FTP服务器

史上最全Python面向对象编程的资料合集

面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别。
的头像 马哥Linux运维 发表于 03-30 10:11 460次 阅读
史上最全Python面向对象编程的资料合集

Python如何防止数据被修改Python中的深拷贝与浅拷贝的问题说明

在平时工作中,经常涉及到数据的传递。在数据传递使用过程中,可能会发生数据被修改的问题。为了防止数据被....
的头像 马哥Linux运维 发表于 03-30 09:54 417次 阅读
Python如何防止数据被修改Python中的深拷贝与浅拷贝的问题说明

最新tf.keras指南,TensorFlow官方出品

TensorFlow 1.x以静态图为主,网上主流的TF代码编写主要是面向过程的(函数为主),在引入....
的头像 新智元 发表于 03-29 11:28 306次 阅读
最新tf.keras指南,TensorFlow官方出品

无需编程基础,概述Python编程语言的所有关键点

模块与包是任何大型程序的核心,就连Python安装程序本身也是一个包。包是一个有层次的文件目录结构,....
的头像 新智元 发表于 03-29 11:14 226次 阅读
无需编程基础,概述Python编程语言的所有关键点

黑客技术大宝库电子书籍免费下载

本文档的主要内容详细介绍的是黑客技术大宝库电子书籍免费下载帮你学会一些基本的黑客知识,掌握重要的命令....
发表于 03-28 16:21 121次 阅读
黑客技术大宝库电子书籍免费下载

使用Go代替Python的优点

我喜欢有一个二进制文件。我通常在EC2机器上运行代码,使我的脚本更接近S3和我们的数据库。使用Pyt....
的头像 电子发烧友网工程师 发表于 03-28 14:55 277次 阅读
使用Go代替Python的优点

盘点一下2月份GitHub上最热门的Python开源项目

这是一个Python程序集合,它们不仅可以帮助你快速找到你想要的Python项目,还能作为你日常开发....
的头像 电子发烧友网工程师 发表于 03-28 10:41 476次 阅读
盘点一下2月份GitHub上最热门的Python开源项目

单片机生成的音乐代码免费下载

本文档的主要内容详细介绍的是单片机生成的音乐代码免费下载。
发表于 03-27 18:05 54次 阅读
单片机生成的音乐代码免费下载

编程要从娃娃抓起,教育部新规要求中小学逐步推广编程教育

近日,教育部公布了《2019年教育信息化和网络安全工作要点》,要求中小学逐步推广编程教育。
的头像 电子发烧友网工程师 发表于 03-27 11:11 430次 阅读
编程要从娃娃抓起,教育部新规要求中小学逐步推广编程教育

免安装代码编辑器Sublime Text3已经安装好各种功能插件应用程序

本文档的主要内容详细介绍的是免安装代码编辑器Sublime Text3已经安装好各种功能插件应用程序....
发表于 03-27 08:00 37次 阅读
免安装代码编辑器Sublime Text3已经安装好各种功能插件应用程序

笨办法学C语言PDF中文版电子书免费下载

如果有一段引述用来描述C语言编程的话,那就是它了。对于大多数程序员,C是极其可怕而且邪恶的。他就像是....
发表于 03-26 16:23 195次 阅读
笨办法学C语言PDF中文版电子书免费下载

中午不知道吃什么,用Python爬取美团外卖评论帮你选餐

朋友暑假实践需要美团外卖APP评论这一份数据,一开始我想,这不就抓取网页源代码再从中提取数据就可以了....
的头像 马哥Linux运维 发表于 03-26 15:43 508次 阅读
中午不知道吃什么,用Python爬取美团外卖评论帮你选餐

PHP教程之foreach使用引用需要注意的问题详细资料说明

本文档的主要内容详细介绍的是PHP教程之foreach使用引用需要注意的问题详细资料说明免费下载。
发表于 03-26 13:51 37次 阅读
PHP教程之foreach使用引用需要注意的问题详细资料说明

为什么这几年Python这么火?学习Python岗位薪资水平如何?

今年1月,Python依旧卫冕PYPL编程榜单,并且与Java的差距拉得更远了一些。以往与Java常....
的头像 电子发烧友网工程师 发表于 03-26 10:13 285次 阅读
为什么这几年Python这么火?学习Python岗位薪资水平如何?

XGBOOST模型介绍

以XGB做原生特征筛选,在原生特征中丢弃后不影响分数甚至涨分的特征有:Time,RentRoom(涨....
的头像 人工智能爱好者社区 发表于 03-26 09:19 251次 阅读
XGBOOST模型介绍

数据科学家需要掌握哪些几大命令行?

前面的命令是显而易见的:他们按照自己说的做。这两者提供了最重要的一击(即去重单词计数)。这是由于有u....
的头像 人工智能爱好者社区 发表于 03-26 09:16 241次 阅读
数据科学家需要掌握哪些几大命令行?

python机器学习工具sklearn使用手册的中文版免费下载

本文档的主要内容详细介绍的是python机器学习工具sklearn使用手册的中文版免费下载包括了:1....
发表于 03-26 08:00 95次 阅读
python机器学习工具sklearn使用手册的中文版免费下载

FPGA学习中的代码阅读浅析

不管是学FPGA还是C语言,任何一种代码的学习都离不开大量的代码阅读,也就是多看,多学习别人的代码。....
发表于 03-25 14:59 120次 阅读
FPGA学习中的代码阅读浅析

微流体重编程以实现人诱导多能干细胞的多能性

该微流体不仅有较高的重编程成功率,而且可以使数百个细胞系能够同时进行重编程。该实验方案消耗的培养基量....
的头像 MEMS 发表于 03-25 14:28 275次 阅读
微流体重编程以实现人诱导多能干细胞的多能性

python代码:利用几十行python书写微信机器人

1.使用环境 系统:window10 IDE:spyder 主要程序包:itcha....
发表于 03-25 13:44 116次 阅读
python代码:利用几十行python书写微信机器人