python编程常用技巧你知道几个_这些Python代码技巧,你知道几个?

Python 是世界上最流行、热门的编程语言之一,原因很多,比如:易于学习

超高的通用性

具备大量模块和库

本文将分享一些使用 Python 的技巧,顺序按照 A-Z 排列。

all or any

Python 非常受欢迎的原因之一是其可读性和表达性。

人们还经常把 Python 笑称为「可执行伪码(executable pseudocode)」。但是,当你可以编写这样的代码时,很难去反驳这种言论:

x=[True,True,False]

ifany(x):

print("AtleastoneTrue")

ifall(x):

print("NotoneFalse")

ifany(x)andnotall(x):

print("AtleastoneTrueandoneFalse")

bashplotlib

想在控制台中绘图吗?

$pipinstallbashplotlib

使用上面的行,即可在控制台中绘图。

collections

Python 有一些很棒的默认数据类型,但有时候它们可能不会尽如你意。

不过,Python 标准库提供了 collections 模块。这个方便的附加组件可以为你提供更多数据类型。

fromcollectionsimportOrderedDict,Counter

#Rememberstheorderthekeysareadded!

x=OrderedDict(a=1,b=2,c=3)

#Countsthefrequencyofeachcharacter

y=Counter("HelloWorld!")

dir

你是否想过如何查看 Python 对象内部及其具有哪些属性?

输入以下命令行:

>>>dir()

>>>dir("HelloWorld")

>>>dir(dir)

当以交互方式运行 Python 时,这可能是一个非常有用的功能,并且可以动态地探索你正在使用的对象和模块。

emoji

$pipinstallemoji

别以为我不知道你会偷偷试它→→

fromemojiimportemojize

print(emojize(":thumbs_up:"))

from __future__ import

Python 流行的一个结果是,总有新版本正在开发中。新版本意味着新功能——除非你的版本已经过时。

不过,别担心。__ future__模块允许用户导入新版 Python 的功能。这简直就像时间旅行,或者魔法什么的。

from__future__importprint_function

print("HelloWorld!")

geopy

地理(Geography)对于程序员来说可能是一个具有挑战性的领域。但是 geopy 模块让它变得异常简单。

$pipinstallgeopy

它通过抽取一系列不同地理编码服务的 API 来工作,使用户获取一个地方的完整街道地址、纬度、经度,甚至海拔高度。

另外一个有用的功能是距离:它可以用你喜欢的度量单位计算出两个位置之间的距离。

fromgeopyimportGoogleV3

place="221bBakerStreet,London"

location=GoogleV3().geocode(place)

print(location.address)

print(location.location)

howdoi

陷入编码问题,却不记得以前见过的解决方案?需要检查 StackOverflow,但不想离开终端?

$pipinstallhowdoi

无论你有什么问题都可以问它,它会尽力回答。

$howdoiverticalaligncss

$howdoiforloopinjava

$howdoiundocommitsingit

但是请注意——它会从 StackOverflow 的最高票答案中抓取代码。也就是说它提供的信息并非总是有用……

$howdoiexitvim

inspect

Python 的 inspect 模块非常有助于理解问题背后的详情。你甚至可以在 inspect 模块上调用其方法!

下面的代码示例使用 inspect.getsource() 打印自己的源代码。它还使用 inspect.getmodule() 打印定义它的模块。

最后一行代码打印出自己的行号。

importinspect

print(inspect.getsource(inspect.getsource))

print(inspect.getmodule(inspect.getmodule))

print(inspect.currentframe().f_lineno)

当然,除了这些琐碎的用途之外,inspect 模块还能帮助你理解代码正在做的事。你还可以用它编写自文档化代码。

Jedi

Jedi 库是一个自动完成和代码分析的库。它使代码编写变得更快、效果更高。

除非你正在开发自己的 IDE,否则你肯定会对使用 Jedi 库作为编辑插件很感兴趣。

你可能已经在使用 Jedi 了。IPython 项目就使用 Jedi 实现代码自动完成功能。

**kwargs

学习任何语言时都会遇到很多里程碑。对于 Python 来说,理解神秘的**kwargs 语法可能算是其中之一。

词典对象前面的双星号可以让你把该词典的内容作为命名参数输入到函数中。

词典的秘钥是参数名,值是传递给函数的值。你甚至不需要称它为 kwargs!

dictionary={"a":1,"b":2}

defsomeFunction(a,b):

print(a+b)

return

#thesedothesamething:

someFunction(**dictionary)

someFunction(a=1,b=2)

当你想编写能够处理事先未定义的命名参数的函数时,这个很有用。

列表推导式(List comprehensions)

这些表达式使得编写干净易读的代码变得很容易,那些代码读起来几乎像自然语言一样。

numbers=[1,2,3,4,5,6,7]

evens=[xforxinnumbersifx%2is0]

odds=[yforyinnumbersifynotinevens]

cities=[''London'',''Dublin'',''Oslo'']

defvisit(city):

print("Welcometo"+city)

forcityincities:

visit(city)

map

Python 通过许多内置功能支持函数式编程。map() 函数是最有用的函数之一——特别是当它与 lambda 函数结合使用时。

x=[1,2,3]

y=map(lambdax:x+1,x)

#printsout[2,3,4]

print(list(y))

在上面的例子中,map() 将一个简单的 lambda 函数应用于 x 中的每个元素。它返回一个 map 对象,该对象可以被转换成可迭代的对象,如列表或元组。

newspaper3k

它可以帮助你从大量顶级国际出版物中检索到新闻文章和相关元数据。你可以检索图像、文本和作者名。

它还有一些内置的 NLP 功能。

如果你想在下一个项目中使用 BeautifulSoup 或其它 DIY 网页抓取库,那么不如使用$ pip install newspaper3k,既省时又省事,何乐而不为呢?

运算符重载(Operator overloading)

Python 支持运算符重载。

它实际上是一个简单的概念。你有没有想过为什么 Python 允许用户使用 + 运算符来将数字相加,并级联字符串?这就是运算符重载在发挥作用。

你可以使用 Python 的标准运算符号来定义对象,这样你可以在与这些对象相关的语境中使用它们。

classThing:

def__init__(self,value):

self.__value=value

def__gt__(self,other):

returnself.__value>other.__value

something=Thing(100)

nothing=Thing(0)

#True

something>nothing

#False

something

#Error

something+nothing

pprint

Python 的默认 print 函数就可以实现打印功能。但如果尝试打印较大的嵌套对象,就会发现打印结果很丑。

这时 Python 标准库的 pretty printer 模块就可以发挥作用了。该模块可以将复杂的结构化对象以一种易读的格式打印出来。

Python 开发者的必备技能之一就是处理复杂的数据结构。

importrequests

importpprint

url=''https://randomuser.me/api/?results=1''

users=requests.get(url).json()

pprint.pprint(users)

Queue

Python 支持多线程,而这是由 Python 标准库的 Queue 模块支持的。

该模块允许用户实现队列(queue)数据结构。队列数据结构允许用户根据特定的规则添加和检索条目。

『First in, first out』 (FIFO) 队列允许用户按照对象被添加的顺序来检索对象。『Last in, first out』 (LIFO) 队列允许用户首先访问最新添加的对象。

最后,优先级队列(priority queue)允许用户根据对象对应的优先级类别来检索对象。

__repr__

在 Python 中定义一个类别或对象时,以「官方」方式将对象表示为字符串很有用。例如:

>>>file=open(''file.txt'',''r'')

>>>print(file)

这使代码 debug 变得简单很多。将字符串添加到类别定义,如下所示:

classsomeClass:

def__repr__(self):

return""

someInstance=someClass()

#prints

print(someInstance)

sh

Python 是一种伟大的脚本语言,不过有时使用标准 os 和 subprocess 库会有点棘手。

sh 库提供了一种不错的替代方案。

该库允许用户像使用普通函数一样调用任意程序,这对自动化工作流和任务非常有用。

fromshimport*

sh.pwd()

sh.mkdir(''new_folder'')

sh.touch(''new_file.txt'')

sh.whoami()

sh.echo(''Thisisgreat!'')

类型提示(Type hints)

Python 是动态语言。在定义变量、函数、类别等时无需指定数据类型。

这有利于缩短开发周期。但是,简单的类型错误(typing issue)导致的运行时错误真的太烦了。

从 Python 3.5 版本开始,用户可以选择在定义函数时开启类型提示。

defaddTwo(x:Int)->Int:

returnx+2

你还可以定义类型别名:

fromtypingimportList

Vector=List[float]

Matrix=List[Vector]

defaddMatrix(a:Matrix,b:Matrix)->Matrix:

result=[]

fori,rowinenumerate(a):

result_row=[]

forj,colinenumerate(row):

result_row+=[a[i][j]+b[i][j]]

result+=[result_row]

returnresult

x=[[1.0,0.0],[0.0,1.0]]

y=[[2.0,1.0],[0.0,-2.0]]

z=addMatrix(x,y)

尽管非强制,但类型注释可以使代码更易理解。

它们还允许你在运行之前使用类型检查工具捕捉 TypeError。在进行大型复杂项目时执行此类操作是值得的。

uuid

生成通用唯一标识符(Universally Unique ID,UUID)的一种快速简单方法就是使用 Python 标准库的 uuid 模块。

importuuid

user_id=uuid.uuid4()

print(user_id)

这创建了一个随机化后的 128 比特数字,该数字几乎必然是唯一的。

事实上,可以生成 2可能的 UUID。这个数字超过了 5,000,000,000,000,000,000,000,000,000,000,000,000。

在给定集合中找出重复数字的可能性极低。即使有一万亿 UUID,重复数字存在的概率也远远低于十亿分之一。

虚拟环境(Virtual environment)

这可能是 Python 中我最喜欢的事物了。

你可能同时处理多个 Python 项目。不幸的是,有时候两个项目依赖于相同依赖项的不同版本。那你要安装哪个版本呢?

幸运的是,Python 支持虚拟环境,这使得用户能够充分利用两种环境。见下列行:

python-mvenvmy-project

sourcemy-project/bin/activate

pipinstallall-the-modules

现在你在一台机器上具备独立的多个 Python 版本了。问题解决!

wikipedia

Wikipedia 拥有一个很棒的 API,允许用户以编程方式访问巨大体量的免费知识和信息。

wikipedia 模块使得访问该 API 非常便捷。

importwikipedia

result=wikipedia.page(''freeCodeCamp'')

print(result.summary)

forlinkinresult.links:

print(link)

和真实的维基百科网站类似,该模块支持多种语言、页面消歧、随机页面检索,甚至还具备 donate() 方法。

xkcd

humour 是 Python 语言的一个关键特征,其名称来自英国喜剧片《蒙提·派森的飞行马戏团》(Monty Python and the Flying Circus)。Python 的很多官方文档引用了该喜剧片最著名的剧情。

幽默感并不限于文档。试着运行下列行:

importantigravity

将打开 xkcd 画的 Python 漫画。不要改变这一点,Python。不要改变。

YAML

YAML 代表 『YAML Ain』t Markup Language』。它是一种数据格式语言,是 JSON 的超集。

与 JSON 不同,它可以存储更复杂的对象并引用自己的元素。你还可以编写注释,使其尤其适用于编写配置文件。

$pipinstallpyyaml

然后导入到项目中:

importyaml

PyYAML 使你能够存储任何数据类型的 Python 对象,以及任何用户定义类别的实例。

zip

给你支最后一招,非常酷。还在用两个列表来组成一部词典吗?

keys=[''a'',''b'',''c'']

vals=[1,2,3]

zipped=dict(zip(keys,vals))

zip() 内置函数使用多个可迭代对象作为输入并返回元组列表。每个元组按位置索引对输入对象的元素进行分组。

你也可以通过调用*zip() 来「解压」对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值