01 Python简介
Python是一种解释型语言,对比C/C++,Python程序不需要编译即可运行,因此具有很强的跨平台性。另外,所有的命令都是逐行发送到Python解释器执行,不需要经过链接过程,因此代码顺序十分重要。
Python应用领域广阔,在Web应用后端开发、云基础设施建设、网络数据采集(爬虫)、自动化测试、数据分析、机器学习等领域都有着广泛的应用。
Python也存在一些缺点,例如执行效率稍低、代码无法加密以及框架太多,良莠不齐等。
02 如何学习Python
本次教程将主要从已学的C/C++出发,讲解Python基本语法,大家也可以基于此学习流程控制、面向对象的编程方法(OOP)。
阅读Python教程
网络上Python教程良莠不齐,此处推荐
https://www.liaoxuefeng.com/wiki/1016959663602400
官方文档本身就是不错的教程, 见
https://docs.python.org/zh-cn/3/。
观看视频学习,不建议,为什么
观看视频更多是一种观察 + 模仿,而阅读文档是读书 + 思考,前者更适用于入门,但对于深入学习,往往后者效率更高。并且文档的时效性更强,有许多修正,需要培养阅读文档的能力。
多练习!!!
03 环境安装
首先,让我们来安装环境!
对Windows系统,推荐使用Anaconda环境,对Linux或Mac OS系统,推荐使用Miniconda环境。
为什么不使用纯Python环境呢?尽管Anaconda也有体积较大等缺点,但首先,纯Python环境包版本管理不便,例如进行机器学习时,学习他人代码往往需要不同版本的TF与Pytorch,创建虚拟环境就可以很好解决这一问题;其次,纯Python环境需要自己安装需要数据科学必要的包。
Anaconda安装步骤:
[01] 下载Anaconda安装包
https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
[02] 添加环境变量
环境变量可以认为是Windows搜索程序的路径,执行程序时,Windows系统会在环境变量中逐个搜索,如果找不到,则会返回找不到可执行文件。
[03] 修改源
https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ ;
修改pip源,具体参见
https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
让我们来测试环境!
[01] 打开命令提示符
Win+S 搜索命令提示符 或 Win+R 输入cmd然后回车
[02] 输入如下命令
> conda activate base
> python
[03] 打开交互式命令行
试试输入1124 ** 122 然后回车,这是在计算1124的122次方(于是你就获得了一个强大的计算器)
我不想在黑框框里编程!
可安装文本编辑器(或集成开发环境, IDE)
Python脚本文件是纯文本文件,理论上只需要记事本即可编辑,编辑后即可使用Python解释器运行。但是记事本没有代码补全、代码高亮、代码警告等。
通过记事本编辑Python脚本文件
1. 使用PyCharm
JetBrain公司出品,堪称神器,参考
https://blog.csdn.net/zfcjhdq/article/details/104919067
2. 使用Vscode
Microsoft出品,支持多种编程语言,本身是个文本编辑器,可通过扩展支持各类IDE功能,参考
https://code.visualstudio.com/docs/languages/python ,通过清华邮箱可申请专业版。
04 快速入门
[01] 第一个Python程序
新建文件,修改文件名及后缀名为hello.py
用文本编辑器打开这个文件,添加内容
print('Hello, world!')`
在此处打开cmd,输入python hello.py
对比C,这就十分简洁
1 #include <stdio.h>
2
3 int main() {
4 printf("Hello, world!");
5 return 0
6 }
与C语言对比
[02] Python数据类型及变量
Python是一种强类型语言同时也属于动态类型语言, Python的变量具有明确的类型,虽然这种类型可以改变。
1 #include <stdio.h>
1 a = 100
2 b = 12.345
3 c = 1 + 5j
4 d = 'hello, world'
5 e = True
6 print(type(a)) # <class 'int'>
7 print(type(b)) # <class 'float'>
8 print(type(c)) # <class 'complex'>
9 print(type(d)) # <class 'str'>
10 print(type(e)) # <class 'bool'>
Python的各种数据类型
1 int a = 100;
2 double b = 12.345;
3
4 #include <complex.h>
5 double _Complex c = 1.0+5.0*I;
6
7 const char* d = "hello, world";
C的数据类型
[03] Python运算符
Python运算符与C差异不大,需要注意的是除法与C定义不同。Python // 被称为 floor divide(除之后向下取整)
1 a = 29
2 b = 3
3 print('%d + %d = %d' % (a, b, a + b)) #29 + 3 = 32
4 print('%d - %d = %d' % (a, b, a - b)) #29 - 3 = 26
5 print('%d * %d = %d' % (a, b, a * b)) #29 * 3 = 87
6 print('%d / %d = %f' % (a, b, a / b)) #29 / 3 = 9.666667
7 print('%d // %d = %d' % (a, b, a // b)) #29 // 3 = 9
8 print('%d %% %d = %d' % (a, b, a % b)) #29 % 3 = 2
9 print('%d ** %d = %d' % (a, b, a ** b)) #29 ** 3 = 24389
Python中运算符
那么,Python中 -1//2 与C中 -1/2 相同吗?
Python中//是除后向下取整,结果为-1,C的除法/采取截断,结果为0。
1 a = 10
2 b = 3
3 a += b # 相当于: a = a + b
4 a *= a + 2 # 相当于: a = a * (a + 2)
5 print(a) # 算一下这里会输出什么
Python其他运算符
1 flag0 = 1 == 1
2 flag1 = 3 > 2
3 flag2 = 2 < 1
4 flag3 = flag1 and flag2
5 flag4 = flag1 or flag2
6 flag5 = not (1 != 2)
7 print('flag0 =', flag0) # flag0 = True
8 print('flag1 =', flag1) # flag1 = True
9 print('flag2 =', flag2) # flag2 = False
10 print('flag3 =', flag3) # flag3 = False
11 print('flag4 =', flag4) # flag4 = True
12 print('flag5 =', flag5) # flag5 = False
Python逻辑运算符
Python有一个神奇的运算符,但并不推荐使用
1 x = 10
2 print(7 <= x <= 11) # True, which equals to (7 <= x) and (x <= 11)
3 print(7 <= x <= 9) # False
为什么不推荐使用呢?C/C++的残留编程习惯可能会造成一些错误!比如说:
print(False == False == False) # Is True or False?
True
[04] Python类型转换
Python是一种强类型语言, Python的变量具有明确的类型,虽然这种类型可以改变
1 a = 100
2 b = 12.345
3 a = b # a = 12.345
4 a = int(b) # a = 12
5 a = float(a) # a = 12.0
6 c = "12.045"
7 a = float(c) # a = 12.045
Python变量类型转换
1 #include <stdio.h>
2
3 int main(){
4 int a = 100;
5 double b = 12.345;
6 a = b; //Not allowed!
7 a = (int)b;
8 a = (double)a; //Not allowed!
9 } xxxxxxxxxx 1 #include <stdio.h> 2 3 int main(){ 4 int a = 100; 5 double b = 12.345; 6 a = b; //Not allowed! 7 a = (int)b; 8 a = (double)a; //Not allowed! 9 } #include <stdio.h>
C变量类型转换
[05] Python输入输出
输入输出比C更加便捷
1 print('The quick brown fox', 'jumps over', 'the lazy dog')
2 print('100 + 200 =', 100 + 200)
3 a = 10
4 b = 20
5 print(str(a) + ' + ' + str(b) + ' = ' + str(a + b))
6 print(a, '+', b, '=', a + b)
7 print('%d + %d = %d' % (a, b, a + b))
8 name = input("请输入名字:")
9 age = int(input("请输入年龄:"))
10 print(name,"的年龄为", age)
Python输入输出
[06] Python字符串及常用数据结构
Python中,字符串格式化与C相同
1 print('Hi, %s, you have $%d.' % ('Michael', 1000000))
2 A = "hello"
3 if A == "":
4 print("A is a empty string")
Python字符串格式化
[07] Python流程控制
Python使用缩进来表示代码块,一般我们使用4个空格作为缩进,请不要使用Tab!严禁混用。流程控制语句如以下例子, if for while后有冒号: 请不要遗漏!
1 age = 28
2 if age >= 18:
3 print('your age is', age)
4 print('adult')
5 Other code...
1 age = 3
2 if age >= 18:
3 print('your age is', age)
4 print('adult')
5 else:
6 print('your age is', age)
7 print('teenager')
1 age = 3
2 if age >= 18:
3 print('adult')
4 elif age >= 6:
5 print('teenager')
6 else:
7 print('kid')
1 sum = 0
2 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
3 sum = sum + x
4 print(sum)
5
6 sum = 0
7 for x in range(11):
8 sum += x
9 print(sum)
for循环(对象必须可以遍历)
1 sum = 0
2 n = 99
3 while n > 0:
4 sum = sum + n
5 n = n - 2
6 print(sum)
while循环
[08] Python函数
Python使用def关键字来定义函数
1 def add(a, b):
2 return a + b
定义函数
1 def acc(a, b, c):
2 return a, a + b, a + b + c
函数可返回多个返回值
读者可做一个小练习:编写一个函数 fib(n),返回第 n 个斐波那契数
[09] Python其他常用语法
交换两个对象的值
a, b = b, a
列表推导式
|
还有很多语法糖……
[10] Python面向对象编程、字典、集合、dunder(魔术方法)、Python包管理工具
此部分已经在下一次教程推出,点击标题即可查看!
05 参考阅读
[1] https://github.com/jackfrued/Python-100-Days
[2] https://www.liaoxuefeng.com/wiki/1016959663602400
[3] https://docs.python.org/zh-cn/3/
技术贴征稿事宜
暑假期间我们将继续开放技术贴征稿!
技术贴推送是向全系同学传播与分享软件技术知识的良好渠道,我们致力于为同学们提供最实用的技术知识,为同学们的学习科研带来更多便利。
如果你有自己独特的技术小技巧,如果你乐于分享自己常用的实用工具软件,如果你希望与大家交流技术知识,欢迎联系我们投稿!成功过稿将会获得稿费噢!