这篇文章很难写!我最开始学 Python,和大多数人一样,是看的菜鸟教程:

在写完这篇文章的第一遍后,我发现并没有写出新意,很可能读者看到后,会和我当初一样,很快就忘了。我现在已经不是读者而是作者了,我想我可以做出一些改变,降低阅读门槛,加强理解记忆。

版本选择

Python 有 2 个不兼容的版本,Python2 和 Python3。Python2 已经逐渐被淘汰,现在只需要学 Python3 即可。

语法是什么

先直观感受一下,用不同编程语言在界面上打印出 HelloWorld 字样:

C 语言

#include <stdio.h>
int main(void)
{
printf("Hello World!");
return 0;
}

Python

print("HelloWorld!")

看到了么,结果一样,但是编程语言的写法不一样,就像中文和英文,同一个意思,却是用不同字符表达出来的。语法就是用来告诉你该怎么表达的一套规则。学 Python 只有懂 Python 语法,才能知道怎么写代码。

从一个例子讲起

假设我们要用 Python 实现这样一个功能,键盘输入"大河向东流"后,屏幕上会显示“天上的星星参北斗”。用 Python 实现的代码为:

# 获取键盘输入
pre_sentence = input()
# 判断如果输入的句子是大河向东流
if pre_sentence == "大河向东流":
# 在屏幕上打印天上的星星参北斗
print("天上的星星参北斗")

这个例子涉及到这些名词术语:编码、标识符、语句、缩进、代码块、引号、注释、空行、函数。

编码

编码,是指把人类语言编成计算机能懂的二进制(010101 这种)。不同国家的字符是不一样的,用来编码的字符集也就不一样。美国的字符集包括英文字母、标点符号字符、阿拉伯数字,叫做 ASCII。欧洲的字符集,加入了带重音的字符、希腊字母等叫做,Latin-1。中国!加入了汉字!叫做 GB2312。后来加入了生僻字、繁体字及日韩汉字等,叫做 GBK。天下大乱,乱码无法交流,ISO 国际标准化组织决定一统江湖,Unicode 诞生。再优化优化,UTF-8。

默认情况下,Python3 源码文件都是以 UTF-8 编码,字符串都是 unicode 字符串,让全球不同国家无障碍编程。代码中既可以写英文也可以写中文,但是中文只能用来显示和注释,不决定程序运行。

标识符

标识符是编程时使用的名字,比如例子中的 pre_sentence。在 Python 中,名字由字母、数字、下划线组成,不能以数字开头,并且区分大小写。比如以下是合法的:

a_12_b_
_a1
_A1

以下是非法的:

1abc
$ddd

我们在写代码的时候,经常需要取名字,取名最好具有业务意义。有些名字包含多个英文单词,写在一起不好阅读,名字又不能包含空格,要么首字母大写,要么用下划线来分隔。现有的 Python 代码库中,这两种方式都存在,因为 Python 是由开源社区发展来的,五花八门,百花齐放。为了越来越规范,Google 制定了 PEP8 规范(Python Enhancement Proposal 8),建议大家用下划线来分隔。

下划线除了用来分隔多个单词,在 Python 中还有更多的作用。单个下划线开头 _foo 代表私有的,只能“自己”用。单个下划线结尾 class_ 可以用来解决和 Python 已有名字冲突。双下划线 __main__ 在 Python 中有极其特殊的作用。

Python 已经把有些名字用了,你不能再用,否则会冲突报错。可以在 cmd 中输入 python 进入 Python 后,输入以下代码查看哪些名字已经被用了:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

语句

交流不可能是按单词来交流,而是按语句。Python 中一行代码就是一条语句,这是一般规定。也有少数例外,比如可以使用反斜杠(\),把一条语句写成多行:

total = item_one + \
item_two + \
item_three

如果在 [], {}, 或 () 中,不用反斜杠(\)也可以写成多行:

total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']

反之亦然,Python 中多条语句也是能写成一行的(不推荐):

import sys; x = 'runoob'; sys.stdout.write(x + '\n')

缩进

有些话不是一句就能说完的,比如我现在说的这句,哈哈。为了代码有层次,阅读更方便,编程语言会使用缩进来断句。Python 的缩进有点异类,不是用花括号 {},而是用 4 个空格,而且必须要缩进一致,否则就会报错。比如:

if True:
print ("Answer")
print ("True")
else:
print ("Answer")
# 没有严格缩进,在执行时会报错
print ("False")

报错:

IndentationError: unindent does not match any outer indentation level

如果用 PyCharm,那么就完全不用担心这个问题了,因为它有智能提示,在编写的时候就能纠正过来。我已经完全适应了敲空格,为什么空格键设计的那么大?就是用来敲的!

代码块

“多条缩进相同的语句就叫做代码块”,这是教程给的定义,我们平时说的代码块,更多指的是相关联的多行代码。比如,如果 xxx,那么 xxx,否则 xxx:

if expression :
suite
else :
suite

引号

引号常用来框住字符串,Python 同时支持单引号、双引号、三引号,只要保证引号的开始和结束一致就行:

word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""

单行用单引号或双引号,多行用三引号。我一般会优先用双引号,看着规范(毫无依据,哈哈哈)。

注释

Python 的单行注释用 #:

# 第一个注释
print ("Hello, Python!") # 第二个注释

Python 的多行注释用三个单引号或三个双引号:

'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
''' """
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

空行

空行也是 Python 代码的一部分,既能分隔不同业务代码,也能提高阅读体验。不过不需要刻意记哪些地方需要多少空行,在 PyCharm 中 CTRL + ALT + SHIFT + L 组合键可以快速格式化为符合 PEP8 规范的代码,标准化的空行一目了然:

函数

例子中 input()print() 这种 名字 + () 形式的叫做函数,写 Python 经常会用到函数,也需要我们自己写函数。函数是一块代码片段,有输入,有输出,可以重复使用,有特定功能,比如 input() 用来键盘输入,print() 用来打印到屏幕显示。我们写 Python 代码都是在 .py 文件中来写的,每个 .py 文件在 Python 中叫做模块。模块多了以后,我们需要把它们按照业务意义分别放到不同的目录进行管理,有些目录中包含 __init__.py 文件,这种目录叫做包。

import 与 from...import

模块与模块之间是分离的,除了 Python 已经为我们提供的基础语法,如果想用其他模块的代码,就需要使用 importfrom..import 来导入。视使用需要不同,导入格式也不同:

将整个模块( somemodule )导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import *

动态语言

Python 是动态语言,不需要指定数据类型。比如:

a = 1
b = "string"

强类型语言

Python 是强类型语言,经常会有人搞错。比如:

a = 1
b = "string"
c = a + b

是会报错的:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

不是相同的类型不能直接相加。

JavaScript 才是弱类型语言,不同数据类型可以直接相加。

小结

本文虽然参考了菜鸟教程,但是重新组织了写作手法。先介绍了版本选择和语法的概念,接着从一个例子讲起,把相关的概念挨个讲解了一遍,然后简单提到了模块和包,引出了 import 的原因,最后说明了 Python 是动态、强类型语言。

参考资料:

https://www.runoob.com/python3/python3-basic-syntax.html

真香,理解记忆法学习Python基础语法的更多相关文章

  1. Python学习--Python基础语法

    第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗 ...

  2. 吾八哥学Python(四):了解Python基础语法(下)

    咱们接着上篇的语法学习,继续了解学习Python基础语法. 数据类型大体上把Python中的数据类型分为如下几类:Number(数字),String(字符串).List(列表).Dictionary( ...

  3. python学习第三讲,python基础语法之注释,算数运算符,变量.

    目录 python学习第三讲,python基础语法之注释,算数运算符,变量. 一丶python中的基础语法,注释,算数运算符,变量 1.python中的注释 2.python中的运算符. 3.pyth ...

  4. Python 基础语法学习(第一讲)---类的使用

    [写在前面]:其实自学python有一段时间了,但是一直没想起来要写博客来记录自己的学习,今天才感觉要写点什么让自己学的更扎实一点,所以从今天开始更新python自学系列,希望看见文章的大佬们可以指点 ...

  5. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  6. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

  7. Python学习①. 基础语法

    Python 简介 Python 是一种解释型,面向对象的语言.特点是语法简单,可跨平台 Python 基础语法 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编 ...

  8. Python基础语法题库

    引言: 语法练习包括Python基础语法.数据类型.字符编码和简单文件操作等内容. 正文(参考答案附录在题目下方): 1.Python 里用来告知解释器跳过当前循环中的剩余语句,然后继续进行下一轮循环 ...

  9. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

随机推荐

  1. MySQL中load data infile将文件中的数据批量导入数据库

    有时候我们需要将文件中的数据直接导入到数据库中,那么我们就可以使用load data infile,下面具体介绍使用方法. dao中的方法 @Autowired private JdbcTemplat ...

  2. R语言factor类型转numeric

    R 语言中为了进行数据分析,比如回归分析,这时候对于数据表格中的factor类型的数据会带来弊端,比如对因子的每一个数据都进行一次回归,这样就显得很复杂,且违背了我们的初衷,需要把factor转换为n ...

  3. Youtube订阅——解决在弹窗内使用Youtube订阅按钮高度显示不全的问题

    背景:公司网站业务在做海外营销网站,为了配合营销工作,前端总要在各种地方添加各种社媒订阅(摊手.jpg):最近遇到的是在弹窗内展示公司的Youtube账号的订阅按钮. 理想:我想使用的例子是这样的: ...

  4. (4)ASP.NET Core3.1 Ocelot负载均衡

    1.负载均衡 Ocelot可以在每个路由的可用下游服务中实现负载均衡,这使我们更有效地选择下游服务来处理请求.负载均衡类型:●LeastConnection:根据服务正在处理请求量的情况来决定哪个服务 ...

  5. 剑指Offer-Python(16-20)

    16.合并另个排序链表 # -*- coding:utf-8 -*- class ListNode: def __init__(self, x): self.val = x self.next = N ...

  6. 面经手册 · 第17篇《码农会锁,ReentrantLock之AQS原理分析和实践使用》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 如果你相信你做什么都能成,你会自信的多! 千万不要总自我否定,尤其是职场的打工人.如 ...

  7. 在Windows进下build 高可用负载均衡与反向代理神器:HAProxy

    前言 HAProxy是一个款基于Linux的开源高可用的负载均衡与反向代理工具,与Nginx大同小异. 搜遍了全网,几乎都是基于Linux平台.Windows平台的要么就是多年前的旧版本,要么就是不兼 ...

  8. Spider_基础总结3_BeautifulSoup对象+find()+find_all()

    # 本节内容: # 解析复杂的 HTML网页: # 1--bs.find() bs.find_all() tag.get_text() # find_all(tag/tag_list,attribut ...

  9. VBA_headers_mapping

    Header Mapping--应对 Report Headers 的变化 Author : Collin_PXY 背景 在 RPA工作中,稳定的规则非常重要,因为 RPA项目就是基于规则而进行的,但 ...

  10. C++之父:精通C++很难,但你一天之内就能学习使用C++

    精通C++听起来好像就是一个笑话.为什么C++比别的语言难学那么多?其实这基本上是因为C++之父Bjarne Stroustrup 说过的一句话"我特别的讨厌语言的设计者把自己的喜好强加给用 ...