大模型学习-python基础Day2
一.浮点数类型
使用时候可能出现微小误差,可以通过decimal解决
num1 = 0.1
num2 = 0.2
print(num1 + num2) #0.30000000004
from decimal import Decimal
num3 = Decimal('1.0')
num4 = Decimal('0.9')
print(num3 + num4) #0.3
二.布尔类型
布尔变量只有True和False
bool是int的子类,True和false可以数字相加
bool1 = True
num = 1
print(bool1 == num) #true
print(bool1 is 1) #false
注意这里bool1的true是一个内存,但是我们说true可以代表1是指true这个内存指向了小整数池中的1
num = 1也是num指向了小整数池中的1
所以 bool1 == num返回true
三.字符串string
用引号括起来的都是字符串,其中的引号可以是单引号,也可以是双引号,可以使用反斜杠\转义特殊字符。
str1 = “this is 'liujie' ”
str2 = 'this is "liujie"'
print(str1) #this is 'liujie'
print(str2) #this is "liujie"
也可以使用三个引号表示多行字符串,三个引号允许一个字符串跨多行,字符串可以包含换行符,制表符等其他特殊字符
str3 = (""" hello
world """)
print(str3) # hello
# world
#反斜杠\可以用来表示续行符
str4 = ("hello \
world")
#打印结果就是 hello world
#反斜杠也是可以用来转移特殊字符
str5 = "hello \"world"
#打印结果就是 hello “world
#常用转意字符
#\b 退格
#\n 换行
#\t 横向制表符
#\n 回车,回到行首
intern机制:
一种内存优化技术,其核心思想是:对于内容相同的字符串,解释器只在内存中保存一份副本,并让所有引用该字符串的变量都指向这同一个内存地址
Python 解释器在编译时会对满足特定条件的字符串自动进行驻留。这些条件通常包括:
- 标识符风格的字符串:仅包含字母、数字和下划线(
_)的字符串,例如"hello","my_variable","_123"。 - 空字符串和单字符:
""和"a"几乎总是被自动驻留。 - 编译时常量:在代码顶层直接定义的字符串字面量,而非运行时动态生成。
# 符合标识符规则,会自动驻留
s1 = "hello_world"
s2 = "hello_world"
print(s1 is s2) # True,指向同一内存地址
# 包含空格,不符合标识符规则,通常不会自动驻留
s3 = "hello world"
s4 = "hello world"
print(s3 is s4) # 通常是 False,是两个不同的对象
# 动态生成的字符串,不会自动驻留
s5 = "".join(['h', 'e', 'l', 'l', 'o'])
s6 = "hello"
print(s5 is s6) # 通常是 False
手动强制驻留
对于不会被自动驻留的字符串(如动态生成或包含特殊字符的字符串),你可以使用 sys 模块中的 sys.intern() 函数来强制进行驻留。
- 作用:
sys.intern(string)会将字符串string加入到 Python 的全局驻留池中。如果该字符串已存在于池中,则返回现有对象的引用;如果不存在,则将其添加到池中并返回引用。 - 结果:所有通过
sys.intern()处理的、内容相同的字符串,都将指向内存中的同一个对象。
import sys
# 动态生成且包含空格的字符串
s1 = "".join(['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'])
s2 = "".join(['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'])
print(s1 is s2) # False,默认情况下是两个对象
# 使用 sys.intern() 强制驻留
s3 = sys.intern(s1)
s4 = sys.intern(s2)
print(s3 is s4) # True,强制驻留后指向同一对象
四.类型转换
num1 = 10
num2 = 15.5
num3 = num1 + num2
print(type(num3)) #float类型
#两个类型进行除法运算结果也是浮点型
print(type(4/2)) #float
整型和字符串相加也会报错,python此时无法进行隐式转换
1.强制类型转换(显式转换)

var1 = int("1010",base = 2) #结果就是10
var2 = float("12.43") #原本是字符串,现在转化成float型
eval("print(123)") #结果123
tuple,list,set后面到后续会讲解
2.编码和解码
编码:字符串转化为字节的过程
解码:字节数据转化成字符串的过程
str1 = "你好"
b1 = str1.encode(encoding = 'gdk')
print(type(b1)) #byte
str2 = b1.decode(encoding = 'gdk')
print(str2) #你好
五.输入与输出
input函数获取用户键盘的输入
name = input("请输入姓名:")
print("welcome" + name)
1.普通输出
print的输出操作
#直接使用print进行打印输出
print("hello")
#可以通过print输出多个值,多个值之间,用逗号隔开
print("hello","nihao") #hello nihao
#可以使用end = 来控制print()以什么结尾
print("hello",end = "\n")
print("world")
结果:
hello
world
2.格式化输出
字符串使用百分号进行占位

int1 = 10
float1 = 3.14
str1 = "int1 = %d,float1 = %f" %(int1,float1)
print(str1) #init1 = 10,float1 = 3.14
字符串.format()
#方式一:不设置指定位置,按默认顺序
int1 = 10
float1 = 3.14
bool1 = true
str1 = "init1 = {},float1= {},bool1={}".format(*args:int1,float1,bool1)
print(str1) #int1 = 10,float1 = 3.14,bool1 = true
#方式二:设置指定位置,不可以和方式一混合使用
int1 = 10
float1 = 3.14
bool1 = true
str1 = "init1 = {2},float1= {1},bool1={0}".format(*args:int1,float1,bool1)
print(str1) #int1 = true,float1 = 3.14,bool1 = 10
#方式三:设置参数
int1 = 10
float1 = 3.14
bool1 = true
str1 = "init1 = {a},float1= {b},bool1={c}".format(a=int1,b=float1,c=bool1)
print(str1) #int1 = 10,float1 = 3.14,bool1 = true
数字格式化

f-字符串格式化输出(使用最多)

六.运算符
1.算数运算符
+加
-减号或者取负数
/除 *乘
// 整除,除后向下取整
%模,返回除法的余数
**幂运算
2.赋值运算符
=赋值运算
+=加法赋值
-=减法赋值
*= , /= , //= , %= , **=
海象运算符:
num1 = 20
print(num2 = 30 > num1) #报错,因为num2没有声明
修改成:
print((num2 := 30) > num1)
海象运算符是Python 3.8引入的语法特性,其符号为:=。它的主要作用是在表达式内部进行变量赋值,从而减少重复代码。该运算符的命名源于其符号形似海象的眼睛和獠牙。
核心功能
-
表达式内赋值
允许在条件判断、循环等场景中同时完成赋值操作。例如:if (n := len(data)) > 10: print(f"数据量过大: {n}条") -
避免重复计算
简化需要多次使用同一表达式的场景:while (block := f.read(1024)) != b"": process(block) -
简化推导式
在列表/字典推导式中复用计算结果:results = [y for x in data if (y := transform(x)) > 0]
3.比较运算符
比较运算符用于比较两个值的大小或相等性,并返回布尔值(True或False)。以下是常见的比较运算符及其用法:
数学符号与编程符号对比
| 数学意义 | 运算符 | 编程符号 | 示例(Python) | 返回值 |
|---|---|---|---|---|
| 等于 | $=$ | == | 5 == 5 | True |
| 不等于 | $\neq$ | != | 3 != 2 | True |
| 小于 | $<$ | < | 10 < 20 | True |
| 大于 | $>$ | > | 8 > 5 | True |
| 小于等于 | $\leq$ | <= | 7 <= 7 | True |
| 大于等于 | $\geq$ | >= | 4 >= 3 | True |
代码示例
a = 15
b = 20
print(a == b) # False
print(a != b) # True
print(a < b) # True
print(a >= b) # False
4.逻辑运算符
| 运算符 | 名称 | 描述 | 示例(返回结果) |
|---|---|---|---|
and | 逻辑与 | 当两个操作数均为 True 时,返回 True;否则返回 False。 | True and True → True |
or | 逻辑或 | 当至少一个操作数为 True 时,返回 True;否则返回 False。 | False or True → True |
not | 逻辑非 | 对操作数取反:如果操作数为 True,返回 False;反之返回 True。 | not True → False |
5.位运算符
以下是 Python 中的位运算符表格,列出了常见运算符的名称、符号和简要描述:
| 运算符名称 | 符号 | 描述 |
|---|---|---|
| 按位与 | & | 对两个操作数的每个位执行逻辑与操作,结果为 1 当且仅当两个位都为 1 |
| 按位或 | | | a|b |
| 按位异或 | ^ | 对两个操作数的每个位执行逻辑异或操作,结果为 1 当两个位不同 |
| 按位取反 | ~ | 对操作数的每个位执行逻辑非操作,将 0 变为 1,1 变为 0 |
| 左移 | << | 将操作数的位向左移动指定位数,右侧补 0,相当于乘2 |
| 右移 | >> | 将操作数的位向右移动指定位数,左侧补 0(逻辑右移)或补符号位(算术右移,取决于实现),相当于除2 |
原码,反码,补码
以下是关于原码、反码和补码知识点的表格总结,基于计算机数字表示的基础概念。表格使用4位二进制表示法进行示例说明,便于理解。
| 表示法 | 定义 | 优点 | 缺点 | |
|---|---|---|---|---|
| 原码 | 最高位表示符号($0$为正,$1$为负),其余位表示绝对值。 | 直观易理解,符号位直接标识正负。 | 存在正零($0000$)和负零($1000$),加减运算复杂,需处理符号位。 | |
| 反码 | 正数同原码;负数,符号位为$1$,其余位按位取反。 | 简化了部分运算,解决了原码中部分问题。 | 仍有正零($0000$)和负零($1111$),加减运算需循环进位,操作繁琐。 | |
| 补码 | 正数同原码;负数,先求反码,再加$1$。 | 无正负零问题,加减运算统一简单,适用于现代计算机系统。 | 表示范围不对称(例如4位中,负数范围$-8$到$-1$,正数$0$到$7$)。 |
6.成员运算符
好的,以下是关于Python成员运算符知识点的表格:
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
in | 检查元素是否在序列中 | 'a' in ['a', 'b', 'c'] | True |
5 in range(0, 10) | True | ||
'x' in 'hello' | False | ||
not in | 检查元素是否不在序列中 | 'd' not in ['a', 'b', 'c'] | True |
15 not in range(0, 10) | True | ||
'o' not in 'hello' | False |
使用场景:
- 常用于条件判断(
if语句)和循环(for/while)中 - 适用于字符串、列表、元组、字典(检查键)、集合等可迭代对象
- 在字典中仅检查键的存在性:
'key' in dict
7.身份运算符
以下是关于Python身份运算符知识点的详细表格。身份运算符用于比较两个对象的内存地址(即身份),而不是它们的值。它们包括is和is not运算符。表格总结了关键知识点,包括运算符、描述、示例和注意事项。
| 运算符 | 描述 | ||
|---|---|---|---|
is | 检查两个变量是否引用同一个对象(即内存地址相同)。 | ||
| x = [1, 2, 3] | |||
| y = x | |||
| print(x is y) # 输出: True | |||
| ``` | - 比较对象身份,而非值。<br>- 对小整数(如-5到256)可能因Python缓存而返回True,但不适用于所有对象。<br>- 与==(相等运算符)不同:==比较值,is比较身份。 | ||
is not | 检查两个变量是否不引用同一个对象(即内存地址不同)。 | ||
| a = [1] | |||
| b = [1] | |||
| print(a is not b) # 输出: True |
### 总结
- **使用场景**:身份运算符常用于比较对象身份,例如在单例模式或优化内存时。
- **最佳实践**:优先用`==`比较值,用`is`或`is not`比较身份;避免对小整数过度依赖`is`。
- **常见错误**:误用`is`代替`==`可能导致意外结果,例如`x = 5; y = 5; print(x is y)`可能为`True`(因缓存),但`x = 1000; y = 1000; print(x is y)`可能为`False`。
这个表格帮助你清晰理解身份运算符的核心概念,如有疑问可进一步探讨!
7.代码编码格式要求
1.在python中,代码块的结束不像其他一些编程语言使用大括号来明确界定,而是通过缩进来表示。建议每级缩进使用四个空格(tab键)
2.python中建议每一行不超过80个字
更多推荐

所有评论(0)