小白学python经常会有这三个认知错误

引言

很多 python初学者,经常会有这个或那个的理解问题,大部分集中在语法层面,不理解为什么或者如何写。

但本文主要讲三个认知上的错误,并不是语法层面的。在我接触的初学者中,这三个认知一直是他们所困惑,或者有歧义的。


如果你也在 学习python ,私信后台加入学习群,这里有志同道合的 “学习搭子”,也有 python大神 解疑答惑,更有不定期的直播互动课程教你实操,做一个 python项目

1、f-string并不是最佳的

很多初学者在学习到字符串格式化或拼接的时候,会发现在 python 中,字符串的拼接有非常多的方法,主要是以下几种。

1.1 +号拼接

string = 'Hello' + 'world'
price = str(10.5) + '元'

1.2 .format

string = '我的名字是{},今年{}岁,工资是{:.2f}元'.format('张三', 20, 5000)

1.3 f-string

name = '张三'
age = 20
salary = 5000
s = f'我的名字是{name},今年{age}岁,工资是{salary:.2f}元'

1.4 编译时拼接

string = 'Hello' ' world'

1.5 %号拼接

string = 'Hello, %s!' % 'world'

由于字符串拼接的方式多样性,很多时候字符串的拼接是随心所欲,想用哪个用哪个。当说明 f-string是最佳 方式时,很多初学者是一脸懵,不知道为什么。

第一点:可读性高

f-string 的方式可读性非常高,符合人类从左往右读的习惯,与其相同功能的 .format 虽然有占位符,但需要读到最右侧才能清晰明了。

第二点:自动类型转换

相对于 +号拼接、编译时拼接 与 %号拼接 相比,f-string 无视变量类型,可以在字符串中直接填写,并在输出时自动转换类型,非常方便。

第三点:官方推荐

很直接,这个方式是官方推荐的,在使用时会更符合 python 的编码风格。

2、变量类型随意更换

由于 python 语言特性,并不是强类型语言,因此如下面的代码可以轻松实现:

price = 5.0
price = '5.0'

很多初学者在使用变量时,无视变量初始类型,随意更改变量类型。虽然咱们说语法上没有任何问题,但这个是不可取的。举一个非常简单的例子。

错误的

# 第一行代码将price设置为浮点数
price = 50.5
# 第二行代码将price设置为字符串
price = '50.5'
# 这个文件代码量巨大,中间有非常多的逻辑,可能有1000行
pass
# 这里执行了一个加法运算,由于代码过多,页面已经发生滚动,你忘记了price进行过类型修改
total_price = price + 100

举个例子,咱们在最一开始设置了 price 为浮点数,但在第二行将其 设置成字符串 ,由于这个文件代码量巨大,在底下有存在 1000多行代码

由于代码过多,你在实现时发现需要 通过price计算一个和 ,通过变量名我们第一反应是 price是数字 ,因此你就直接加上去了。

因此,由于类型错误,无法直接相加,你的程序出现了错误。

这个是非常容易发生的场景,那么应该如何做呢?

正确的

price = 50.5
price_str = '50.5'
# 这里有1000行代码
pass
total_price = price + 100

如果你需要一个 price 的字符串,请另外设置一个变量,而不是直接改变它,这样不同场景使用不同的变量,代码的结构会更加清晰,也会减少不必要的错误。

3、函数是没必要的

经常有初学者疑问,既然代码行数一致,为什么还要写函数。特别是那些只调用一次,其他地方不需要调用的,为什么需要写函数。

def add(a, b):
    return a + b

add(1, 2)

这个函数没有其他地方调用,就用了一次,有必要做一个函数吗?

其实这个问题当然是要分情况。大部分情况下,只要是公共部分就是需要写函数,毕竟不能让这个公共代码重复重复再重复地写。

但有些时候,成熟的程序员会 写一个函数 ,但初学者发现这个函数就 只调用一次 ,就觉得没必要写。

其实,我们需要知道,程序它是一个需要升级优化,不断迭代的。所有东西在未来都有可能进行改变,包括你现在写的代码。

很多时候我们抽离函数,并不是为了当下,而是为了未来的迭代。虽然写函数比你直接写这个代码麻烦,还需要加上 def 函数名 的声明,但谁也不能保准未来这个函数会不断优化和调用。

所以当我们看到一个函数但仅有一次调用,其实是程序员为了未来进行考量。我们在开发时也需要尽量考虑到未来变化,将未来可能发生的代码进行一次抽离。

这其实就是代码的可拓展性需求了。

4、总结

本次总结了三个初学者经常出现的认知问题,可能并不影响开发的结果,但是我们需要选择更正确的方式,调整代码结构,保证可读性,这样才能让代码获得更好的维护性和拓展性。

相关文章

java是编译型还是解释性语言(java是编译型语言吗)

Java 语言在实现上结合了编译和解释两种方式,但更准确地说: Java 是先编译成字节码,然后由 JVM 解释或即时编译(JIT)执行的语言。 Java 的执行流程概览:1、源代码(.java 文件...

一文讲清Python语言的应用与实践(python语言的运用)

摘要:Python作为一门简单易学且功能强大的编程语言,广受程序员、数据分析师和AI工程师的青睐。Python不仅语法简洁、易于上手,而且功能强大,几乎可以胜任各种类型的编程任务。本文将从“Pytho...

新手学Python避坑,学习效率狂飙! 三、Python 数据类型

Python 是一种动态类型语言,在使用变量时不需要显式声明数据类型,变量的数据类型会在赋值时根据赋值的值自动确定。以下是 Python 中主要的数据类型及相关避坑分享:一、数字类型1、整数(int)...

Python自动化办公学习笔记11——布尔类型、变量赋值、类型转换

1. 布尔类型(Boolean)在Python中,布尔类型是整数类型的子类,其中`True`表示"真"或"是",`False`表示"假"或"否&...

Python 中Typing,你了解多少(python trie)

Typing是一个功能强大的内置 Python 模块,它为类型提示提供运行时支持。可以强制 Python 在运行时进行类型检查。在了解模块的作用 typing 之前,需要了解动态和静态类型的编程语言。...