一.浮点数类型

使用时候可能出现微小误差,可以通过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引入的语法特性,其符号为:=。它的主要作用是在表达式内部进行变量赋值,从而减少重复代码。该运算符的命名源于其符号形似海象的眼睛和獠牙。

核心功能

  1. 表达式内赋值
    允许在条件判断、循环等场景中同时完成赋值操作。例如:

    if (n := len(data)) > 10:
        print(f"数据量过大: {n}条")
    

  2. 避免重复计算
    简化需要多次使用同一表达式的场景:

    while (block := f.read(1024)) != b"":
        process(block)
    

  3. 简化推导式
    在列表/字典推导式中复用计算结果:

    results = [y for x in data if (y := transform(x)) > 0]
    

3.比较运算符

比较运算符用于比较两个值的大小或相等性,并返回布尔值(True或False)。以下是常见的比较运算符及其用法:

数学符号与编程符号对比

数学意义运算符编程符号示例(Python)返回值
等于$=$==5 == 5True
不等于$\neq$!=3 != 2True
小于$<$<10 < 20True
大于$>$>8 > 5True
小于等于$\leq$<=7 <= 7True
大于等于$\geq$>=4 >= 3True

代码示例

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个字

更多推荐