真香,理解记忆法学习Python基础语法
这篇文章很难写!我最开始学 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 已经为我们提供的基础语法,如果想用其他模块的代码,就需要使用 import
或 from..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基础语法的更多相关文章
- Python学习--Python基础语法
第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗 ...
- 吾八哥学Python(四):了解Python基础语法(下)
咱们接着上篇的语法学习,继续了解学习Python基础语法. 数据类型大体上把Python中的数据类型分为如下几类:Number(数字),String(字符串).List(列表).Dictionary( ...
- python学习第三讲,python基础语法之注释,算数运算符,变量.
目录 python学习第三讲,python基础语法之注释,算数运算符,变量. 一丶python中的基础语法,注释,算数运算符,变量 1.python中的注释 2.python中的运算符. 3.pyth ...
- Python 基础语法学习(第一讲)---类的使用
[写在前面]:其实自学python有一段时间了,但是一直没想起来要写博客来记录自己的学习,今天才感觉要写点什么让自己学的更扎实一点,所以从今天开始更新python自学系列,希望看见文章的大佬们可以指点 ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- python学习第四讲,python基础语法之判断语句,循环语句
目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...
- Python学习①. 基础语法
Python 简介 Python 是一种解释型,面向对象的语言.特点是语法简单,可跨平台 Python 基础语法 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编 ...
- Python基础语法题库
引言: 语法练习包括Python基础语法.数据类型.字符编码和简单文件操作等内容. 正文(参考答案附录在题目下方): 1.Python 里用来告知解释器跳过当前循环中的剩余语句,然后继续进行下一轮循环 ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
随机推荐
- MySQL中load data infile将文件中的数据批量导入数据库
有时候我们需要将文件中的数据直接导入到数据库中,那么我们就可以使用load data infile,下面具体介绍使用方法. dao中的方法 @Autowired private JdbcTemplat ...
- R语言factor类型转numeric
R 语言中为了进行数据分析,比如回归分析,这时候对于数据表格中的factor类型的数据会带来弊端,比如对因子的每一个数据都进行一次回归,这样就显得很复杂,且违背了我们的初衷,需要把factor转换为n ...
- Youtube订阅——解决在弹窗内使用Youtube订阅按钮高度显示不全的问题
背景:公司网站业务在做海外营销网站,为了配合营销工作,前端总要在各种地方添加各种社媒订阅(摊手.jpg):最近遇到的是在弹窗内展示公司的Youtube账号的订阅按钮. 理想:我想使用的例子是这样的: ...
- (4)ASP.NET Core3.1 Ocelot负载均衡
1.负载均衡 Ocelot可以在每个路由的可用下游服务中实现负载均衡,这使我们更有效地选择下游服务来处理请求.负载均衡类型:●LeastConnection:根据服务正在处理请求量的情况来决定哪个服务 ...
- 剑指Offer-Python(16-20)
16.合并另个排序链表 # -*- coding:utf-8 -*- class ListNode: def __init__(self, x): self.val = x self.next = N ...
- 面经手册 · 第17篇《码农会锁,ReentrantLock之AQS原理分析和实践使用》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 如果你相信你做什么都能成,你会自信的多! 千万不要总自我否定,尤其是职场的打工人.如 ...
- 在Windows进下build 高可用负载均衡与反向代理神器:HAProxy
前言 HAProxy是一个款基于Linux的开源高可用的负载均衡与反向代理工具,与Nginx大同小异. 搜遍了全网,几乎都是基于Linux平台.Windows平台的要么就是多年前的旧版本,要么就是不兼 ...
- Spider_基础总结3_BeautifulSoup对象+find()+find_all()
# 本节内容: # 解析复杂的 HTML网页: # 1--bs.find() bs.find_all() tag.get_text() # find_all(tag/tag_list,attribut ...
- VBA_headers_mapping
Header Mapping--应对 Report Headers 的变化 Author : Collin_PXY 背景 在 RPA工作中,稳定的规则非常重要,因为 RPA项目就是基于规则而进行的,但 ...
- C++之父:精通C++很难,但你一天之内就能学习使用C++
精通C++听起来好像就是一个笑话.为什么C++比别的语言难学那么多?其实这基本上是因为C++之父Bjarne Stroustrup 说过的一句话"我特别的讨厌语言的设计者把自己的喜好强加给用 ...