python 关键字在第几行_BG62: 一天入门python

很多打算学习python的朋友常常抱怨不知从哪里开始,看书太枯燥而且记不住,看视频太费时间,去问别人又常常害怕被嫌弃,干脆报个培训班难免心疼那白花花的银子。python这种号称简单易学的语言如果还需要上培训班,那真是对创造并维护它的大神们的羞辱。现在研究机器学习、数据分析、可视化等各行各业都在使用python语言,稍微花点精力来学学也是一件很赚的事情。不仅为窥探这些世界最前沿的技术提供一个窗口,也多了一个计算机这种速度极快的帮手。下面就讨论一下新手如何在一天之内入门python,至于精通,那是每个人自己的事情,更何况也并不是每个人都需要。

1. 语法基础

一门编程语言与一门自然语言一样,都有自己的语法;不同的是编程语言的语法是给编译器或者解释器看的。首先确认一个事情,那就是计算机比人类要笨得多,也要简单得多,如果你像说话那样指挥计算机,他根本就听不懂。从这个角度来说,编程语言自然是比各种自然语言简单得多。python又是这些编程语言中最简单易懂的语言之一,下面我们就来看看python的基本语法。

(1) 数据结构

数据结构就是数据存储的组织形式,也是所有计算机程序的基础。与C/C++那种静态的数据类型不同,python的数据类型是动态的,也就是通常不需要指明数据类型,只需心里明白即可。对于初学者只需要知道几个简单的数据类型:

6128a123c226d8c69be47187e0e8b4dc.png

这些数据类型的具体演示如下:

# 整型int类型a = 1# 浮点型float类型a = 1.1# 布尔boolean类型a = False# 字符串str类型a = '123abc'# 列表list类型a = [1,2,3,5,7,9]# 元组tuple类型a = (1,2,3,5,7,9)# 词典dict类型a = {'a':1, 'b':2, 'c':3}# 类class类型class A:    name = 'hello'a = A()

python中是不是只有这几个数据类型呢?基本可以说是的,因为其他数据类型都在class这个类型之下。除了最基本的int和float,可以说python中的数据类型全都是对象,即类的实例。这样一说,大家会不会觉得也太简单了。关于这几种数据类型的组合可以实现非常复杂的复合数据类型,但那些不是入门应该讨论的问题。所谓入门就是掌握基础,基本会使用这门语言。更复杂的东西都是入门之后自己阅读书籍或者实践中掌握的。

(2) 基本语句

以上数据结构虽然也像模像样地写了几行代码,但是没有任何输出,就不能算是真正的程序。现在就可以来讨论python中的基本语句。python中的一行代码表示一条语句,至于有人会说“分号”的问题,我建议初学者完全不需要考虑。python提供了一个可以打印任何对象的操作--print,以下就结合print,演示python的基本语句。

var = 'hello, world' # 字符串print(var)

Output:

hello, world

以上演示的就是两个基本语句组成的一个python程序,第一行定义了一个字符串str类型的变量,第二行将这个变量的内容打印出来。下面可以结合基本的数学运算再演示一个例子。

a = 1b = 2c = a + bprint('a+b={}'.format(c))

Output:

a+b=3

以上代码的前两行分别定义了两个整型int类型的变量,第三行将两个变量相加的结果赋值给另一个变量,第四行将这个结果变量的内容打印出来。除了加法“+”,还有减法“-”,乘法“*”,除法“/”,幂指数“**”,使用这些就可以完成一个简单的数学计算。

(3) 分支循环

如果想完成一个稍微复杂一点的功能,比如判断一个数据是否为正数,该怎么办?下面的例子演示告诉你。

a = 1if a > 0:    print('a={}是正数'.format(a))else:    print('a={}不是正数'.format(a))

Output:

a=1是正数

python中提供了if...else...语句来处理条件判断的逻辑。如果还想计算1到10的所有正数之和,那么分支语句就无法满足需求。这是python提供了循环语句for和while。首先我们来看一个for循环的实现例子。

total = 0a_list = [1,2,3,4,5,6,7,8,9,10]for i in a_list:    total += iprint(total)

Output:

55

以上就是for 循环遍历元素序列,并进行求和的例子。那么使用while循环该怎么实现呢?

total = 0i = 1while i <= 10:    total += i    i += 1print(total)

Output:

55

以上就是while循环实现从1到10的正数求和。到这里有几个规则需要说明一下:(1) python以4个空格的缩进作为子作用域,至于tab键的缩进建议不要考虑;(2) "a+=b"相当于"a=a+b";(3) 子作用域都是使用“:”符号开启,也就是说":"符号的下一句需要缩进4个空格,一直到子作用域需要的功能结束。

掌握了python中常用的数据结构和分支循环语句就意味着,已经可以使用python来实现各种逻辑了。入门的朋友看到这里可能有点懵逼,表示自己完全什么都不会。这里就涉及到计算机解决问题的基本思路--大问题分解成小问题,而所有的计算问题都可以分解成以上基本语句和分支循环可以实现的问题。那么,我们是不是真的需要使用这些基本语句实现所有的功能呢?当然不是。接下来的所有内容都是为了一个目的--“偷懒”。

(4) 函数

比如上面的计算一个列表list中所有元素之和这个功能很多地方都需要用到,自然不需要每个地方都写一遍的,而函数就能解决这个问题。所谓函数是指给定输入或者不给输入能够按照规定的逻辑产生输出的一种映射。下面给出一个python中函数定义的例子。

def my_sum(a_list):    total = 0    for i in a_list:        total += i    return totala = [1,2,3,4,5,6,7]b = my_sum(a)print('b={}'.format(b))

Output:

b=28

从以上例子可以看出,python中使用def关键字定义函数,定义格式为“def function_name([arg1, [arg2[, arg3...]]]):”,中括号的意思表示可选。冒号下的若干行为子语句块,具体多少行需要看缩进什么时候结束。比如上面的例子中的第1行到第5行就构成一个函数,第8行是对函数的调用。函数的子语句块中,使用return关键字返回参数,python允许以元组形式的多个返回值。掌握了函数就能够实现非常复杂的功能,也可以简化基本语句的使用。比如上面生成一个list的方式太麻烦了,可以使用函数来生成。不过对于初学者了解到这里就足够了。

(5) 注释

所谓注释就是在代码中不会被解释器运行的内容。python的注释使用符号“#”开始,“#”之后的内容为注释。以下给出一个注释的例子。

a = 123 # 设置变量a的值

注释一般用于对程序中某些代码进行说明,以提高代码的可读性和可维护性。一个良好的注释习惯是专业开发者必备的素质,也会让自己受益无穷。代码这东西刚开始写的时候以为自己会印象深刻,这辈子都记得具体的逻辑。但是真实情况是,大部分人重读自己的代码的时候都不觉得那是自己写的,反而有一种咒骂开发者不写注释的冲动。

(6) 模块

python已经提供了一些非常好用的模块,善用这些已有的模块不仅能提高开发效率,而且能够提升代码质量。比如与操作系统相关的操作封装在“os”模块中,与python解释器相关的操作封装在“sys”模块中,与数学运算有关的操作封装在“math”模块中,与时间有关的操作封装在“time”模块中,等等。至于到底有多少内建模块,这个问题我们一般不关心,我们只关心哪些对我们有用,该怎么使用。下面就演示一下导入python模块。

import osimport sysimport mathimport timeprint(os.path.join('images', 'filename.png')) # 拼接文件系统路径print(len(sys.argv))                          # 命令行参数个数print(math.sin(math.pi/2))                    # 计算sin(pi/2)print(time.time())                            # 获取当前时间戳

Output:

images/filename.png31.01579368708.6738062

python使用import关键字导入模块,然后就可以在代码中使用已导入的模块。如果你在别人的代码中看到import A as B这样的导入方式也不需奇怪,这种方式同样是导入一个模块A,只是在使用时将模块A的名字改为B,这对于一些名字比较长的模块中比较有用。 更多的python内置模块可以通过查看python的手册学习。

2. 模块安装

除了python内建的模块之外,我们还经常需要使用一些第三方模块,正是丰富的第三方模块奠定了python在开发者中的地位,比如提供矩阵张量运算的numpy,提供表格数据处理的pandas,提供精美绘图接口的matplotlib。在实际的开发中,能够使用已经封装好的模块完成的功能,就不要自己使用基本语句实现,除了开发效率,更是因为python本身提供的基本语句运算速度比较慢。而这些内建的或者第三方的模块往往在底层进行了速度的优化。有时,第三方模块无法满足需求,我们就得自己动手编写一些自定义的模块了。

(1) pip安装

安装python第三方模块的工具有好几个,不过这里只介绍pip,也建议python的初学者使用pip,而不是anaconda这种集成的环境。使用pip安装第三方模块时会自动从默认的源中下载,比如以下例子就是安装numpy的指令。

pip3 install numpy

如果指定的安装包不存在,则安装过程会报错。有时命令行下的网络比较差,可以使用其他下载器获取模块的二进制安装包文件,然后执行

pip install ${filename}

就可以从本地的文件中安装第三方模块。当然,使用pip安装模块时还可以指定模块的版本号,如果下载速度慢还可以修改默认的源地址,这些还是等熟悉了python之后再慢慢尝试。

(2) 源码安装

并不是所有的第三方模块都提供了二进制安装包的,有些第三方模块只有源码,而源码的根目录下必定存在一个setup.py文件,我们就可以通过这个文件来安装该模块,指令如下:

python3 setup.py install

源码安装有时会需要调用编译器,存在一定失败的概率。所以,能使用二进制安装包的尽量使用安装包,既简单又通用,出了问题也能找到对应的讨论。

(3) 常用模块

这里介绍几个常用的第三方模块,一般数据分析,机器学习或者图像处理领域都是会用到的。

f192e66402bdd873b804db4b9afee4bb.png

有了这些第三方模块的加入,要实现一个功能复杂的系统就变得非常简单而且高效。这就是站在巨人的肩膀上创造,不要重复造轮子。使用第三方模块最重要的事情就是看对应的文档,学会看文档是扩展编程能力的一个非常重要的方面。

(4) 自定义模块

第三方模块虽然多,但是需求却是千变万化,有些需求没有办法直接使用第三方模块实现,那就只能自己动手编写。python中组织代码文件的方式就是模块。因此,每个文件是一个模块,每个包含python文件的目录也是python模块。只要将自己编写的py文件放在解释器能够搜索到的目录下,都可以像内置模块或者已经安装的第三方模块那样import。对于初学者而言,自定义模块也是暂时没必要深入了解的。等到自己编写代码时发现一个文件的代码太多而不方便时,自然会开始使用自定义的模块了。

3. 问题解决

编程也是一个工程实践问题,但凡工程实践总会出现问题的。开发者需要在出现问题后定位问题原因,修复问题代码,最后是反思问题从而提升编程能力。事实上,编程能力除了编写代码的技巧,更多的还是定位问题和解决问题的能力。

(1) 调试

出现问题之后的第一反应是调试。与C/C++这类编程语言的断点调试功能不同,python调试应该更多借助于打印中间结果。如果一段python程序真的需要启用调试器的断点调试,那就是因为对代码不熟悉或者所出现的问题极为诡异。绝大多数的问题都能通过打印中间结果,再结合语法特点加以解决。如果报出不能理解的错误,那就需要借助搜索引擎了。

(2) 搜索

一个好的搜索引擎就是最好的老师。在搜索技术问题时,我们还是建议使用Google,如果实在没办法那就只能使用百度了。对于绝大多数的编程问题,都已经有前人遇到过,其中的绝大部分问题已经有了很不错的解决方案。这时只需将python解释器报错的最后一行错误信息放到搜索引擎中检索即可。stackoverflow网站上常常会提供提供一些问题的解决方案,如果爱好编程倒是可以经常逛逛。搜索引擎提供的结果通常来自于一些博客、github以及问答网站。总体来看,挑选大名鼎鼎的网站上的解决方案的成功概率更大。

(3) 讨论

一般而言,对于初学者还不会遇到前人没遇到过的编程问题。如果确实出现这种问题只能请教一些熟悉python的朋友,或者加入在线的python讨论交流群。

python是一种面向对象的编程语言,但是上文所述似乎并没有面向对象的特点。对于初学者而言,使用函数堆砌实现功能无可厚非的,也是推荐的。等到功能更加复杂的时候,才有动力来对代码的组织结构进行设计,而面向对象的根本目的还是实现代码重用。关于异常的问题这里也没有太多涉及,学会在适当的时候抛出和捕获异常已经算是比较高阶的能力了。

初学者还可以参考《简明python教程》这本书,入门之后如果还打算进一步系统学习python,可以阅读《python核心编程》一书。很难想象一个人连26个字母都认不全却能有耐心读进一本英文书。与学习英语一样,通过入门学习具备了这种语境下讨论问题的基础,进一步阅读相关书籍才会事半功倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值