Welcome to 9ilk's Code World
(๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏: Python
本篇博客博主将分享一些python的基础语法。
🏠 常量和表达式
我们可以把Python当成一个计算器,进行一些简单的算术运算
python
print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)
#输出结果:
#0
#7
#1.6666666666665
形如1 + 2 - 3这样的算式,被称为表达式 ,算式的运算结果称为表达式的返回值 .其中1,2,3这种称为字面值常量 ,+,-,*,/这种称为运算符或着操作符.
注意:
- print是Python一个内置函数,用于打印。
- 运算符和数字之间,可以没有空格,也可以有多个空格,但一般为了美观习惯写上一个空格。
- 可以使用 + - * / ( ) 等运算符进行算术运算. 先算乘除, 后算加减。
- 在Python中类似2/3整数除整数结果得到的可能是个小数,而C++/Java等语言结果会发生截断结果为0.
🏠 变量和类型
📌 变量
📒 变量是什么
变量可以视为是一块能够容纳数据的空间 . 这个空间往往对应到 " 内存 " 这样的硬件设备上.
python
avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg)
** 2
result = total / 3
print(result)
在这个代码中, 就需要先计算这四个数字的平均值, 然后再计算方差. 这就需要把计算的平均值使用 变量保存起来.
📒 变量定义
python
a = 10
- 上述代码a为变量名,当我们创建多个变量时,就可以用名字来进行区分。
- 定义变量时不用声明类型。
📒 变量名规则
- 硬性规则
1.变量名由数字字母下划线构成 .
2.数字不能开头 .
3.变量名不能和 " 关键字 " 重复 .
4.变量名大小写敏感 . num 和 Num 是两个不同的变量名 .
- 软性规则
1.变量名使用有描述性的单词来表示 , 尽量表达出变量的作用 .
2.一个变量名可以由多个单词构成 , 长一点没关系 , 但是含义要清晰 .
3.当变量名包含多个单词的时候 , 建议使用 " 驼峰命名法 ". 形如 totalCount , personInfo 这种 , 除了首个单词外, 剩余单词首字母大写
📒 变量使用
- 读取变量的值
python
a = 10
print(a)
注:首次使用 = 对a进行设置值,这个过程是创建变量(初始化)
- 修改变量
python
a = 10
print(a)
a = 20
print(a) # 20
b = 30
a = b
注:修改变量也是使用 = ,此时是相当于是修改a的内容,赋值操作.
📌 变量的类型
变量里面存储的不仅仅是数字 , 还可以存储其它种类的数据 . 为了区分不同种类的数据 , 我们引入了 " 类型 "这样的概念。
注:Python中变量类型,不需要在定义变量的时候显式声明,而只是依靠初始化语句,根据初始化的值的类型来进行确定。比如,a=2确定a是int类型。
📒 type
type 和 print 类似, 也是 python 内置的函数. 可以使用 type 来查看一个变量的类型.
📒 整数
python
a = 10
print(type(a))
输出:class<'int'>
注:在Python中,int能表示的数据范围是"无穷"的,Python中的int是可以根据要表示的数据的大小,自动扩容.因此Python中就没有long,byte,short这样的类型~
📒 浮点数
python
a = 0.5
print(type(a))
输出结果:class<'float'>
注 : 像C++和Java里,float是4个字节,也叫做"单精度浮点数",double是8个字节,也叫做"双精度浮点数";Python中的float就是双精度浮点数,没有double.
从整形和浮点型设计体现出Python的一个设计哲学:解决一个问题,只提供一种方案.
📒 字符串
python
a = 'hello'
b = "hello"
print(type(a))
使用 ' ' 或者 " " 引起来的 , 称为 字符串(str) . 可以用来表示文本 .
- 在 Python 中, 单引号构成的字符串和双引号构成的字符串, 没有区别. 'hello' 和 "hello" 是
完全等价的. - 如果字符串里面包含了双引号,表示字符串就可以用单引号引起来;如果字符串里面包含了单引号,表示字符串就可以使用双引号引起来。
python
e = "My name is "Jack"" #这时错误写法会识别成My name is和空字符串
e = 'My name is "Jack" '
- 如果字符串内同时有双引号和单引号,可以使用三引号'''或者"""
python
a = '''heoo is "jack" 'mary' '''
a = """heoo is "jack" 'mary' """
print(a)
- 可以使用 len 函数来获取字符串的长度
python
a = 'hello'
print(len(a))
- 可以使用 + 针对两个字符串进行拼接(拼接后对原来的字符串无影响),但是 不能拿字符串和整数/浮点数相加。
python
a = 'hello'
b = 'world'
print(a + b) #helloworld
📒 布尔
布尔类型是一个特殊的类型 , 取值只有两种 , True ( 真 ) 和 False ( 假 ).
python
a = True
print(type(a))
b = False
print(type(b))
输出结果:
<class 'bool'>
<class 'bool'>
注 : 虽然是特殊的类型但True是可以表示1,False表示0的.比如print(True+1),输出2.
📒 类型的意义
- 类型决定了数据在内存中占据多大空间 .
(2) 类型其实约定了能对这个变量做什么样的操作 .
总结:类型系统其实是在对变量进行 "归类". 相同类型的变量(数据) 往往具有类似的特性和使用规则.
📌 动态类型特性
python
a = 10
print(type(a))
a = 'hello'
print(type(a))
在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str
在 Python 中 , 一个变量是什么类型 , 是可以在 " 程序运行 " 过程中发生变化的 . 这个特性称为 " 动态类型".
- C++/Java 这样的语言则不允许这样的操作. 一个变量定义后类型就是固定的了. 这种特性则称为 "静态类型"。
- 一个编程语言,是否是动态类型,只是取决于运行时类型是否发生改变,不取决于变量定义的时候是否声明类型!
- Python作为一个动态类型的语言,在定义变量的时候,也是可以写类型的
python
a:int = 10
b:str = 'hello'
- 动态类型特性是一把双刃剑 .
对于中小型程序 , 可以大大的解约代码量 ( 比如写一段代码就可以同时支持多种类型 ).
对于大型程序 , 则提高了模块之间的交互成本 . ( 程序猿 A 提供的代码难以被 B 理解 ).
🏠 注释
📌 什么是注释
注释是一种特殊的代码 , 它不会影响到程序的执行 , 但是能够起到解释说明的作用 , 能够帮助程序猿理解程序代码的执行逻辑。
📌 注释的语法
- 注释行 : 使用 # 开头的行都是注释.
python
# 这是一行注释.
- 文档字符串 : 使用三引号引起来的称为 "文档字符串", 也可以视为是一种注释
python
"""
这是文档字符串
这是文档字符串
"""
注:
1.可以包含多行内容 ,
2.一般放在 文件 / 函数 / 类 的开头 .
3.""" 或者 ''' 均可 ( 等价 ).
📌 注释的规范
- 内容准确 : 注释内容要和代码一致 , 匹配 , 并在代码修改时及时更新。
- 篇幅合理 : 注释既不应该太精简 , 也不应该长篇大论。
- 使用中文 : 一般中国公司都要求使用中文写注释 , 外企另当别论。
- 积极向上 : 注释中不要包含负能量。
🏠 输入输出
程序需要和用户进行交互:
- 用户把信息传递给程序的过程 , 称为 " 输入 "。
- 程序把结果展示给用户的过程 , 称为 " 输出 "。
输入输出的最基本的方法就是控制台。 用户通过控制台输入一些字符串 , 程序再通过控制台打印出一些字符串。
输入输出的最常见方法是图形化界面 . 如我们平时用到的 QQ, 浏览器 , steam 等 , 都不需要用户输入命令 , 而只是通过鼠标点击窗口点击按钮的方式来操作。
📌 通过控制台输出
Python 使用 print 函数输出到控制台。
python
print('hello')
不仅能输出一个字符串 , 还可以输出一个其他类型的变量
python
a = 10
print(a)
b = True
print(b)
更多的时候 , 我们希望能够输出的内容是混合了字符串和变量的。比如输出:num = 10
python
num = 10
print(f'num = {num}')
- 这个语法叫做"格式化字符串",此时可以使用{ }往字符串里嵌入变量或者表达式。
- 使用f作为前缀的字符串,称为f-string,此处的f表示"format"。
📌 控制台输入
python 使用 input 函数 , 从控制台读取用户的输入。
python
num = 0
num = input('请输入一个整数: ')
print(f'你输入的整数是 {num}')
注:
- input参数相当于一个"提示信息",也可以没有参数。
- input的返回值就是用户输入的内容,是字符串类型。
python
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
print(f'a + b = {a + b}')
给a,b输入,最后print打印结果是a + b = 1020。说明此处的结果是字符串拼接,不是算术运算,因为input返回值是str类型。如果想进行算术运算,需要先转换类型。
python
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
a = int(a)
b = int(b)
print(f'a + b = {a + b}'}
输出结果变为a + b = 30。
通过int()把变量转成了int类型。类似的,使用float(),bool(),str()等可以完成对应的类型转换。
🏠 运算符
📌 算术运算符
像 + - * / % ** // 这种进行算术运算的运算符 , 称为 算术运算符。
- 有些编程语言中,/整数0会抛异常,/浮点数0会得到无穷大,而Python都认为是除0异常。
- 整数 / 整数 结果可能是小数. 而不会截断。
- %不是百分数,而是求余数。
- **是求乘方,不光能求整数次方,还能开方。
python
print(4 ** 2)
print(4 ** 0.5)
- //是取整除法(也叫地板除),整数除以整数,结果还是整数(舍弃小数部分,并向下取整。不是四舍五入)
python
print(7 // 2)
print(-7 // 2)
📌关系运算符
像 < <= > >= == != 这一系列的运算符称为 关系运算符 , 它们是在比较操作数之间的关系 .
- 如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False
python
a = 10
b = 20
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)
输出:
True
True
False
False
False
True
- 关系运算符不光针对整数 / 浮点数进行比较 , 还能针对字符串进行比较。
python
a = 'hello'
b = 'world'
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)
输出结果:
True
True
False
False
False
True
注:
1. 直接使用 == 或者 != 即可对字符串内容判定相等。
2. 字符串比较大小, 规则是 "字典序" 。
- 对于浮点数来说, 不要使用 == 判定相等。
python
print(0.1 + 0.2 == 0.3)
输出:False。
python
print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)
输出结果:
0.1
0.2
0.3
0.3000000000000004
注 : 针对浮点数来说,使用==比较相等,存在一定风险。因为浮点数在内存中的存储和表示,是可能存在误差的,这样的误差在进行算术运算时就可能被放大,从而导致==的判定出现误判。
python
a = 0.1 + 0.2
b = 0.3
print(-0.000001 < (a - b) < 0.000001)
正确的比较方式:不再严格比较相等,而是判定差值小于允许的误差范围。在实际工程实践中,误差在所难免,只要保证误差在合理范围内即可。
📌 逻辑运算符
像 and or not 这一系列的运算符称为 逻辑运算符。
- and并且,两侧操作数均为True,最终结果为True,否则为False(有假则为假)。
- or或者。两侧操作数均为False,最终结果为False,否则为True。(有真则为真)。
- not逻辑取反。操作数本身为True,则返回False,本身为False,则返回True。
python
a = 10
b = 20
c = 30
print(a < b and b < c)
print(a < b and b > c)
print(a > b or b > c)
print(a < b or b > c)
print(not a < b)
print(not a > b)
输出结果:
True
False
False
True
False
True
注: a < b and b < c 这个操作等价于 a < b < c。这个设定和大部分编程语言都不相同。
- 短路求值
和其他编程语言类似 , Python 也存在短路求值的规则 .
- 对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行。
- 对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行。
python
print(10 > 20 and 10 / 0 == 1)
print(10 < 20 or 10 / 0 == 1)
输出结果:
False
True
上述代码没有抛出异常, 说明右侧的除以 0 操作没有真正执行.
📌 赋值运算符
- = 的使用
= 表示赋值,注意==是比较是否相等。
= 还可以针对多个变量进行赋值。
链式赋值
python
a = b = 10
多元赋值
python
a,b = 10,20
#a被赋值为10,b被赋值为20
a,b = b,a
# a,b进行赋值交换
- 复合赋值运算符
Python 还有一些 复合赋值运算符 . 例如 += - = *= /= %= ,其中 a += 1 等价于 a = a + 1 . 其他复合赋值运算符也是同理。
注:像C++/Java中,存在++/--这样的自增/自减运算符。但Python中则不支持这种运算(设计时为避免对前置后置的混淆而不支持),如果需要使用,则直接使用+=1或者-=1。
📌 其他运算符
除了上述之外 , Python 中还有一些运算符 , 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符( & | ~ ^ << >>) 等。
完。