娱乐城白菜论坛

如何让你的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笔试面试教程1.本课程共包括40个视频内容,全由潘老师主讲2.本课程基于至简设计法思想,明德扬的特
发表于 01-23 00:00 ? 945次 阅读

苹果悄悄发布 iOS 12.2第六个测试版,暗示正式版终于要来了

上一个测试版中,iOS 12.2 Beta 5提升了设备的运行速度,改善了iMessage语音消息的....
的头像 iPhone频道 发表于 03-22 17:42 ? 1217次 阅读
苹果悄悄发布 iOS 12.2第六个测试版,暗示正式版终于要来了

python爬虫框架有哪些

本视频主要详细介绍了python爬虫框架有哪些,分别是Django、CherryPy、Web2py、....
的头像 发烧友学院 发表于 03-22 16:13 ? 55次 阅读
python爬虫框架有哪些

hEDIT0001为EDIT1句柄  hEDIT0002为EDIT2句柄   由9个按键输入值 tatic void _cbCallbac...
发表于 03-22 06:33 ? 10次 阅读

Java 12重磅发布,新特性解读

一些小鲜肉语言嘲笑 Java,实现类似功能,Java 代码要多写近一倍,程序要笨重一个数量级,有些也....
的头像 嵌入式资讯精选 发表于 03-21 17:28 ? 241次 阅读
Java 12重磅发布,新特性解读

用最简单的语言解释Python的闭包是什么?

闭包很蓝瘦,你应该尽量理解一下它。
的头像 马哥Linux运维 发表于 03-21 16:33 ? 166次 阅读
用最简单的语言解释Python的闭包是什么?

飞控系统到底是什么?为什么一个小小的代码错误会导致这么严重的后果?

随着飞行任务的不断复杂化,对飞机性能的要求越来越高,不仅要求飞行距离远(例如运输机),高度高(高空侦....
发表于 03-21 16:30 ? 237次 阅读
飞控系统到底是什么?为什么一个小小的代码错误会导致这么严重的后果?

为什么几百种编程语言偏偏Python炙手可热?

来自美国的招聘网站 Dice 发布了一份重要数据结论,那便是“Python 的就业市场非常健康”!许....
发表于 03-21 09:37 ? 224次 阅读
为什么几百种编程语言偏偏Python炙手可热?

python列表、元组、字典的基本用法
发表于 03-21 09:28 ? 39次 阅读

学习Python的最佳方式取决于你个人的学习方式

Real Python(https://realpython.com/):Real Python 提....
发表于 03-21 09:28 ? 139次 阅读
学习Python的最佳方式取决于你个人的学习方式

三种write mode,你真的理解吗?

最后我们看看no_change(No Read on Write,保持模式),如图5所示,相应的读写....
发表于 03-20 16:55 ? 227次 阅读
三种write mode,你真的理解吗?

Python爬虫工程师面试经历

前段时间快要毕业,而我又不想找自己的老本行Java开发,所以面了很多Python爬虫岗位。因为我在南....
的头像 工程师人生 发表于 03-20 15:01 ? 176次 阅读
Python爬虫工程师面试经历

到底怎么才算“懂”python的twisted框架?
发表于 03-20 10:33 ? 45次 阅读

请问这两句代码中:                       &nbs...
发表于 03-20 07:45 ? 112次 阅读

[color=rgba(0, 0, 0, 0.87)][size=1.28]requests[backcolor=rgba(236, 236, 236, 0.5)][backcolor=rgba(0, 0, 0, 0.54)][size=1...
发表于 03-19 17:00 ? 122次 阅读

学Excel还是 R、Python?机器学习怎么入门?

数据科学家分为两个职业。数据工程师为模型提供可用的数据,机器学习和数学建模涉及比较少,这些工作主要由....
发表于 03-19 15:46 ? 152次 阅读
学Excel还是 R、Python?机器学习怎么入门?

计算机视觉开源库集锦

Dlib是一个现代的C++工具包,包含机器学习算法和工具,用于在C++中创建复杂的软件来解决实际问题....
发表于 03-19 11:48 ? 189次 阅读
计算机视觉开源库集锦

2019年最值得关注的34个Python开源项目——Let's go!

是 Google 专为 NISQ 算法打造的框架,用于创建、编辑和调用嘈杂中型量子 (NISQ,No....
发表于 03-19 10:37 ? 249次 阅读
2019年最值得关注的34个Python开源项目——Let's go!

用Python带领大家一起探索这些诱人的奖金背后的秘密!

但为什么每期双色球一等奖奖金不是固定的呢!就是因为其奖金机制,双色球当期销售额的51%作为当期奖金!....
发表于 03-19 10:29 ? 186次 阅读
用Python带领大家一起探索这些诱人的奖金背后的秘密!

一个国外小哥用好几年时间维护的Python代码合集

因为在学习写代码的过程中,我们应该尽量避免重复。写代码不像背单词,你只要知道一门编程语言能干什么,等....
发表于 03-19 10:24 ? 233次 阅读
一个国外小哥用好几年时间维护的Python代码合集

前言前面我们简单讲解了神经网络的基本概念和工作原理,接下来,将通过具体的python代码来完成基于神经网络的图形识别。这里使用...
发表于 03-18 21:51 ? 146次 阅读

编程特长生享受一本降30分,保送北大清华政策

一位妈妈诉苦,说她家孩子中考那半年,每天都早起晚睡地复习,全家都跟着一起紧张。结果只考进一个普通高中....
发表于 03-18 16:41 ? 134次 阅读
编程特长生享受一本降30分,保送北大清华政策

Gokit4(G)开发板使用小结
发表于 03-18 12:43 ? 22次 阅读

R和Python到底谁更好如何将Python与R同时应用在同一个项目

如果你从事在数据科学领域,提到编程语言,一定能马上想到 R 语言和 Python语言(以下分别简称 ....
发表于 03-17 10:35 ? 362次 阅读
R和Python到底谁更好如何将Python与R同时应用在同一个项目

2019年的编程语言排行榜你知道吗

TIOBE 公布了2019年3月编程语言排行榜,排名前十的依然是:Java, C, Python, ....
发表于 03-17 10:13 ? 822次 阅读
2019年的编程语言排行榜你知道吗

人工智能风口捆绑在一起的Python,似乎从来不缺热度

横向与其他娱乐城白菜论坛岗位相比,Python这样的薪资涨幅也算得上是表现突出。下图显示,Python在201....
发表于 03-16 09:53 ? 405次 阅读
人工智能风口捆绑在一起的Python,似乎从来不缺热度

PYNQ中MicroBlaze程序文件的加载过程

在PYNQ的base overlay 中添加了MicroBlaze,通过MicroBlaze 来配置....
发表于 03-16 09:15 ? 50次 阅读
PYNQ中MicroBlaze程序文件的加载过程

编程语言流行指数排行榜近日公布了2019年2月份榜单

圈内知名网站Stack Overflow的数据显示,其实早在去年6月份,Python的月活用户就已超....
发表于 03-15 09:48 ? 485次 阅读
编程语言流行指数排行榜近日公布了2019年2月份榜单

一个关于超越的编程大赛怎么可以专属的编程语言呢?

今天重点说说你们使用的编程语言,尤其值得一提的是 Python,至于为什么是 Python?这个后面....
发表于 03-15 09:40 ? 528次 阅读
一个关于超越的编程大赛怎么可以专属的编程语言呢?

你知道为什么Julia的速度能做到那么快吗?

一般来说,Julia 中的数学运算与其他脚本语言中的数学运算看起来是一样的。它们的数字都是 “真正的....
的头像 新智元 发表于 03-15 09:10 ? 167次 阅读
你知道为什么Julia的速度能做到那么快吗?

我使用PIC32 MX370F512H控制器和专用工具通过串行通信与PC机通信。每次进行增量更新时,我们都会运行一些基本的测试用例...
发表于 03-14 20:02 ? 37次 阅读

算法科普:有趣的霍夫曼编码

霍夫曼编码 ( Huffman coding ) 是一种可变长的前缀码。霍夫曼编码使用的算法是 Da....
的头像 算法与数据结构 发表于 03-14 19:24 ? 517次 阅读
算法科普:有趣的霍夫曼编码

PHP如何打开一个页面执行另一个页面的代码

一般php程序必须是在浏览器打开页面的时候触发执行的,用下面的方法,可以在A页面启动B页面的php程....
发表于 03-14 17:17 ? 22次 阅读
PHP如何打开一个页面执行另一个页面的代码

入门有必要选择STM32Cube HAL库开发吗?

所以,我的建议是:如果你数据结构功底不好,可以先从寄存器、标准外设库开始,当你基础知识累计一定程度,....
的头像 嵌入式资讯精选 发表于 03-14 13:53 ? 182次 阅读
入门有必要选择STM32Cube HAL库开发吗?

盘点“杨超越杯编程大赛”中那些脑洞大开的项目

你知道杨超越的粉丝们有多努力吗!
的头像 人工智能爱好者社区 发表于 03-13 15:17 ? 591次 阅读
盘点“杨超越杯编程大赛”中那些脑洞大开的项目

是否有人告诉我如何更改代码编辑窗口的字体类型和大小。 干杯 以上来自于百度翻译      以下为原...
发表于 03-13 13:41 ? 228次 阅读

是软件bug吗
发表于 03-13 11:40 ? 102次 阅读

比较5种人工智能项目最常用的编程语言

有人认为Lisp是最好的人工智能编程语言,因为它为开发人员提供了自由。在人工智能中使用Lisp,因其....
的头像 电子发烧友网 发表于 03-13 09:59 ? 398次 阅读
比较5种人工智能项目最常用的编程语言

ICML 2019的评审结果已经出来了,你们提交代码了吗?

其实由于随机初始化等机制缺乏可复现性,早期的神经网络研究并不受欢迎。虽然,目前证明神经网络的表征能力....
发表于 03-12 14:10 ? 211次 阅读
ICML 2019的评审结果已经出来了,你们提交代码了吗?

一些你应该了解的Python功能特色

大多Python函数有着长且具有描述性的名字。但是命名为glob()的函数你可能不知道它是干什么的除....
的头像 马哥Linux运维 发表于 03-11 15:53 ? 222次 阅读
一些你应该了解的Python功能特色

编译器可以为你生成高性能的代码,但是你真的需要编译器吗?

当我们用数字运行时,我们可以得到数字。但我们想要代码,因此,我们需要制作一个假装成数字的对象(Obj....
发表于 03-11 09:35 ? 313次 阅读
编译器可以为你生成高性能的代码,但是你真的需要编译器吗?

Python如何爬取实时变化的WebSocket数据

Python 中的网络请求库非常多,Requests 是最常用的请求库之一,它可以模拟发送网络请求。....
发表于 03-11 09:31 ? 346次 阅读
Python如何爬取实时变化的WebSocket数据

Python入门教程之可爱的Python PDF版电子书免费下载

笔者自 2000 年接触 Python 到现在,一直对 Python 的兴趣和信心有增无减。但 Py....
发表于 03-11 08:00 ? 71次 阅读
Python入门教程之可爱的Python PDF版电子书免费下载

在大型项目开发上,Python真是个“烂”语言!

我们内部数据统计,通过大把(千万级)的简历分析得到的结果:部分大项目不用Python,是因为相比之下....
发表于 03-10 10:21 ? 606次 阅读
在大型项目开发上,Python真是个“烂”语言!

TensorFlow 2.0 alpha提供即将发生的变化的预览

要快速上手 TensorFlow 2.0 Alpha 版,最佳途径是前往 TensorFlow 的新....
发表于 03-10 10:17 ? 538次 阅读
TensorFlow 2.0 alpha提供即将发生的变化的预览

一个专门关于Python的面试题汇总,为什么推荐这份资源?

除了题量充足外,这个面试题覆盖的知识点按照由易到难罗列,分为【Python 基础】与【Python ....
发表于 03-10 10:12 ? 341次 阅读
一个专门关于Python的面试题汇总,为什么推荐这份资源?

CSDN为所有感兴趣的开发者提供了一个探讨和学习Python的契机

1989 年,为了打发无所事事的圣诞节假期,Guido 开始写 Python 语言的编译/解释器,P....
发表于 03-10 10:03 ? 579次 阅读
CSDN为所有感兴趣的开发者提供了一个探讨和学习Python的契机

数据分析奥斯卡女神们,谁是你心中的No.1?

奥黛丽·赫本在榜单中的位置体现了她在观众心中无可替代的地位,赫本年轻时用出众的容貌和演技一次次在电影....
发表于 03-10 09:56 ? 487次 阅读
数据分析奥斯卡女神们,谁是你心中的No.1?

如何破解Jetbrains旗下软件永久破解方法说明

做Java开发和Python开发的人,或多或少知晓其对应的IDE,IntelliJ IDEA和Pyc....
发表于 03-09 09:33 ? 411次 阅读
如何破解Jetbrains旗下软件永久破解方法说明

因代码不规范,程序员枪击4名同事,一个用生命维护代码的程序员

本周,一名程序员在WTS Paradigm这家美国企业资源规划软件(ERP)开发商的办公楼持枪杀人。
的头像 单片机精讲吴鉴鹰 发表于 03-08 10:53 ? 831次 阅读
因代码不规范,程序员枪击4名同事,一个用生命维护代码的程序员

像在word里一样便捷地编辑图像中的文字

近日来自印度的研究人员们近日提出了一种基于自编码模型的字符替换方法,通过字符生成、颜色调节和重置完成....
的头像 将门创投 发表于 03-08 09:38 ? 199次 阅读
像在word里一样便捷地编辑图像中的文字

机器学习实战PDF中文版电子书免费下载

机器学习是人工智能研究领域中的一个极其重要的方向。在现今大数据时代的背景下捕获数据并从中萃取有价值的....
发表于 03-08 08:00 ? 69次 阅读
机器学习实战PDF中文版电子书免费下载

慢慢探秘Matplotlib的强大之处

添加标题添加标题可以通过title函数来实现,该函数主要有两个参数,第一个是str,指明标题的内容,....
发表于 03-07 14:41 ? 236次 阅读
慢慢探秘Matplotlib的强大之处

为什么数据分析师都要求写代码?

分析软件每开发出一个新功能需要大量投入。而Python作为编程语言,开发新工具相对容易,一个人开发一....
发表于 03-06 14:21 ? 401次 阅读
为什么数据分析师都要求写代码?

谷歌的中国版搜索引擎还没完?代码400多次更新,Dragonfly还在运作?

国外媒体The Intercept报道,谷歌内部员工在12月发现了大约500个代码更改,并且在今年1....
的头像 新智元 发表于 03-06 09:18 ? 387次 阅读
谷歌的中国版搜索引擎还没完?代码400多次更新,Dragonfly还在运作?

Google C++编程风格指南PDF版免费下载

Google的项目大多使用C++开发。每一个C++程序员也都知道, C++具有很多强大的语言特性,但....
发表于 03-06 08:00 ? 37次 阅读
Google C++编程风格指南PDF版免费下载

如何将自己的脚本代码放到服务器上运行

连接服务器可以在这个页面的右边的远程连接进行连接,这个第一次点进去会有个远程连接密码,需要记住,因为....
发表于 03-05 09:41 ? 594次 阅读
如何将自己的脚本代码放到服务器上运行

python入门教程简明Python教程中文版免费下载

Python 可能是极少数既简单有强大的编程语言中的一种。这对初学者和专家都是好事,更重要的是,用它....
发表于 03-05 08:00 ? 66次 阅读
python入门教程简明Python教程中文版免费下载