>  기사  >  백엔드 개발  >  Python을 배울 때 피해야 할 네 가지 일반적인 실수

Python을 배울 때 피해야 할 네 가지 일반적인 실수

WBOY
WBOY앞으로
2023-04-22 20:34:061239검색

作为初学者应避免的四个常见 Python 错误

Python은 초보자에게 훌륭한 언어이지만 그렇다고 실수할 수 없다는 의미는 아닙니다. 특히 프로그래밍 학습 초기 단계에서는 기술적으로는 정확하지만 스타일이 좋지 않은 코드를 작성하기 쉽습니다.

코딩을 배우려면 잘 배우는 것이 중요합니다. 학계든 산업계든 코드 품질이 중요합니다. 이는 귀하뿐만 아니라 귀하의 코드를 계속 읽고 사용하는 모든 사람에게 영향을 미칩니다. 아마도 더 이기적으로 채용 전망에 영향을 미칠 수도 있습니다.

이 기사에서는 초보 Python 프로그래머가 흔히 저지르는 네 가지 실수에 대해 논의하겠습니다. 이러한 함정을 배우는 것은 Python 초기 시절 나에게 매우 도움이 되었으며, 여러분에게도 도움이 되기를 바랍니다.

시작해 보세요.

부울 조건문

이것은 초보 프로그래머가 흔히 저지르는 실수입니다. 이는 코드를 도구로만 사용하기 때문에 공식적인 프로그래밍 배경 지식이 부족한 초보 프로그래머가 저지르는 실수이기도 합니다. 나는 데이터 과학자 여러분을 보고 있습니다.

Python의 조건문은 유용하지만 항상 필요한 것은 아닙니다. 이는 확인 중인 조건에 이미 부울 값(true 또는 false)이 포함되어 있는 경우 특히 그렇습니다.

간단한 예를 들어 설명하겠습니다. 데이터 세트가 정리되었는지 확인하는 코드를 작성한다고 가정해 보겠습니다. 다행스럽게도 코드베이스에는 이를 추적하는 is_data_clean이라는 편의 변수가 포함되어 있습니다. 우리가 해야 할 일은 이를 확인하고 올바른 값을 반환하는 것뿐입니다.

처음에는 다음과 같이 작성할 수 있습니다.

def a_function():
if is_data_clean == True:
return True
else:
return False

이미 작동하지만 이렇게 복잡할 필요는 없습니다. 문제가 보이나요? 주의 깊게 봐.

is_data_clean 변수는 이미 부울이므로 반환해야 하는 값이 이미 포함되어 있습니다! 코드는 True인지 확인하여 True를 반환하고, True가 아니면(False임을 의미) 코드는 False를 반환합니다. 불필요한 검사일 뿐입니다.

함수 코드를 한 줄로 단순화할 수 있습니다.

def a_function():
return is_data_clean

훨씬 좋습니다.

수동 합계, 평균 또는 기타 기본 제공 연산

Python에는 대부분의 사람들이 생각하는 것보다 더 많은 기능이 내장되어 있습니다. 여전히 루프를 사용하여 수동으로 합계를 계산하는 사람들이 너무 많습니다.

파이썬에 숫자 목록이 있는 경우 합계를 다음과 같이 계산해서는 안 됩니다.

total = 0
for num in numbers_list:
total += num

대신 내장된 합계 함수를 사용하세요.

total

최소값 또는 최대값이 필요합니다. ? 다음과 같은 코드를 작성하는 것은 세상에 금지 사항이 없습니다.

import math
minimum = math.inf # 从最高可能值开始
for number in numbers_list:
if number < minimum:
minimum = number

이것은 입문 컴퓨터 과학 원리 과정이 아닙니다. 바퀴를 재발명하지 말고 내장된 min 및 max 함수를 사용하세요.

minimum = min(numbers_list)
maximum

내장 함수의 전체 목록은 Python 문서를 참조하세요.

보너스: 기술적으로 내장되지 않은 내장 함수.

일부 기능은 찾기 어렵지만, 찾지 말아야 한다는 의미는 아닙니다.

예를 들어, 숫자 열의 평균이 필요한 경우​(이것이 반복되는 주제라고 느낄 수 있음) 아래의 첫 번째 코드 조각을 사용할 수 있지만 두 번째 코드 조각을 사용해야 합니다:

# 片段 1:不要这样做!
total = 0
for num in numbers_list:
total += num
avg = total / len(numbers_list)

# 片段 2:这样做!
import numpy as np
avg = np.mean(numbers_list)

일반적으로 Python은 모듈에서 유용한 기능을 제공합니다. 필요한 모듈을 찾고 기능을 가져오려면 추가 작업이 필요할 수 있지만 그만한 가치가 있습니다.

기억하세요 — Python의 핵심은 단순성과 가독성입니다. 내장된 기능은 당신의 친구입니다. 인간 친구들과는 달리 그들은 결코 실망하지 않습니다.

不做无意义的事情

在我教授的一门 Python 入门课程中,学生的第一个项目是编写一个简单的决策算法。 这主要是一个条件练习,要求学生定义一个问题和相关的评分系统,以确定某人有资格回答这个问题的可能性。

例如,有人可能会问,“我应该成为一名数据科学家吗?” 然后,该算法可能包含以下问题,所有这些问题都会根据答案从最终输出分数中增加或减少:

  • 我是否有兴趣使用数据来深入了解世界?
  • 我愿意学习 Python 吗?
  • 我喜欢与多学科团队合作吗?

等等。

在编写算法的过程中,许多学生意识到在某些情况下,他们根本不想对总分做任何事情。 例如,他们可能会决定,如果有人愿意学习 Python,那么他们的总分会增加 10 分,但如果他们不愿意,则分数保持不变。

大多数学生使用以下代码实现它:

# willing_to_lean 是一些基于用户输入的预定义变量
if willing_to_learn:
score += 10
else:
score += 0

这是什么都不做的经典案例。 让我们分解一下 Python 在看到代码行 score += 0 时必须执行的所有操作:

  • 它需要查找变量 score 的值。
  • 它需要将 0 添加到该值。 这需要调用加法函数,传入两个参数(当前值和 0),并计算输出。
  • 将 score 变量重新分配给新值(显然是相同的)。

所有这些代码什么都不做。

当然,这对计算机来说不是很大的工作量,也不会对代码的效率产生任何有意义的影响。 也就是说,它毫无意义,而且有些不干净,这是优秀 Python 代码所不具备的特征。

更好的解决方案是使用 Python 的 pass 关键字,它实际上告诉 Python 什么都不做,继续前进。 它填充了一行不需要的代码,但如果完全留空就会出错。 我们甚至可以添加一点评论以提供进一步的清晰度:

if willing_to_learn:
score += 10
else:
pass # 保持分数不变

更干净、更清晰、更 Pythonic。

单一的条件变得疯狂

条件语句可以说是标准编程中最强大和一致的结构之一。 第一次学习它时,很容易忽略一个重要的微妙之处。

当我们要检查两个或多个条件时,就会出现这种情况。 例如,假设我们正在审查一项调查,以获取以下三种形式之一的回答:“Yes”、“No”或“Maybe”。

早期的 Python 程序员通常使用以下两种方式之一对此进行编码:

# 可能 1
if response == "Yes":
# do something
if response == "No":
# do something
if response == "Maybe":
# do something

# 可能 2
if response == "Yes":
# do something
elif response == "No":
# do something
else:
# do something

在这种情况下,这两个代码片段实际上是相同的。 它们的行为方式相同,理解起来并不特别混乱,并且它们实现了预期的目标。 当人们错误地认为上面的两个结构总是等价时,问题就出现了。

这是错误的。 上面的第二个代码片段是由多个部分组成的单个条件表达式,而第一个代码片段由三个独立的条件表达式组成,尽管它们看起来是相互关联的。

为什么这很重要? 因为每当 Python 看到一个全新的 if 关键字(即一个新的条件表达式开始)时,它就会检查关联的条件。 另一方面,如果当前条件表达式中的先前条件不满足,Python 只会输入 elif 或 else 条件。

让我们看一个例子,看看为什么这很重要。 假设我们需要编写代码,根据学生在某项作业中的分数给他们打分。 我们在Python 文件中写入以下代码:

score = 76

print("SNIPPET 1")
print()

if score < 100:
print('A')
elif score < 90:
print('B')
elif score < 80:
print('C')
elif score < 70:
print('D')
else:
print('F')

print()
print("SNIPPET 2")
print()

if score < 100:
print('A')
if score < 90:
print('B')
if score < 80:
print('C')
if score < 70:
print('D')
if score < 60:
print('F')

运行此代码输出以下内容:

SNIPPET 1
A
SNIPPET 2
A
B
C

你看得到差别吗? 在第二种情况下,我们得到了意想不到的输出。 为什么? 因为 Python 将每个 if 语句作为一个新的条件来读取,所以如果一个分数恰好小于多个数字检查,则会为所有这些打印出相应的字母等级。

现在,有多种方法可以使用多个 if 语句; 例如,我们可以让条件检查范围而不仅仅是上限。 这个例子的重点不是争论一个例子优于另一个例子(尽管为了清楚起见,我个人倾向于使用 elif 和 else),而只是为了说明它们是不一样的。

确保你明白这一点。

最后的想法和回顾

这是您的 Python 初学者备忘单:

  1. 当您可以简单地直接返回布尔值时,不要为布尔值设置不必要的条件。
  2. 内置函数是您最好的朋友。
  3. 如果您需要告诉 Python 什么都不做,请使用 pass 关键字。
  4. 确保正确构造条件表达式,理解 if 、 elif 和 else 关键字的含义。

你决定学习 Python 真是太好了——我向你保证,这门语言会对你很好。

위 내용은 Python을 배울 때 피해야 할 네 가지 일반적인 실수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제