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