python-13-运算符和表达式

python运算符和表达式

一.说明

运算符和表达式 是基本的编程构建模块,但是还是有点语法的细节问题需要思考,请大家跟随我的文章,我会带大家详细解释清楚这章的内容并快速掌握他。

二.运算符

1.算术运算符
  • +:加法
  • -:减法
  • *:乘法
  • /:除法(返回浮点数)
  • //:地板除(返回整数)
  • %:取模(返回余数)
  • **:幂(指数)
a = 10
b = 3
print(a + b)  # 13
print(a // b) # 3
print(a ** b) # 1000
2.比较运算符
  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于
a = 10
b = 3
print(a == b) # False
print(a > b)  # True

注:常用比较运算我们都知道,下面我来介绍下字符串比较,主要注意以下2点

  1. 逐个字符进行比较,直到找到不同的字符。
  2. 字符串中的字符是按其 Unicode 编码值进行比较。
#注意Unicode 和字符相互转换
print(ord('a'))  #97
print(chr(97))   #a
print(ord('b'))  #98
print(chr(98))   #b
######字符串比较就是根据Unicode 编码值进行比较
c = '你好a'
d = '你好b'
print(c>d) #False
print(c<d) #True


c = '你好a1'
d = '你好b'
print(c>d) #False
print(c<d) #True

c = '你好100'
d = '你好b'
print(c>d) #False
print(c<d) #True
3.逻辑运算符
  • and:与
  • or:或
  • not:非
x = True
y = False
print(x and y) # False
print(x or y)  # True
print(not x)   # False

这里也有隐藏概念,在现实开发中 经常存在短路运算 来简化代码?那么这些是利用什么原理呢?

短路运算

and: 当左边计算为真则计算右边,让后返回右边计算结果;

当左边为假则返回左边计算结果,不再计算右边;

a = True
b = False
result = a and b  # result 为 False

a = True
b = False
result = a or b  # result 为 True


def func():
    print("Function called")
    return True

result = False and func()  # 不会打印 "Function called"

or: 当左边计算结果为真则返回左边计算结果,不再计算右边

当左边计算结果为假,则计算右边,并返回右边计算结果

a = True
b = False
result = a or b  # result 为 True

def func():
    print("Function called")
    return False

result = True or func()  # 不会打印 "Function called"
4.位运算符(基本可以忽略)

位运算符在Python中用于处理整数的二进制位。它们直接对数字的二进制表示进行操作。

主要应用场景:位运算在低级编程、图像处理、加密算法、网络协议等场景中非常有用。它们可以提高性能,减少内存使用,并允许开发者对数据的每一位进行精确控制。

所以还是算了吧。。没啥必要 太过底层 底层很重要,但是我们很少搞底层的东西。。。

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反
  • <<:左移
  • >>:右移
a = 5  # 0b0101
b = 3  # 0b0011
print(a & b)  # 1 (0b0001)
print(a | b)  # 7 (0b0111)
5.赋值运算符
  • =:赋值
  • +=:加并赋值
  • -=:减并赋值
  • *=:乘并赋值
  • /=:除并赋值
  • %=:取模并赋值
c = 10
c += 5  # 相当于 c = c + 5
print(c)  # 15

这里有一个隐藏概念,在其他语言中 有自增和自减 概念 但是在python中没有

  • 自增: a++或++a
  • 自减:a-- 或 --a
a = 10
b= a++   #报错
print(b)  

#########
a = 10
b= ++a
print(b) #10

那么在上面这段代码中为什么 一个报错 一个 结果却没有变?

你直接写 b = ++a,Python 会将 ++a 解释为 + (+a),实际上没有改变 a 的值,所以 b 将会是 10。同样,--a 会被解释为 - (-a),也不会改变 a 的值

关于赋值运算符,在python中还有几个隐藏概念

运算 解释
a,b = 100,200 元组赋值
[a, b] = [100, 200] 列表赋值(位置性)
a,b,c = ‘ABC’ 序列赋值(通用性)
a,b = [10,20] 序列赋值(通用性)
a,*b = ‘hello’ 扩展的序列解包(python3中特有)
a = b = c = 10 多目标赋值
a,*b = 'hello'
print(a) #h
print(b) #['e', 'l', 'l', 'o']
6.身份运算符
  • is:判断两个对象是否为同一个对象
  • is not:判断两个对象是否不是同一个对象
a = [1, 2, 3]
b = a
c = a[:]
print(a is b)   # True
print(a is c)   # False
7.成员运算符
  • in:判断一个值是否在序列中
  • not in:判断一个值是否不在序列中
lst = [1, 2, 3]
print(1 in lst)   # True
print(4 not in lst) # True

三.表达式

表达式是由运算符和操作数组成的,运算符用于对操作数执行某种操作并返回结果。表达式可以是简单的,也可以是复杂的。

  1. 算术表达式
    • 例如:3 + 5 * 2。此表达式将根据运算符优先级计算为13
  2. 比较表达式
    • 例如:a > b。此表达式将返回布尔值TrueFalse
  3. 逻辑表达式
    • 例如:(a > b) and (b > 0)。此表达式结合了多个布尔条件。
  4. 组合表达式
    • 表达式可以嵌套和组合使用,例如:(a + b) * (c - d)

四.运算优先级

在复杂的表达式中,运算符的优先级决定了计算的顺序。常见的优先级顺序(从高到低)如下:

  1. 括号 ()
  2. 指数 **
  3. 一元运算符(正负号 + -
  4. 乘法、除法、取模 * / // %
  5. 加法、减法 + -
  6. 位运算 << >>
  7. 比较运算 == != < <= > >=
  8. 逻辑运算 not
  9. 逻辑运算 and
  10. 逻辑运算 or

在现实开发中,如果你将表达式写的很复杂那么你绝对会被批!!!!所以不是必要情况下尽量减少运算优先级,如果你是准备学python来考八股文 嗯。。那随你。。。

五.python中的数据类型转换

python 虽然类型相对宽松,但别忘记了 python也是一门强类型语言,要求运算符两边的操作数必须是同一类型的,否则必须进行转换,下面我一个个进行说明,这一节是重点!!

1.隐式转换

当Python遇到需要不同类型的操作数进行运算时,它会自动将某些类型转换为另一种类型,而无需显式地调用转换函数。这通常遵循以下规则:

  1. 优先级:在数值运算中,Python会优先将整数(int)转换为浮点数(float),以保证结果的精确性。因为浮点数的范围更大,能够容纳更复杂的计算结果。
  2. 布尔类型:在逻辑运算中,布尔值(TrueFalse)也会被转换为整数(True转为1,False转为0)。
# 整数与浮点数的运算
x = 5        # 整数
y = 2.0      # 浮点数
result = x + y  # result 自动转换为浮点数 7.0
print(result)  # 输出: 7.0

#整数与布尔值的运算:
a = 3      # 整数
b = True   # 布尔值,隐式转换为 1
result = a + b  # result 为 4
print(result)  # 输出: 4

#字符串与其他类型的运算 注意这和其他语言不同
x = "Hello"
y = 5
# result = x + y  # 这会引发 TypeError

#在逻辑运算中的隐式转换
x = 0
y = 1
if x:
    print("x is True")  # 不会执行,因为 x 隐式转换为 False
else:
    print("x is False")  # 会执行


2.显示转换

int(x,[基 数]):将数字或字符串转换为整数,如果x为浮点数,则自动截断小数部分

float(x):将x转换成浮点型

str(x):将x转换成字符串

bool(x):转换成bool类型 的True或 False

repr(x):返回一个对象的String格式

eval(str):执行一个字符串表达式,返回计算的结果

tuple(seq):参数可以是元组、列表或者字典,为字典时,返回字典的key组成的集合

list(s):将序列转变成一个列表,参数可为元组、字典、列表,为字典时,返回字典的key组成的集合

set(s):将一个可以迭代对象转变为可变集合,并且去重复,返回结果可以用来计算差集x - y、并集x | y、交集x & y

dict():将其他可迭代对象转换为集合

chr(x):输入一个ASCII码(0-255),返回一个对应的字符。返回值是当前整数对应的ascii字符。

ord(x):返回一个字符所对应的码值

注意:eval(str)

eval()是Python的一个内置函数,用于执行一个字符串表达式并返回结果

# 变量调用
x = 10
result = eval("x + 5")  # 结果为 15
print(result)


#字符串调用 
result = eval("'Hello ' + 'World!'")  # 结果为 'Hello World!'
print(result)


#函数调用
def square(x):
    return x * x

result = eval("square(4)")  # 结果为 16
print(result)

六.总结

这一章是python 基础系列中的关于 运算符和表达式,这里要理解几个重点!

1.运算优先级,这很重要!在现实开发中尤其要注意!

2.数据类型转换!这也是重点,掌握对各种类型的转换,会让你代码得心应手!事半功倍!

这一章虽然简单,但是极其重要!我就整理到这!

创作整理不易,请大家多多关注 多多点赞,有写的不对的地方欢迎大家补充,我来整理,再次感谢!

你可能感兴趣的:(python基础,python,开发语言)