Python初学者面临的5个常见问题

你正在学习 Python 吗?这是一门很棒的学习语言,但与任何语言一样,它确实带来了有时看起来势不可挡的挑战,尤其是在你自学的时候。

鉴于在 Python 中做事的所有不同方式,我们决定编制一份有用的列表,列出初学者经常面临的问题——以及他们的解决方案。

Python初学者面临的5个常见问题_第1张图片

1. 从终端读取

如果您在终端上运行程序并且需要用户输入,则可能需要通过终端本身来获取它。(其他替代方法包括读取文件以获取输入。)

在 Python 中,该raw_input函数有助于实现这一点。该函数采用的唯一参数是提示。我们来看一个小程序看看结果:

name = raw_input('Type your name and press enter: ')
print 'Hi ' + name

如果将这些行保存在一个文件中(带有.py扩展名)并执行它,您会得到以下结果:

Type your name and press enter: Shaumik
Hi Shaumik

这里需要注意的一件重要的事情是变量是一个字符串,您需要对其进行过滤和转换以以不同的形式使用它(例如迭代次数或矩阵长度的输入):

name = raw_input('Type your name and press enter: ')
print 'Hi ' + name
num = raw_input('How many times do you want to print your name: ')
for i in range(int(num)):
    print name

2. 在 Python 中枚举

Python 经常提供与其他流行的编程语言(如 C++ 和 Java)不同的做事方式。当你遍历其他语言的数组时,你会从数组中增加一个整数0并访问数组的相应元素。下面显示了一个粗略的方法:

for (int i = 0; i < array_length; ++i)
    cout << array[i];

但是,在 Python 中,您可以简单地遍历数组的每个元素而不使用索引:

for item in array:
    print item

如果还需要访问索引怎么办?该enumerate功能可帮助您做到这一点。枚举数组(或 Python 中已知的list)会在数组中创建成对的项及其索引。同样可以证明如下:

>>> x = [10, 11, 12, 13, 14]
>>> for item in enumerate(x):
...     print item
...
(0, 10)
(1, 11)
(2, 12)
(3, 13)
(4, 14)

想象一下您需要打印数组中的每个备用项的情况。一种方法如下:

>>> for index, item in enumerate(x):
...     if index % 2 == 0:
...         print item
...
10
12
14

3. 通过 Python 执行外部命令

在某些时候,您可能需要在 Python 脚本中执行终端命令。这可以通过模块call下的函数来实现。subprocess有很多方法可以做到这一点,其中一种如下所示:

>>> from subprocess import call
>>> call('cal')
     March 2016
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

0

输出中的最后一个零表明我们在脚本中创建的子进程正常结束。换句话说,运行命令没有问题。

如果您需要为命令使用参数,则需要将它们作为列表附加到主命令。例如,要运行 command ls -l,需要执行以下操作:

>>> from subprocess import call
>>> call(['ls', '-l'])
total 16
-rw-------@ 1 donny  staff  439 Oct 21 16:06 chess.csv
-rw-r--r--  1 donny  staff   72 Mar  1 17:28 read.py
0

要检查发生0错误时会发生什么,我们可以在非 git 存储库中运行 git 命令:

>>> from subprocess import call
>>> call(['git', 'status'])
fatal: Not a git repository (or any of the parent directories): .git
128

在输出中,第二行是命令的输出,而是128退出代码。

4. 处理异常

Python 是一种解释型语言,这意味着代码是逐行执行的。如果在一行中遇到错误,则代码的进一步执行将停止。但是,您可以使用 try-except 块处理Python 中的已知异常。让我们看一个简单的例子,通过生成除以的运行时错误0

>>> x = 1/0
Traceback (most recent call last):
  File "", line 1, in 
ZeroDivisionError: integer division or modulo by zero

当解释器到达这一行时,您的程序执行将完全停止!但是,使用 try-except 块可以帮助避免这种情况。

>>> try:
...     x = 1/0
... except:
...     print "Some error occurred"
...
Some error occurred

当try块中发生这样的错误时,解释器只执行except块。通过捕获单个错误可以进一步扩展except块:

>>> try:
...     x = 1/0
... except ZeroDivisionError:
...     print "You tried to divide by zero"
... except:
...     print "Some unknown error occurred"
...
You tried to divide by zero

您可以提前一步,通过修改except块来捕获异常并进一步处理它(例如在某处记录错误):

>>> try:
...     x = 1/0
... except Exception as e:
...     print "Exception occurred: " + str(e)
...
Exception occurred: integer division or modulo by zero

5. 使用模块

在看别人的代码时,经常会遇到这样一段代码:

def some_function():
    ...

if __name__ == '__main__':
    ...

当您在 Python 中创建模块时,这经常使用。理想情况下,最后一个块中的代码通常演示了上述函数的一些基本用法。当您在终端中运行该文件时,将执行此代码。但是,如果您在不同的文件中使用此模块以使用该功能,则不会执行此块。令人困惑?让我们通过一个例子更好地理解这一点:

# File print.py
def print_me():
    print "me"

# demonstrating use of print_me
print_me()

现在,如果我导入此文件以在新文件中使用该函数,请注意会发生什么:

>>> import print
me
>>>

导入文件后,该函数就会立即执行。为了避免这种情况,我们将函数放在一个if __name__ == '__main__':块下:

# File print.py
def print_me():
    print "me"

if __name__ == '__main__':
    # demonstrating use of print_me
    print_me()

当我们修改代码时,该print_me()函数只有在作为文件运行时才会执行,而不是在作为模块导入时执行:

>>> import print
>>>

最后的想法

如果 Python 不是您的第一种编程语言,那么需要一些时间来适应它的做事方式。我建议您观看 Raymond Hettinger 的有趣 YouTube 视频,该视频解释了这种Pythonic 编程方式。在这篇文章中,我试图涵盖其中一些 Pythonic 问题。

你的 Pythonic 之旅怎么样,或者它还在继续吗?你喜欢以不同的方式完成这些任务吗?请在下面的评论中告诉我们!

 

你可能感兴趣的:(python,开发语言,后端)