近几年随着python在数据分析行业/人工智能行业中一军突起,连续几年保持编程语言热门榜前五.既然python拥有如此之多的用户,那么应该如何有效地自学呐?
明确学习目的,了解python擅长的领域
其实严格来说,python作为一种完备的编程语言,并不存在所谓的擅长或不擅长,只是在某个领域使用的库比较多,使用的人比较多罢了.下图也标注出来了一些常见领域所需要使用的库.

python擅长方向
其实不难看出来,python擅长的领域多数分布在一些非固定且经常需要修改.代码需要灵活易修改:例如爬虫,数据分析,或者网页页等领域.
其实这也是python的一大优势,却也是被人经常诟病的问题,由于python的"灵活性"造成几乎一个功能可以有无数种办法来实现,在多人生产环境中会成为一场噩梦.在许多软件公司中很不受待见.另外python不需要编译即可执行,造成了运行效率很低,即便现在可以通过vscode快速将python文件转为.cpy,相较于C++或者JAVA等其他语言,其运行效率依然非常低下.这也造成了很多时候大家只是用python做框架实验某个功能的可行性.
不过对于个人开发者或者代码爱好者来说,python的开发效率奇高,甚至成为了一些初创团队,或软件二次开发的主要接口语言.例如power bi在最近的更新中也引入了python语句操作.从另一方面也体现了python的普及性.
在图中罗列出来的库,有兴趣的朋友也可以自行在pipy网站上搜索,不过在开始学习python库之前,我非常建议先好好地了解一下python基础语法(我身边有很多人都因为基础不扎实被成功劝退,或者一看就开发功能就感觉头痛)
python代码格式
python官方是推荐使用 pep 8 格式来编写python代码的.其他主流的包括google的yapf,另外就是pep8格式的升级版Black.不过格式规范主要是为了方便阅读,也并非固定,(python比较随意).整体来说要尽可能保证代码工整,便于阅读,当然许多尝试过import this的python用户一定也知道python之禅.
下面我们来看一下pep8
def fun(flo: float = 0.55342, num: int = 0,
t1: str = '一段文字/一些字符', t2: str = '另一段文字'):
"""这是一个函数"""
text1 = t1
text2: str = t2
# 在python中,即便不标注变量类型,也是可以的,是否需要标注也算是仁者见仁智者见智了.
number_int = num
print(text1) # print函数,可以将变量或者信息打印到窗口
print(text1, type(text1)) # type函数,用来确认变量类型
print("1 内容 %s 类型%s flo %0.1f" % (text1, type(text1), flo))
# %格式化格式, %s 文字输出
# %f 或 %0.1f 对小数进行格式化
print("2 内容 {} 类型 {}".format(text2, type(text2)))
# 通过format()函数进行格式化输出也是个不错的主意
print(flo, num)
if __name__ == "__main__":
# __main__ 一般用于某个脚本末尾,可以用于测试,
# 如果通过import导入其他脚本中, __main__之后的内容将不会被执行
t1 = "这是一段文字"
t2 = "这是另一段文字"
flo = 0.55342
fun(flo=flo, t1=t1, t2=t2)
python最重要的两个部分
一个是基本语法,其中包括的语法格式,变量类型,判断循环,函数/类/包,线程进程等.
另一个就是刚才提到的python库,包括如何找库,如何学习库的使用,其中函数如何调用等等. 当用户对python基础有着较好的理解之后,自学会变得非常简单.大多数时候只需要到对应的发布网站,查询文档便可以很顺利的自学了.
python基础语法中包括了几个重要概念, 另外由于篇幅有限,所以今天只介绍变量和判断循环两部分.当然中间也可以参杂一些其他知识,不过不会影响理解.

python功能概述
变量
在python中万物皆为变量,变量可以是以下任意一种,也可以只是一个单值,虽然看起来是一个很奇怪的设定,但是在实际使用中却非常方便,让各种调用变得极其简单.但是身边也有朋友经常抱怨说变量类型那么多,更不要说从库中调去的数据了,有时候稀里糊涂的操作了就报错.可见搞清楚基本变量关系有多么的重要.
不过本文仅在抛砖引玉,并不会涉及过多的复杂数据类型.不需要考虑那么多有的没的,可以把变量认为就是一个容器,用于保存数据(文本,图片,数字,等任何类型的东西)

变量构建
当然,在之前的代码中我们也看见了,其实一般情况下,我们并不需要特别标注变量类型.不过随着3.91版本的发布,相信不久的将来,变量类型标注也会成为python语言的一部分.不过就现在而言,我们可以先无视它,只是为了方面入门并且了解他们.
一下是常见的"单值变量类型"
# 文本类型
text: str = "文字" # 其性质类似列表,也支持切片
bit_like: bytes = b'比特类型'
# 值类型支持数值计算
num1: int = 0 #整型
num2: float = 0.532 #小数
num_l: complex = (1,2) #复数 类似元组形式
# 布尔型
# 常用于if判断
num_b1: bool = True # 1
num_b2: bool = False # 0
相对于单值变量,也有关于将数据构成一个组合的方法,例如
- list = 列表
- set = 集合
- tuple = 元组 (听说也可以用它构建class)
- dict = 字典
基本判断
if a > b: # 任何判断中,第一个判断都需要已 if开头
print("a > b") # 如果判断成功,测执行的命令
elif a == 0:
# elif 可以在判断式中无限添加,但是需要注意在判断式中永远都是自上由下进行判断的
print("a == 0")
# ..................
elif b == 0 or a == 0: # 或
pass
elif b == 1 and a == 0: # 与
pass
else: # 类似于不需要任何条件,所有其他的都可以通过else输出
print("其他")
# 判断表达式,需要注意的是,在判断表达式中,只能由if和else.
c = 0 if a == 0 else None
列表
0
1
基本循环
循环需要组合型数据,例如list/set/tuple/dict等,在之后我们还可能遇到数组array,但是由于它不属于python原生数据类型,就不在这里过多赘述了.
l1: list = ["列表", a, b] # 列表建立可以通过中括号建立
l2: list = [i for i in range(10)] # 也可以通过列表表达式
# 一般循环格式由for起始
# 一般用于有限次的循环
for i in l1:
print(i)
a = 0
while True: # while不使用break的情况下会无限循环,一般建议使用sleep
a += 1 # python中的语法糖, 可以直接进行加值, 等同于 a = a + 1
print(a)
if a > 10:
break # 退出循环
elif a == 5:
print('过了一半了')
else:
continue # 继续循环,单步执行之后所有信息
print('你看不打印把')
1
2
3
4
5
过了一半了
6
7
8
9
10
11
当我们掌握了以上内容,已经可以完成一些比较简单的脚本了,例如可以计算一下外卖折扣价格按照价格进行平分.
案例
这里是我的代码,分享给大家,也希望可以拓展你对python学习的兴趣,(相比九九乘法表,或星号金字塔等经典案例,我认为这个更有趣.也贴切生活),另一方面也是为了证明一点,编程不难,难的是解决问题的思路.
def Main(): # 由于函数中没有输入值,所以没有写函数说明
num = 0 # 计数变量,
price_list = [] # 空列表,用于存储列表信息
len = 50 # 打印留空,便于统一间隔,可以去除
print("输入 done 进行计算".center(len, " ")) # 说明文本
while True: # 由于不确定循环次数,所以使用while
num += 1
price = input("第{}个物品的价格: ".format(num).center(len, " "))
if price != "done": # 需要注意的是,python中大小写敏感,必须是小写的done,否则无效
# TODO 这里其实还需要添加一个判断,在非'done'或者不是数字类型时可以绕行,避免程序退出
price_list.append(float(price)) # 将每次输入的价格添加到list中
else:
print(" ")
dis_price = input("请输入所支付的价格: ".center(len, " "))
print("=" * len)
total = sum(price_list)
for price in price_list:
print(
"物品{}原价 {}元, 折扣后价格 {}元".format(
price_list.index(price),
price,
round(price / int(total) * int(dis_price), 2),
).center(len, " ")
)
print()
print("总价{} 实际支付价格 {}".format(total, dis_price).center(len, " "))
print("=" * len)
break
if __name__ == "__main__":
Main()
输入 done 进行计算
第1个物品的价格: 10
第2个物品的价格: 11
第3个物品的价格: 12
第4个物品的价格: 13
第5个物品的价格: 14
第6个物品的价格: done
请输入所支付的价格: 40
==================================================
物品0原价 10.0元, 折扣后价格 6.67元
物品1原价 11.0元, 折扣后价格 7.33元
物品2原价 12.0元, 折扣后价格 8.0元
物品3原价 13.0元, 折扣后价格 8.67元
物品4原价 14.0元, 折扣后价格 9.33元
总价60.0 实际支付价格 40
==================================================
下一期我们可以一起学习函数,并且对这段代码进行优化,有好主意的也请留言,欢迎讨论.
在最一开始的图中,我们还说到了关于函数,线程等内容,由于今天只是抛砖引玉,变量特性等信息尚未讨论.后续会逐一讲解.可以持续关注我的头条,感谢各位的阅读.