文章目录
- 一、Python 基本介绍
- 1、编程语言
- 2、字面量 (Literal)
- 3、数据类型查看及转换:
- 4、标识符
- 5、运算符
- 1) 算术运算符
- 2) 赋值运算符
- 3) 比较运算符
- 二、字符串扩展
- 1、字符串拼接
- 2、字符串格式化
- 3、字符串快速格式化
- 4、表达式的格式化
- 三、bool 布尔数据类型
- 1、bool 类型的定义
- 四、其他概念
- 迭代(Iteration)
- 为什么使用迭代器?
大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞👍,给我一点鼓励吧!这对我来说很重要 (*^▽^*)
一、Python 基本介绍
1、编程语言
Python 是面向对象的编译型语言。
程序设计语言:机器语言 → 汇编语言 → 高级语言
编译与解释:
2、字面量 (Literal)
字面量:在代码中,被写下来的固定的值。它与变量不同,字面量是变量值的最直接表示。
字面量是创建对象的一种快速方式,它们在 Python 中广泛使用,因为 Python 是一种非常注重可读性和简洁性的语言。使用字面量可以方便地在代码中表示数据结构。
在 Python 中,字面量(Literal)指的是直接表示值的符号。它们是编程语言中用于创建特定数据类型实例的表达式,不需要通过函数或构造器调用。Python 中的字面量包括:
- 整数字面量:直接表示整数的数字,例如:
42
。 - 浮点数字面量:包含小数点或使用科学计数法的数字,例如:
3.14
或1e-10
。 - 布尔字面量:表示逻辑值
True
或False
。 - 字符串字面量:用单引号 (
'...'
) 或双引号 ("..."
) 括起来的文本序列,例如:'hello'
或"world"
。 - 列表字面量:用方括号括起来的有序集合,可以包含不同类型的元素,例如:
[1, 2, 3]
。 - 元组字面量:用圆括号括起来的有序集合,一旦创建就不能修改,例如:
(1, 2, 3)
。 - 字典字面量:用花括号括起来的无序集合,包含键值对,例如:
{'key': 'value'}
。 - 集合字面量:用花括号定义的无序且不包含重复元素的集合,例如:
{1, 2, 3}
。
print(字面量):
print 可以打印 Python 中的字面量,String 类型数据(值)必须用 ’ '、" " 、 “”" “”" 单、双、三引号括起来。
- 单引号内无需双引号转义,双引号内无需单引号转义,三引号内无需单双引号转义。
Python 常用数据类型如下:
3、数据类型查看及转换:
type(对象) :返回对象数据类型,print(type())
显示。
int(对象)、str(对象)、float(对象) : 转换对象数据类型。float —> int ,截断小数部分。
instance=3.1415926
print(type(str(instance)),instance)打印:
<class 'str'> 3.1415926
4、标识符
在 Python 程序中,可以在编程时对 变量、类、方法 等起名,统一称作 标识符 ,用来做内容的标识。
标识符命名规则
- 内容限定:标识符只允许出现 英文、数字(不可以用于开头)、下划线、中文(不推荐)。
- 大小写敏感:Python 区分大小写。
- 不可使用关键字:如 False、True、containue、break、class 等。
命名规范
- 变量命名规范:a. 见名知意、b. 下划线命名法:多个单词组合变量名进行下划线分隔、 c. 英文字母全小写。
5、运算符
1) 算术运算符
//
:为向下取整。
2) 赋值运算符
多重赋值介绍: 可以不引入临时变量,交换两个变量的值。
x = 2
y = 4
x, y = y, x
print(x, y)打印:
4 2
这里发生的事:
- 求值:在赋值之前,Python 需要知道要赋给变量的值是什么,所以如果有表达式,会先进行表达式的计算、函数返回值的接收。
- 赋值:这里的 y, x 的值被 Python 确定下来,即 旧值、计算后的值按变量 “,” 逗号分隔的顺序进行等号两端的一一对应赋值。
- 交换:就结果而言,x,y 没有引入第三个变量就完成了变量交换,通过多重赋值的原理。
3) 比较运算符
二、字符串扩展
1、字符串拼接
除字符串之外的数据类型无法拼接。
用法:字符串变量 + 字符串变量,字符串变量 + 字符串字面量 进行字符串拼接: print(str1 + str2,"str3" + str4)
2、字符串格式化
通过占位符占位的形式,完成字符串拼接。
格式 1:占位符:%s 内容转换为字符串,%d 整数类型占位,%f 浮点数类型占位。
数字精度控制:
%m,nd %m,nf :m 为限制数字的宽度,多余的宽度前面用空格填充(小数点也算是宽度), 宽度小于数字自身,不生效,即m<=(数字+.+小数宽度);n为控制小数点精度,要求为数字, 会进行小数的四舍五入。
name="张三"; gender="男"; age=20;weight=130.567
sum="%s %s age:%d weight=%f" % (name,gender,age,weight)
print(sum)
print("%s %s age:%5d dweight=%.2f" % (name,gender,age,weight))
print("%s %s age:%.5d dweight=%14.10f" % (name,gender,age,weight))
print("%s %s age:%5d dweight=%15.10f" % (name,gender,age,weight))打印:
张三 男 age:20 weight=130.567000
张三 男 age: 20 dweight=130.57
张三 男 age:00020 dweight=130.5670000000
张三 男 age: 20 dweight= 130.5670000000
3、字符串快速格式化
格式 2:f"{变量}"
特点: (无占位符)不标识数据类型,不能做精度控制。 (f=format /ˈfɔːrmæt/ 格式化 )
用途:不需要做数字类型精度控制时使用。
name="张三"; gender="男"; age=20;weight=130.567
format=f"{name} {gender} age:{age} weight={weight}"
print(format)打印:
张三 男 age:20 weight=130.567
4、表达式的格式化
表达式的返回结果也作为一个字符串对象,进行格式化,表达式为 算术表达式、函数 等
print("1 * 1 = %d" % (1 * 1))
print(f"1 * 2 = {1 * 2}")
print("该函数返回值类型为 %s" % type("string"))打印:
1 * 1 = 1
1 * 2 = 2
该函数返回值类型为 <class 'str'>
三、bool 布尔数据类型
1、bool 类型的定义
bool 类型的字面量: [ 不仅可以被定义,也可以通过比较运算符进行内容比较得到 ]
- True 表示真,1
- False 表示假,0
定义:方式 1:变量名 = bool 字面量
;方式 2:比较运算符: (num1 > num2), f"{num1 < num2}"
bool_1=True
bool_2=False
print(bool_1,bool_2)
num1=10
num2=20
print(f"num1 < num2 = {num1 < num2}")
print((num1>=num2))打印:
True False
num1 < num2 = True
False
四、其他概念
迭代(Iteration)
迭代是指如 for、while 循环结构一直重复同一系列的操作,如遍历一个数据序列(如列表、元组、字典等)的过程。
迭代器(Iterator)
迭代器是一个可以记住遍历位置的对象。它是一个遵循特定协议的对象,这意味着它必须有一个名为 __iter__()
的方法,该方法返回迭代器对象本身,以及一个名为 __next__()
的方法,该方法返回序列中的下一个元素。
生成器(Generator)
生成器是一种特殊的迭代器,它使用yield
语句返回序列的值。每次迭代到yield
表达式时,它会生成一个值,并且可以在下一次迭代时从它离开的地方继续执行。
# 斐波那契数列 演示生成器:def fab(max): n, a, b = 0, 0, 1 while n < max: yield b # 使用 yield# print b a, b = b, a + b n = n + 1for n in fab(5): print n打印:
1
1
2
3
5
过程分析:
yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
总结:
一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。
也可以手动调用 fab(5) 的 next() 方法(因为 fab(5) 是一个 generator 对象,该对象具有 next() 方法),这样我们就可以更清楚地看到 fab 的执行流程:
>>>f = fab(5)
>>> f.next()
1
>>> f.next()
1
>>> f.next()
2
>>> f.next()
3
>>> f.next()
5
>>> f.next()
Traceback (most recent call last): File "<stdin>", line 1, in <module>
StopIteration
当函数执行结束时,generator 自动抛出 StopIteration 异常,表示迭代完成。在 for 循环里,无需处理 StopIteration 异常,循环会正常结束。
yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。
参考: Python yield 使用浅析 | 菜鸟教程 (runoob.com)
为什么使用迭代器?
- 内存效率:迭代器不需要一次性将所有元素加载到内存中,特别是对于大型数据集合,这可以显著减少内存使用。
- 惰性计算:迭代器可以延迟计算,只在需要时生成下一个元素,这有助于提高性能。
- 协议遵循:遵循迭代器协议使得对象可以被 Python 的
for
循环和其他迭代器使用。
文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!🚀