在知道了基础程序构成的变量、数据、语句、函数、注释后,我们就要开始深入学习每个构成要素的细节了!
让我们开始今天的正题!
一、变量
变量的命名和使用
在python中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解。请务必牢记下属有关变量的规则
* 变量名只能包含字母、数字和下划线。变量名能以字母或下划线打头,但不能以数字打头。例如,可将变量命名为 messag_1,但不能将其命名为 1_messa。
* 变量名不能包含空格,但能使用下划线来分隔其中的单词。例如,变量名 greeting_message可行,但变量名 greeting messa 会引发错误。
* 不要将python关键字和函数名作为变量名,即不要使用python保留用于特殊用途的单词,如print等(详细内容请使用help函数查看或者去python官网查找)。
* 变量名应既简洁又具有描述性。例如,name 比 n 好,student_name 比 s_n 好,name_length 比 length_of_persons_name 好。
* 慎用小写字母 l 和大写字母 O ,因为它们可能被人错看成数字 1 和 0 。
要创建良好的变量名,需要经过一定的实践,在程序复杂而又有趣时尤其如此。随着编写的程序越来越多,并开始阅读别人编写的代码,你将越来越善于创建有意义的变量名。
二、数据
前面我们提到过python中默认的四种类型数据:
-
整型
int
整数,
2345
,10
,50
-
浮点型
float
小数,
3.14
或者科学计数法314e-2
-
布尔型
bool
表示真假,仅包含:
True
、False
-
字符串型
str
由字符组成的序列。
"abc"
,'why'
,"欲赎"
,"python爱好者"
下面我们来一一看看它们的用法和注意事项:
1.整型和浮点型
整数
三种进制
既然学习编程,那我们肯定都多少了解过二进制,那么学习不同进制就是学习整数的第一步!
Python中,除了十进制,还有其他三种进制:
0b
或0B
,二进制 0 10o
或0O
,八进制 0 1 2 3 4 5 6 70x
或0X
,十六进制0 1 2 3 4 5 6 7 8 9 a b c d e f
12
12
0b101
5
0o19
SyntaxError: invalid syntax
0o10
8
0xff
255
0xf
15
0x10
16
使用int()实现类型转换:
- 浮点数直接舍去小数部分。如:
int(9.9)
结果是:9
- 布尔值
True
转为1
,False
转为0
。 如:int(True)
结果是1
- 字符串符合整数格式(浮点数格式不行)则直接转成对应整数,否则报错
自动转型:
整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0
的结果是10.0
整数可以任意大
Python2中,int
是32位,可以存储从-2147483648
到2147483647
的整数(约±21亿)。Long类型是64位,可以存储:-2^63--2^63-1之间的数值。
Python3中,int
可以存储任意大小的整数,long
被取消。
浮点数 float
- 浮点数用科学计数法表示。比如:
3.14
,表示成:314E-2
或者314e-2
- 这些数字在内存中也是按照科学计数法存储。
类型转换和四舍五入
-
类似于
int()
,我们也可以使用float()
将其他类型转化成浮点数。 -
整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:
2+8.0
的结果是10.0
-
round(value)
可以返回四舍五入的值。但不会改变原有值,而是产生新的值
增强型赋值运算符
运算符+
、-
、*
,/
、//
、**
和%
和赋值符=
结合可以构成“增强型赋值运算符”。
运算符 | 例子 | 等价 |
---|---|---|
+= | a += 2 | a = a + 2 |
-= | a -= 2 | a = a-2 |
*= | a *= 2 | a = a * 2 |
/= | a /= 2 | a = a / 2 |
//= | a //= 2 | a = a//2 |
**= | a **= 2 | a = a**2 |
%= | a %= 2 | a = a % 2 |
⚠️注意:
“+=”中间不能加空格!
结合的是右侧整个表达式:
y *= x+2 # 相当于:y = y*(x+2) 而不是:y = y*x+2
数字和基本运算符
Python支持整数(如:50
,520
)和浮点数(如:3.14
,10.0
, 1.23e2
),我们可以对数字做如下运算。
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 3+2 | 5 |
- | 减法 | 30-5 | 25 |
* | 乘法 | 3*6 | 18 |
/ | 浮点数除法 | 8/2 | 4.0 |
// | 整数除法 | 7//2 | 3 |
% | 模(取余) | 7%4 | 3 |
** | 幂 | 2**3 | 8 |
除数为0时,会发生异常!
2.布尔值
Python2中没有布尔值,直接用数字0
表示False
, 用数字1
表示True
。
Python3中,把True
和False
定义成了关键字,但他们的本质还是1
和0
,甚至可以和数字相加。
在Python语言底层,会将布尔值True看作1,将布尔值False看作0,尽管从表面上看,True和1、False和0是完全不同的两个值,但实际上,它们是相同的。
在Python语言中有一些特殊的布尔类型值为False,例如False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range对象、空迭代对象。其他情况,均为True。
3.字符串
- 字符串的本质是:字符序列。
- Python不支持单字符类型,单字符也是作为一个字符串使用的。
⚠️Python的字符串是不可变的,我们无法对原字符串做任何修改。但,可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。
很多人初学编程时,总是担心自己数学不行,潜意识里认为数学好才能编程。实际上,大多数程序员打交道最多的是“字符串”而不是“数学”。因为,编程是用来解决现实问题的,因此逻辑思维的重要性远远超过数学能力。
字符串的编码
Python3直接支持Unicode,可以表示世界上任何书面语言的字符。Python3的字符默认就是16位Unicode编码,ASCII码是Unicode编码的子集。
使用内置函数ord()可以把字符转换成对应的Unicode码
使用内置函数chr()可以把十进制数字转换成对应的字符
>>> ord('A') #65
>>> chr(66) #'B'
转义字符
我们可以使用\+特殊字符
,实现某些难以用字符表示的效果。比如:换行等。常见的转义字符有这些:
转义字符 | 描述 |
---|---|
(在行尾时) | 续行符 |
\ | 反斜杠符号 |
' | 单引号 |
" | 双引号 |
\b | 退格(Backspace) |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
不换行打印
我们前面调用print时,会自动打印一个换行符。有时,我们不想换行,不想自动添加换行符。我们可以自己通过参数end = “任意字符串”。实现末尾添加任何内容:
从控制台读取字符串
我们可以使用input()从控制台读取键盘输入的内容。
暂时先将这么多,关于字符串的内容有点多,先留一点给大家消化一下
三、语句
(因为这玩意不好在这里讲太多,我就先把前面的东西复制过来大家再看一遍,复习一下)
语句也就是我们文字描述中的解决步骤,比如在本案例中用到的就是if语句,这个很简单,也就是字面意思“如果”,形象记忆就是条件状语从句(英语学渣乱入)
当然书面描述是——控制语句
控制语句:把语句组合成能完成一定功能的小逻辑模块。
分为三类:顺序、选择和循环。
学会控制语句,是真正跨入编程界的“门槛”,是成为“程序猿”的“门票”。
1. “顺序结构”代表`“先执行a,再执行b”`的逻辑。
比如,先找个女朋友,再给女朋友打电话;先订婚,再结婚;
2. “条件判断结构”代表`“如果…,则…”`的逻辑。
比如,如果女朋友来电,则迅速接电话;如果看到红灯,则停车;
3. “循环结构”代表`“如果…,则重复执行…”`的逻辑。
比如,如果没打通女朋友电话,则再继续打一次; 如果没找到喜欢的人,则再继续找
很神奇的是,三种流程控制语句就能表示所有的事情!
> 不信,你可以试试拆分你遇到的各种事情。实际上,任何软件和程序,小到一个练习,大到一个操作系统,本质上都是由“变量、选择语句、循环语句”组成。
四、函数
函数用法和底层分析
- 函数是可重用的程序代码块。
- 函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。
在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封装,并增加了函数调用、传递参数、返回计算结果等内容。
⚠️为了让大家更容易理解,掌握的更深刻。我们也要深入内存底层进行分析。绝大多数语言内存底层都是高度相似的,这样大家掌握了这些内容也便于以后学习其他语言。
函数简介
函数(function)的基本概念
- 一个程序由一个一个的任务组成;函数就是代表一个任务或者一个功能(function)。
- 函数是代码复用的通用机制
Python函数的分类
Python函数分为如下几类:
-
内置函数
我们前面使用的
str()
、list()
、len()
等这些都是内置函数,我们可以拿来直接使用。 -
标准库函数
我们可以通过
import
语句导入库,然后使用其中定义的函数 -
第三方库函数
Python社区也提供了很多高质量的库。下载安装这些库后,也是通过
import
语句导入,然后可以使用这些第三方库的函数 -
用户自定义函数
用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数。今天我们学习的就是如何自定义函数。
函数的定义和调用
恭喜你,当你学到这里的时候又学到了一个偷懒的技巧,在成为python大佬的基础上又迈进了一步!
核心要点
Python中,定义函数的语法如下:
def 函数名 ([参数列表]) :
'''文档字符串'''
函数体/若干语句
简单定义一个函数:
要点:
-
我们使用
def
来定义函数,然后就是一个空格和函数名称;- Python执行
def
时,会创建一个函数对象,并绑定到函数名变量上。
- Python执行
-
参数列表
- 圆括号内是形式参数列表,有多个参数则使用逗号隔开
- 定义时的形式参数不需要声明类型,也不需要指定函数返回值类型
- 调用时的实际参数必须与形参列表一一对应
-
return
返回值- 如果函数体中包含
return
语句,则结束函数执行并返回值; - 如果函数体中不包含
return
语句,则返回None
值。
- 如果函数体中包含
-
调用函数之前,必须要先定义函数,即先调用
def
创建函数对象- 内置函数对象会自动创建
- 标准库和第三方库函数,通过
import
导入模块时,会执行模块中的def语句
形参和实参
形参和实参的要点:
- 圆括号内是形式参数列表,有多个参数则使用逗号隔开
- 定义时的形式参数不需要声明类型,也不需要指定函数返回值类型
- 调用时的实际参数必须与形参列表一一对应
【操作】定义一个函数,实现两个数的比较,并返回较大的值
上面的printMax
函数中,在定义时写的printMax(a,b)
。a
和b
称为“形式参数”,简称“形参”。也就是说,形式参数是在定义函数时使用的。 形式参数的命名要符合“标识符”命名规则。
在调用函数时,传递的参数称为“实际参数”,简称“实参”。上面代码中,printMax(10,20)
,10
和20
就是实际参数。
五、注释
这东西方在最后有两个原因,
一、是因为这东西真的非常重要,学会写注释你才好读懂代码,不管是自己的还是别人的,学会写注释是成为好程序员的必经之路!
二、给大家放松一下,毕竟今天的知识点有点多,放个简单的给大家的大脑放松放松。(欸嘿!)
注释是程序中会被Python解释器忽略的一段文本。程序员可以通过注释记录任意想写的内容,通常是关于代码的说明。
-
单行注释
每行注释前加
#
号。当解释器看到#
,则忽略这一行#
后面的内容 -
段注释(多行注释)
使用三个连续单引号
'''
或三个双引号"""
。当解释看到'''
,则会扫描到下一个'''
,然后忽略他们之间的内容。⚠️三个连续引号,其实就是定义了一个字符串。只不过,没有变量指向,会被当做垃圾回收(关于本句话的含义,后面讲完面向对象再看)
补充
最后给大家补充一个小知识点:
在python中我们一般不加{ }来表示一个块,所以更注重用缩进来区分某个引用的位置
缩进风格
-
恰当的空格,缩进问题
- 逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
- 语句从新行的第一列开始。
-
缩进风格统一:
- 每个缩进层次使用 单个制表符 或四个空格(IDE会自动将制表符设置成4个空格)
- Python用缩进而不是{}表示程序块的层次关系
-
Python区分大小写