翻译|Stackoverflow上关于Python的高票问答(二)

来源:互联网 发布:汉服配饰淘宝 编辑:程序博客网 时间:2024/05/16 19:47

文中链接无法打开,请点击阅读原文

Stackoverflow是一个非常优秀的与程序相关的IT技术问答的英文网站。无论你处在什么状态,当你编程碰到问题的时候你总能找到你想要的答案。学习编程专栏打算翻译这一系列的问答计划进行的方向如下。

翻译Stack Overflow上关于Python的高票问答(Java)(JavaScript)(Php)(C#)每一种语言都会出两到三篇文章,每一篇会有一到三个问题。


已翻译篇章:翻译|Stack Overflow上关于Python的高票问答(一)

本期翻译有五道题目,题目目录:
问题一:在Python中我怎样检测一个文件是否存在?
问题二:在Python中我怎样使用一个外部命令?
问题三:对一个字典按照值(values)进行排序
问题四:检测一个list为空的最佳方案?
问题五:如何在一个函数体内使用全局变量而不是创建。


问题一:How do I check whether a file exists using Python?

问题描述:Python中我怎样在不使用测试语句的情况下检测一个文件是否存在。

回答(获得2392赞同) :

你可以使用Python中的内建函数:os.path.isfile


Return True if path is an existing regular file. This follows symbolic links, so both islink() and isfile() can be true for the same path.


import os.path
os.path.isfile(fname)

如果你要确认它确实是一个文件,而不是其它的什么东西。

在 Python 3.4中, pathlib module提供了一个面向对象的方法,看下面的实例代码:

from pathlib import Path

my_file = Path("/path/to/file")
if my_file.is_file():
    # file exists


问题二:Calling an external command in Python

问题描述:我怎样在Python脚本中使用一个外部命令:就像Unix的shell或者Windows的命令提示符。

回答(获得2222赞同) :

我们来看一下标准库中的 subprocess module

from subprocess import call
call(["ls", "-l"])

subprocess模块与系统模块(system)比较,subprocess模块的的优势是更加灵活。我觉得os.system模块是过时的,我觉得他应该是这样的:replacing-older-functions-with-the-subprocess-module

但是,对于快速的一次性的脚本,使用os.system就足够了。


问题三:Sort a Python dictionary by value

问题描述:我有一个字典(dictionary),这个字典的值是从某个数据库的两个字段读取的:一个字段是string类型,另一个一个字段是 numeric类型,这个string字段是唯一的,所以该字段作为字典的键(key)。

我现在可以按照键(keys)进行排序,但是我怎样才能按照值(values)排序呢?

注:我已经读过了Stack Overflow的另一个问题:How do I sort a list of dictionaries by values of the dictionary in Python?  并且可以按照题目中的解决方法把我的代码分成了字典列表,但是实际上我并不需要字典列表,我想知道有没有什么更简单的方法。


回答(获得2300赞同) :

对一个字典(dict)进行排序是不可能的,你能得到的仅仅是经过排序的字典的表示。字典生来就是无序的,但是其他的数据类型比如:list(列表)、tuple(元组)是有序的,所以你需要一个能排序的表示:他可能是一个list或者是一个元组列表。

例如:

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))

sorted_x将是一个元组列表,这个列表是按照每个元组的第二个元素进行排序的。

dict(sorted_x) == x.

然后像上面这样,再把sorted_x转成一个字典,dict(sorted_x)就是你想要的结果。这样你就能完成按照字典的values进行排序了。

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))


问题四:Best way to check if a list is empty

问题描述:

举个例子,现在我有如下代码:

a = []

我怎样才能去判断这个列表a为空

回答(获得2418赞同) :

if not a:
  print("List is empty")

使用空列表的隐式booleanness是相当Python化的。


问题五:Using global variables in a function other than the one that created them

问题描述:如果我在一个函数体内创建了一个全局变量,我怎样才能在其他的函数内使用这个变量呢?我需要把这个全局变量存储在需要使用这个全局变量的函数的局部变量中吗?


回答(获得2429赞同) :

你可以通过在每一个你需要使用全局变量的函数体内用global关键词来描述这个变量从而可以在函数体内使用这个全局变量。



我的理解是:全局变量是非常危险的,Python希望你明白你在使用全局变量,因此在每次使用的时候,它都需要关键词:global

热文

爬取了bilibili站644w视频信息之后的故事。

Python对微信好友进行简单统计分析

程序员的生存技巧 —— 搜索技巧

vim/vi命令整理

戳原文,更有料!
阅读全文
0 0
原创粉丝点击