Java人学Python,从入门到放弃
什么是 Python?
Python 是一门流行的编程语言。它由荷兰数学和计算机科学研究学会的 吉多·范罗苏姆(Guido van Rossum)创建,并于 1990 年发布。它用于:
- Web 开发(服务器端)
- 软件开发
- 数学
- 系统脚本
- 数据分析
- 人工智能
Python 可以做什么?
- 可以在服务器上使用 Python 来创建 Web 应用程序。
- Python 可以与软件一起使用来创建工作流。
- Python 可以连接到数据库系统。它还可以读取和修改文件。
- Python 可用于处理大数据并执行复杂的数学运算。
- Python 可用于快速原型设计,也可用于生产就绪的软件开发。
为何选择 Python?
- Python 适用于不同的平台(Windows、Mac、Linux、Raspberry Pi 等)。
- Python 有一种类似于英语的简单语法。
- Python 的语法允许开发人员用比其他编程语言更少的代码行编写程序。
- Python 在解释器系统上运行,这意味着代码可以在编写后立即执行。这也意味着原型设计可以非常快。
- Python 可以以程序方式、面向对象的方式或功能方式来处理。
===== 以上是关于Python的简单介绍 =====
Hello World,他来了
在Java打印Hello World
public class MyClass {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
你需要了解:
- 面向对象的基本知识
- 静态函数
- 参数
- 不要忘了打分号和大括号
- 方法返回值
- 数组
在 C++里面打印Hello World
#include <iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
你需要了解:
- 如何导入标准库
- 函数返回值
- 不要忘了打分号
- 数据类型
在Python里面打印Hello World
print("Hello World!")
你需要了解:
- 了解什么?我现在是Python程序员了!
再加上这几行
import numpy as np
import pandas as pd
import torch
- 编程简直太简单了,我会数据科学和深度学习了!
好了,你现在已经是Python高级工程师了。
那么,Python的广告你刷到了吗?
最近无论是刷D音还是逛W博、PY圈,铺天盖地的Python广告,这个真的很厉害值得一学吗?下面我们将从一个Java程序员的身份来一探究竟。
下面是关于Python的民间传说,切勿对号入座。
铺天盖地宣传python,这种情况,基本可以认定是因为教Python比较容易。
要是换成C++这种(没几个人敢说自己真懂C++)语言,你甚至都没法培训出足够水平的讲师,那显然就没必要为C++做广告了。
目前行业形式来看,培训机构的讲师工资总体水平并不高,至少是明显低于程序员的。由于教课确实收入相对偏低,但凡一个技术真的特别特别能赚钱,那些真有本事的都忙着赚钱去了,哪有工夫出来讲课啊。
反观之,如果一个技术有大量的老师出来教课,那很可能说明它的赚钱能力并没有那么靠谱,以至于教课比自己在软件公司敲代码来得更划算。
再比如,网上教人炒股的特别特别特别的多,然而很多教人炒股的大抵都是自己盘面亏成狗,然后靠教课荐股赚得盆满钵满的。
为什么还是有很多人冲的头破血流也要学Python呢?
1.噱头:人工智能、自动驾驶、大数据分析、网络爬虫,一大堆热门技术、高薪职业都沾边。
2.甜头:通过调几个库,就能把数据爬下来,就能做人脸识别,成就感满满。
并且某地区传出编程纳入考试,在社会发酵发酵,最后铺天盖地打广告,让你觉得大家都在学。
万事具备,最后你就成了培训机构的韭菜。
那么学Python真的没用吗?当然有用!但广告那种建议你别碰。
首先,因为Python被选为人工智能的编程语言,那么这里就有一个商机了,人人都知道人工智能是未来趋势发展之一,这时候就可以无限吹大Python了,其实只要是稍微渗透些IT行业的程序员都知道:C++才是人工智能的核心语言,大数据主要还是Java,Python只是个胶水语言。
其次,办公操作如果你有学过VBA的话就知道谁更好用了,显然是VBA更好,哦哦还有就是Python连一个小学三年级的学生都能学会,简单易学,加上人性贪婪(广告说工资超级高!)与懒惰(广告说超级简单实用!)商机啊,利用人性的弱点就可以骗钱了!!!合法经营,没偷没抢,学完找不到工作的话就是你没认真学,竞争激烈,加油之类的话,呵呵呵→_→老师,Python这么好,你怎么不去找那份超级高工资的工作呢?!
学Python,除非你的专业是生物之类的,只是把Python当做辅助工具,否则别光调用库,还要看看库的源码,看看他们是怎么实现。
搞Python的基本可以分为两类人:数据分析和人工智能
一般人做不了人工智能,大多数人都是奔着做数据分析去的,像爬虫、可视化、数据采集这种。不得不说Python在这方面确实很优秀,毕竟是万能的胶水语言嘛,库很多很方便,拓展性和嵌入型都很不错,更重要的是比较简单,应该说非常简单,当做一个支撑性的工具是很不错的。
所以对于这些Python广告,还是要结合自身的需求:想做个程序员,Java、PHP、C++哪个不比Python强?想做个数据分析师,Python可以当做支撑工具,但这不是重点。想去搞人工智能,深度学习的,这种大神不用我建议了,You are good!
当然,你非要学习Python的话我也拦不住你,毕竟行行出状元,也许你就是那个状元呢?对吧。物以稀为贵,东西多了也就贱了。
什么人比较适合学Python?
Python是一个适合初学者,见效短平快的语言,有大量的库支持从爬虫到各类识别的各种功能,十分适合快速构建应用程序,特别适合非计算机专业极速入门做一些快应用。
但是这个语言在写大型程序方面,不光是效率不行,是根本很难写出严格而优雅的程序。严格的语法,严格的检查,在大型程序开发领域是非常重要的,但是这些Python都没有,并且Python都不需要编译!!!
对非职业程序员来说,可以便利你现有的工作(自动化办公之类),和提升自己能力(毕竟是趋势,将来社会,不会编程基本算半文盲)。
补充一点,想学Python,先网上找资料自学,花钱很少。自学不会的,想做程序员工作的,就必须报班了,报班就报线下班,线上班和自己看视频自学没区别。线下班有好的,但大部分都是坑爹骗钱的要注意甄别。
当然我们也不能光从程序员的角度来看Python,那太狭隘了。很多科研人员、搞算法的,用Python实现算法原型并测试,效率很高。Python肯定是一门优秀的语言,但是被太多不良培训机构搞臭了。
Python还是那句话,广告里面的Python培训都不要去碰。
既然你已经看到这里了,那么我们就来简单认识认识Python吧。
以下内容基于Python 3.7.4 编写,如与新版本有差异,请参考新版本文档。
如果你是一名纯新手,送你一个好东西:https://www.w3school.com.cn/python/index.asp
Python安装
1.MacOS 系统自带Python,可在Terminal内输入 python 或者 python3 查看版本(分别表示2.x和3.x),如果没有python3,建议自行安装python3
2.Windows安装Python3请查看官方文档,传送门:https://docs.python.org/zh-cn/3/using/windows.html
注:如果是初学,建议直接上最新版本,没有必要再去看Python2了
Python开发工具
IntelliJ IDEA全家桶之 PyCharm 传送门:https://www.jetbrains.com/zh-cn/pycharm/
1.语法
Python不需要用分号(;)或者大括号({})来区分代码和代码块,换行和缩进是Python区分代码块的方式,Java人表示一脸懵逼。
- 缩进空格数量可以为任意数量,至少一个
- 同一代码块缩进必须一样,否则报错
2.类型
Python 没有类型,通过一段代码理解一下:
Java
String str = "Hello world";
str 是变量名称,String(字符串) 是变量的类型,确定类型后,str只能接受String类型的值,如果你这样写:
str = 123;
程序编译时就会报错,并告诉你不能把数字类型的值赋给一个字符串类型的变量
Python
str = "Hello World"
str = 123
str = 1.0
Python这样写是完全没有问题的,这就是没有类型,一个变量可以随赋值改变类型。这就是Python的不严谨性。为什么Python可以这样写,Java就不行呢?是Python更高级吗?看图说话:
Java与Python为同一变量赋值对比
Java:在声明变量的时候,会为其分配一个内存空间,无论如何修改,这个内存空间不会改变。
Python:在声明变量的时候,也会为其分配一个内存空间,在修改值的时候,原内存空间销毁,重新分配一个新的内存空间。虽然你的感觉是在修改原变量,其实Python每次都是为你新建了一个变量,所以变量的类型可以随意改变。
3.开始你的第一个Python程序
print("Hello world")
恭喜你,你的第一个Python程序已经完成了。
这里Java人需要注意一下,Python不需要class,也不需要main方法,你只需要在yourfile.py文件里写上这句代码,然后点击IDE的run按钮,程序就能运行了。Amazing
4.变量
Java
String str = "我是字符串";
int i = 1;// 整数
float f = 1.0;// 普通浮点数
double d = 1.0;// 高精度浮点数
boolean b = true;// 布尔值
Python
str = "我是字符串"
i = 1 # 整数
f = 1.0 # 普通浮点数
b = True # 布尔值
注:Python的注释是使用#号
5.方法(函数)
Java
public static void main(String[] args) {
showMsg("Hello Java!!");
}
private static void showMsg(String msg) {
System.out.println("msg = " + msg);
}
Python
def showMsg(msg):
print("msg = " + msg)
showMsg("Hello Python")
# 输出
msg = Hello Python
6.集合数据
Python 中有四种集合数据类型:
- 列表(List)是一种有序和可更改的集合。允许重复的成员。
- 元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。
- 集合(Set)是一个无序和无索引的集合。没有重复的成员。
- 词典(Dictionary)是一个无序,可变和有索引的集合。没有重复的成员。可以理解成Java的HashMap,其实更像JSON。
# 我是列表
mList = ["A", "B", "C", "B", "A"]
# 我是元组
mTuple = ("A", "B", "C", "B", "A")
# 我是集合(无序且自动去重)
mSet = {"A", "B", "C", "B", "A"}
# 我是词典(我感觉我是JSON)
mDictionary = {
"java": {
"name": "高斯林",
"year": 1995
},
"python": {
"name": "吉多·范罗苏姆",
"year": 1990
}
}
# usage
print(mDictionary.get("java").get("name"))
# 输出
高斯林
7.if elif else
Java
private static void testEqual() {
int a = 200;
int b = 66;
if (a > b) {
System.out.println("a > b");
} else if (a == b) {
System.out.println("a = b");
} else {
System.out.println("a < b");
}
}
Python
a = 200
b = 66
if a > b:
print("a > b")
elif a == b:
print("a = b")
else:
print("a < b")
# 输出
a > b
1.Java的逻辑代码必须写到方法体内
2.Python可以写到任意你想写的地方
8.for循环
Java
private static void readList() {
List<String> list = Arrays.asList("A", "B", "C", "B", "A");
for (String letter : list) {
System.out.println("letter is " + letter);
}
}
// 输出
letter is A
letter is B
letter is C
letter is B
letter is A
Python
mList = ["A", "B", "C", "B", "A"]
for letter in mList:
print("letter is " + letter)
# 输出
letter is A
letter is B
letter is C
letter is B
letter is A
9.递归
Python 也接受函数递归,这意味着定义的函数能够调用自身。
递归是一种常见的数学和编程概念。它意味着函数调用自身。这样做的好处是可以循环访问数据以达成结果。
开发人员应该非常小心递归,因为它可以很容易地编写一个永不终止的,或者使用过量内存或处理器能力的函数。但是,在被正确编写后,递归可能是一种非常有效且数学上优雅的编程方法。
例子:使用递归打印99乘法表
def calc99Tab(row, col):
if row > 1:
if col > 1:
calc99Tab(row, col - 1)
else:
calc99Tab(row - 1, row - 1)
result = row * col
if result < 10:
# 增加空格输出,使表格对齐
msg = " {}x{}={}"
else:
msg = "{}x{}={}"
print(msg.format(col, row, result), end=" ")
if col == row:
print("")
# 打印99乘法表
calc99Tab(9, 9)
# 输出:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
The END如果你是一名在职程序员,并且对Python有浓厚的兴趣,建议利用业余时间自学,技多不压身,祝你早日成为全栈工程师,出任CTO,迎娶白富美,走上人生巅峰。